BuildRequires: pkgconfig(tinyxml2)
BuildRequires: pkgconfig(dlog)
-%if 0%{?npu_cuse}
-BuildRequires: libmrpsim-devel
-%endif
-
%if 0%{?npu_emul}
BuildRequires: libmrpsim-devel
%define enable_npu_emul -Denable_npu_emul=true
%define enable_npu_emul -Denable_npu_emul=false
%endif
+%if 0%{?npu_cuse}
+BuildRequires: libmrpsim-devel
+%define enable_npu_cuse -Denable_npu_cuse=true
+%else
+%define enable_npu_cuse -Denable_npu_cuse=false
+%endif
+
%if 0%{?npumgr_plugin}
BuildRequires: glib2-devel
%define enable_plugin_npumgr -Denable_plugin_npumgr=true
--libdir=%{_libdir} --includedir=%{_includedir} \
--datadir=%{_datadir} --sysconfdir=%{_sysconfdir} \
-Dtarget_platform=tizen -Denable_data_manip=true \
- %{enable_npu_emul} %{enable_plugin_npumgr} %{enable_plugin_nns} \
+ %{enable_npu_emul} %{enable_npu_cuse} %{enable_plugin_npumgr} %{enable_plugin_nns} \
build
ninja -C build %{?_smp_mflags}
const std::string TrinityVision2API::dev_node_base = "triv2";
std::bitset<CHAR_BIT> TrinityVision2API::dev_bitset = 0;
+#ifdef ENABLE_CUSE
/** @brief Cuse-hwmem element */
class CuseElement {
public:
};
ThreadSafeMap<int, CuseElement> TrinityVision2API::cuse_map;
+#endif
/**
* @brief constructor of the API instance for Trinity Vision driver
* @param[in] dev_id device id
*/
-TrinityVision2API::TrinityVision2API (int dev_id) : DriverAPI (dev_id), is_cuse_ (false) {
+TrinityVision2API::TrinityVision2API (int dev_id) : DriverAPI (dev_id) {
int num_devs;
if (dev_id > max_num_devs) {
return -ENODEV;
}
+#ifdef ENABLE_CUSE
+ std::ofstream ofs ("/tmp/npu-engine-pid.txt");
+ ofs << getpid ();
+ ofs.close ();
+#endif
+
path = "/dev/" + TrinityVision2API::dev_node_base + "-" + std::to_string (dev_id_);
fd = ::open (path.c_str (), O_RDWR);
if (fd < 0) {
return -ENODEV;
}
- /* Check if this device is using a cuse-based driver */
- if (type == TRINITY_DEV_VISION2_CUSE)
- this->is_cuse_ = true;
-
min_ver &= ~TRINITY_MASK_DEV;
/* Check if the major version numbers are same */
if ((lib_ver & TRINITY_MASK_MAJOR_VER) != (min_ver & TRINITY_MASK_MAJOR_VER)) {
if (ret < 0)
IOCTL_RETURN_ERRNO (TRINITY_IOCTL_HWMEM_ALLOC);
- if (!is_cuse_)
- return ret;
-
+#ifdef ENABLE_CUSE
CuseElement *elem;
std::string shm_name;
int dbuf_fd = ret;
delete elem;
return -EINVAL;
}
+#endif
return ret;
}
hwmem.type = contiguous ? TRINITY_HWMEM_DMA_CONT : TRINITY_HWMEM_DMA_IOMMU;
+#ifdef ENABLE_CUSE
/* translate dmabuf FDs to cuse-compatible ones */
- if (is_cuse_) {
- CuseElement *elem = cuse_map.find (dmabuf);
- if (elem == nullptr)
- return -ENOENT;
+ CuseElement *elem = cuse_map.find (dmabuf);
+ if (elem == nullptr)
+ return -ENOENT;
- hwmem.dbuf_fd = elem->getDbufFD ();
+ hwmem.dbuf_fd = elem->getDbufFD ();
- cuse_map.remove (dmabuf);
- } else {
- hwmem.dbuf_fd = dmabuf;
- }
+ cuse_map.remove (dmabuf);
+#else
+ hwmem.dbuf_fd = dmabuf;
+#endif
ret = ioctl (this->getDeviceFD (), TRINITY_IOCTL_HWMEM_DEALLOC, &hwmem);
if (ret < 0)
}
} /** else: don't care */
+#ifdef ENABLE_CUSE
/* translate dmabuf FDs to cuse-compatible ones */
int dbuf_fd = model_config->dbuf_fd;
int metadata_dbuf_fd = model_config->metadata_dbuf_fd;
- if (is_cuse_) {
- CuseElement *prog = cuse_map.find (dbuf_fd);
- if (prog == nullptr)
- return -ENOENT;
+ CuseElement *prog = cuse_map.find (dbuf_fd);
+ if (prog == nullptr)
+ return -ENOENT;
- CuseElement *meta = cuse_map.find (metadata_dbuf_fd);
- if (meta == nullptr)
- return -ENOENT;
+ CuseElement *meta = cuse_map.find (metadata_dbuf_fd);
+ if (meta == nullptr)
+ return -ENOENT;
- model_config->dbuf_fd = prog->getDbufFD ();
- model_config->metadata_dbuf_fd = meta->getDbufFD ();
- }
+ model_config->dbuf_fd = prog->getDbufFD ();
+ model_config->metadata_dbuf_fd = meta->getDbufFD ();
+#endif
ret = ioctl (this->getDeviceFD (), TRINITY_IOCTL_REGISTER_MODEL, model_config);
+#ifdef ENABLE_CUSE
/* rollback FDs to prevent any side-effects */
- if (is_cuse_) {
- model_config->dbuf_fd = dbuf_fd;
- model_config->metadata_dbuf_fd = metadata_dbuf_fd;
- }
+ model_config->dbuf_fd = dbuf_fd;
+ model_config->metadata_dbuf_fd = metadata_dbuf_fd;
+#endif
if (ret < 0)
IOCTL_RETURN_ERRNO (TRINITY_IOCTL_REGISTER_MODEL);
return -EINVAL;
}
+#ifdef ENABLE_CUSE
/* translate dmabuf FDs to cuse-compatible ones */
- if (is_cuse_) {
- CuseElement *elem;
- void *segt;
+ CuseElement *elem;
+ void *segt;
- elem = cuse_map.find (input_config->dbuf_fd);
- if (elem == nullptr)
- return -ENOENT;
+ elem = cuse_map.find (input_config->dbuf_fd);
+ if (elem == nullptr)
+ return -ENOENT;
+
+ segt = this->mmap (input_config->dbuf_fd, PAGE_SIZE);
+ if (segt == nullptr)
+ return -EINVAL;
- segt = this->mmap (input_config->dbuf_fd, PAGE_SIZE);
- if (segt == nullptr)
+ input_config->dbuf_fd = elem->getDbufFD ();
+ for (uint32_t i = 0; i < input_config->num_segments; i++) {
+ int dbuf_fd = ((int *) segt)[i];
+ if (dbuf_fd < 0) {
+ this->munmap (segt, PAGE_SIZE);
return -EINVAL;
+ }
- input_config->dbuf_fd = elem->getDbufFD ();
- for (uint32_t i = 0; i < input_config->num_segments; i++) {
- int dbuf_fd = ((int *) segt)[i];
- if (dbuf_fd < 0) {
- this->munmap (segt, PAGE_SIZE);
- return -EINVAL;
- }
-
- elem = cuse_map.find (dbuf_fd);
- if (elem == nullptr) {
- this->munmap (segt, PAGE_SIZE);
- return -ENOENT;
- }
-
- ((int *) segt)[i] = elem->getDbufFD ();
+ elem = cuse_map.find (dbuf_fd);
+ if (elem == nullptr) {
+ this->munmap (segt, PAGE_SIZE);
+ return -ENOENT;
}
- this->munmap (segt, PAGE_SIZE);
+ ((int *) segt)[i] = elem->getDbufFD ();
}
+ this->munmap (segt, PAGE_SIZE);
+#endif
+
ret = ioctl (this->getDeviceFD (), TRINITY_IOCTL_RUN_INPUT, input_config);
if (ret < 0)
IOCTL_RETURN_ERRNO (TRINITY_IOCTL_RUN_INPUT);
profile->num_layers = meta.total_ops;
profile->layers = new npu_profile_layer[profile->num_layers];
- if (is_cuse_) {
- std::string prof_path = Conf::getInstance ().getPrefixProfile ();
- prof_path += "/ne_profile." + std::to_string (req_id) + ".rec";
- profile->prof_path = strdup (prof_path.c_str ());
- }
+#ifdef ENABLE_CUSE
+ std::string prof_path = Conf::getInstance ().getPrefixProfile ();
+ prof_path += "/ne_profile." + std::to_string (req_id) + ".rec";
+ profile->prof_path = strdup (prof_path.c_str ());
+#endif
buff.req_id = meta.req_id;