void tbm_drm_helper_wl_auth_server_deinit(void);
/**
- * @brief Get a fd from the specific enviroment variable.
+ * @brief Get a drm master fd.
* @details
- * This function will dup the fd of the given enviroment variable.
+ * This function will dup the drm master fd.
The Caller SHOULD close the fd.
- In DRM system, a drm-master-fd SHOULD be shared between TDM backend and
- TBM backend in display server side by using "TDM_DRM_MASTER_FD" and "TBM_DRM_MASTER_FD".
- * @param[in] env The given enviroment variable
+ In DRM system, a drm master fd SHOULD be shared between TDM backend and
+ TBM backend in display server side.
* @return fd if success. Otherwise, -1.
- * @see #tdm_helper_set_tbm_master_fd()
+ * @see #tbm_drm_helper_set_tbm_master_fd()
+ * @see #tbm_drm_helper_unset_tbm_master_fd()
*/
int tbm_drm_helper_get_master_fd(void);
/**
- * @brief Set the given fd to TBM_DRM_MASTER_FD enviroment variable.
+ * @brief Set a drm master fd with the given fd.
* @details
- * In DRM system, a drm-master-fd @b SHOULD be shared between TDM backend and
- TBM backend in display server side by using "TDM_DRM_MASTER_FD"
- and "TBM_DRM_MASTER_FD".
+ * In DRM system, a drm master fd @b SHOULD be shared between TDM backend and
+ TBM backend in display server side.
* @param[in] fd The given fd
- * @see #tdm_helper_set_tbm_master_fd()
+ * @see #tbm_drm_helper_get_master_fd()
* @see #tbm_drm_helper_unset_tbm_master_fd()
*/
void tbm_drm_helper_set_tbm_master_fd(int fd);
/**
- * @brief Unset the TBM_DRM_MASTER_FD enviroment variable.
- * @details
- * In DRM system, a drm-master-fd @b SHOULD be shared between TDM backend and
- TBM backend in display server side by using "TDM_DRM_MASTER_FD"
- and "TBM_DRM_MASTER_FD".
- * @param[in] env The given enviroment variable
- * @param[in] fd The given fd
- * @see #tdm_helper_set_tbm_master_fd()
- * @see #tbm_drm_helper_unset_tbm_master_fd()
+ * @brief Unset a drm master fd.
+ * @see #tbm_drm_helper_get_master_fd()
+ * @see #tbm_drm_helper_set_tbm_master_fd()
*/
void tbm_drm_helper_unset_tbm_master_fd(void);
struct wayland_tbm_drm_auth_server *tbm_drm_auth_srv;
+static int tbm_drm_master_fd = -1;
+
/* LCOV_EXCL_START */
static void
_send_server_auth_info(struct wayland_tbm_drm_auth_server *tbm_drm_auth_srv,
int
tbm_drm_helper_get_master_fd(void)
{
- const char *value;
- int flags, fd = -1;
- int new_fd = -1;
- char *end;
- errno = 0;
-
- value = (const char*)getenv("TDM_DRM_MASTER_FD");
- if (!value)
- return -1;
+ int new_fd, flags, fd = -1;
- const long int sl = strtol(value, &end, 10);
- if (end == value) {
- TBM_LOG_E("%s: not a decimal number\n", value);
- return -1;
- } else if (*end != '\0') {
- TBM_LOG_E("%s: extra characters at end of input: %s\n", value, end);
- return -1;
- } else if ((sl == LONG_MIN || sl == LONG_MAX) && errno == ERANGE) {
- TBM_LOG_E("%s out of range of type long\n", value);
- return -1;
- } else if (sl >= INT_MAX) {
- TBM_LOG_E("%ld greater than INT_MAX\n", sl);
- return -1;
- } else if (sl <= INT_MIN) {
- TBM_LOG_E("%ld less than INT_MIN\n", sl);
- return -1;
- } else {
- int fd_max = tbm_bufmgr_get_fd_limit();
- fd = (int)sl;
- if (fd < 0 || fd > fd_max) {
- TBM_LOG_E("%d out of fd range\n", fd);
+#if 1 /* TODO: can't remove below at this time. This code SHOULD be removed later */
+ const char *value = (const char*)getenv("TDM_DRM_MASTER_FD");
+ if (value) {
+ char *end;
+ const long int sl = strtol(value, &end, 10);
+
+ if (end == value) {
+ TBM_LOG_E("%s: not a decimal number\n", value);
+ return -1;
+ } else if (*end != '\0') {
+ TBM_LOG_E("%s: extra characters at end of input: %s\n", value, end);
+ return -1;
+ } else if ((sl == LONG_MIN || sl == LONG_MAX) && errno == ERANGE) {
+ TBM_LOG_E("%s out of range of type long\n", value);
+ return -1;
+ } else if (sl >= INT_MAX) {
+ TBM_LOG_E("%ld greater than INT_MAX\n", sl);
+ return -1;
+ } else if (sl <= INT_MIN) {
+ TBM_LOG_E("%ld less than INT_MIN\n", sl);
return -1;
+ } else {
+ int fd_max = tbm_bufmgr_get_fd_limit();
+ fd = (int)sl;
+ if (fd < 0 || fd > fd_max) {
+ TBM_LOG_E("%d out of fd range\n", fd);
+ return -1;
+ }
}
+ } else
+#endif
+ fd = tbm_drm_master_fd;
+
+ if (fd == -1) {
+ TBM_LOG_I("no presetted TBM DRM MASTER FD");
+ return -1;
}
- TBM_LOG_I("TDM_DRM_MASTER_FD: %d\n", fd);
+ TBM_LOG_I("TBM DRM MASTER FD: %d\n", fd);
flags = fcntl(fd, F_GETFD);
if (flags == -1) {
void
tbm_drm_helper_set_tbm_master_fd(int fd)
{
- char buf[32];
- int ret;
+ int fd_max = tbm_bufmgr_get_fd_limit();
- snprintf(buf, sizeof(buf), "%d", fd);
+ if (tbm_drm_master_fd == fd)
+ return;
- ret = setenv("TBM_DRM_MASTER_FD", (const char*)buf, 1);
- if (ret) {
- TBM_LOG_E("failed to set TIZEN_DRM_MASTER_FD to %d\n", fd);
+ if (fd < 0 || fd > fd_max) {
+ TBM_LOG_E("%d out of fd range\n", fd);
return;
}
- TBM_LOG_I("TBM_DRM_MASTER_FD: %d\n", fd);
+ if (tbm_drm_master_fd != -1)
+ TBM_LOG_W("already has TBM DRM MASTER FD: %d\n", tbm_drm_master_fd);
+
+ tbm_drm_master_fd = fd;
+
+ TBM_LOG_I("TBM DRM MASTER FD: %d\n", tbm_drm_master_fd);
}
void
tbm_drm_helper_unset_tbm_master_fd(void)
{
- int ret;
-
- ret = unsetenv("TBM_DRM_MASTER_FD");
- if (ret) {
- TBM_LOG_E("failed to unset TBM_DRM_MASTER_FD\n");
- return;
- }
+ tbm_drm_master_fd = -1;
+ TBM_LOG_I("TBM DRM MASTER FD: %d\n", tbm_drm_master_fd);
}
/* LCOV_EXCL_STOP */