11#pragma once
22
3+ #include < HAP_compute_res.h>
34#include < HAP_vtcm_mgr.h>
45
56#include " util.hpp"
@@ -9,15 +10,28 @@ namespace hexagon {
910class vtcm_mem {
1011 public:
1112 explicit vtcm_mem (size_t size, bool single_page) {
13+ constexpr const unsigned int kTimeoutUs = 10000 ; // 10ms timeout
14+
1215 size_t avail_size = single_page ? get_avail_page_size () : get_avail_block_size ();
1316 if (size > avail_size) {
1417 DEVICE_LOG_ERROR (" Requested VTCM size %zu exceeds available size %zu\n " , size, avail_size);
1518 return ;
1619 }
1720
18- _vtcm_mem = HAP_request_VTCM ((unsigned int ) size, single_page ? 1 : 0 );
21+ compute_res_attr_t compute_res;
22+ HAP_compute_res_attr_init (&compute_res);
23+ HAP_compute_res_attr_set_serialize (&compute_res, false );
24+ HAP_compute_res_attr_set_vtcm_param (&compute_res, size, single_page ? 1 : 0 );
25+
26+ _vtcm_context_id = HAP_compute_res_acquire (&compute_res, kTimeoutUs ); // 10ms timeout
27+ if (_vtcm_context_id == 0 ) {
28+ DEVICE_LOG_ERROR (" Failed to acquire VTCM context: %zu bytes, timeout %zu us\n " , size, kTimeoutUs );
29+ return ;
30+ }
31+
32+ _vtcm_mem = HAP_compute_res_attr_get_vtcm_ptr (&compute_res);
1933 if (_vtcm_mem == nullptr ) {
20- DEVICE_LOG_ERROR (" Failed to allocate VTCM memory: %zu bytes\n " , size);
34+ DEVICE_LOG_ERROR (" Failed to allocate VTCM memory: %zu bytes, timeout %zu us \n " , size, kTimeoutUs );
2135 return ;
2236 }
2337
@@ -26,7 +40,18 @@ class vtcm_mem {
2640 }
2741
2842 explicit vtcm_mem (size_t size, bool single_page, size_t timeout_us) {
29- _vtcm_mem = HAP_request_async_VTCM ((unsigned int ) size, single_page ? 1 : 0 , (unsigned int ) timeout_us);
43+ compute_res_attr_t compute_res;
44+ HAP_compute_res_attr_init (&compute_res);
45+ HAP_compute_res_attr_set_serialize (&compute_res, false );
46+ HAP_compute_res_attr_set_vtcm_param (&compute_res, size, single_page ? 1 : 0 );
47+
48+ _vtcm_context_id = HAP_compute_res_acquire (&compute_res, timeout_us);
49+ if (_vtcm_context_id == 0 ) {
50+ DEVICE_LOG_ERROR (" Failed to acquire VTCM context: %zu bytes, timeout %zu us\n " , size, timeout_us);
51+ return ;
52+ }
53+
54+ _vtcm_mem = HAP_compute_res_attr_get_vtcm_ptr (&compute_res);
3055 if (_vtcm_mem == nullptr ) {
3156 DEVICE_LOG_ERROR (" Failed to allocate VTCM memory: %zu bytes, timeout %zu us\n " , size, timeout_us);
3257 return ;
@@ -37,8 +62,8 @@ class vtcm_mem {
3762 }
3863
3964 ~vtcm_mem () {
40- if (is_valid () ) {
41- auto ret = HAP_release_VTCM (_vtcm_mem );
65+ if (_vtcm_context_id != 0 ) {
66+ auto ret = HAP_compute_res_release (_vtcm_context_id );
4267 if (ret != AEE_SUCCESS) {
4368 DEVICE_LOG_ERROR (" Failed to release VTCM memory: %d\n " , ret);
4469 }
@@ -95,6 +120,8 @@ class vtcm_mem {
95120 void * _vtcm_mem = nullptr ;
96121 size_t _vtcm_size = 0 ;
97122
123+ unsigned int _vtcm_context_id = 0 ;
124+
98125 DISABLE_COPY_AND_MOVE (vtcm_mem);
99126};
100127
0 commit comments