libdrm_meson: add function for zorder setting [1/1]

PD#TV-85483

Problem:
add function for zorder setting

Solution:
Add drmIoctl interface

Verify:
AH212.

Change-Id: I8929c689730ddd1cd6c026fddcdd6a3a9683e399
Signed-off-by: chen.wang1 <chen.wang1@amlogic.com>
diff --git a/meson/meson_drm_settings.c b/meson/meson_drm_settings.c
index eff843a..5a847e9 100644
--- a/meson/meson_drm_settings.c
+++ b/meson/meson_drm_settings.c
@@ -18,6 +18,7 @@
 #include "libdrm_meson_property.h"
 #include "meson_drm_settings.h"
 #include "meson_drm_log.h"
+#include "meson_drm.h"
 
 #define DEFAULT_CARD "/dev/dri/card0"
 #define PROP_NAME_MAX_LEN 50
@@ -996,3 +997,19 @@
     return value;
 }
 
+int meson_drm_setVideoZorder(int drmFd, unsigned int index, unsigned int zorder, unsigned int flag) {
+    int ret = -1;
+    struct video_zpos zpos;
+    if ( drmFd < 0) {
+        ERROR("%s  %d drmFd < 0",__FUNCTION__,__LINE__);
+        return ret;
+    }
+    zpos.flag = flag;
+    zpos.index = index;
+    zpos.zpos = zorder;
+    ret = drmIoctl(drmFd, DRM_IOCTL_MESON_SET_VIDEO_ZPOS, &zpos);
+    if (ret) {
+        ERROR("\n failed to create object[%s].\n",strerror(errno));
+    }
+    return ret;
+}

diff --git a/meson/meson_drm_settings.h b/meson/meson_drm_settings.h
index bda2e3e..bc8eb38 100644
--- a/meson/meson_drm_settings.h
+++ b/meson/meson_drm_settings.h
@@ -19,6 +19,12 @@
 #endif
 #define DRM_DISPLAY_MODE_LEN 32
 
+struct video_zpos {
+    unsigned int index;//<--Representing video index  Index 0 corresponds to modifying video 0;Index 1 corresponds to modifying video 1-->//
+    unsigned int zpos; //<--Represents the zorder value set-->//
+    unsigned int flag; //<-- Make the settings effective Set flag equal to 1 to indicate effectiveness-->//
+};
+
 typedef enum _MESON_CONTENT_TYPE {
     MESON_CONTENT_TYPE_Data      = 0,
     MESON_CONTENT_TYPE_Graphics,
@@ -152,6 +158,7 @@
 
 int meson_drm_getHdrCap( int drmFd, MESON_CONNECTOR_TYPE connType );
 int meson_drm_getDvCap( int drmFd, MESON_CONNECTOR_TYPE connType );
+int meson_drm_setVideoZorder(int drmFd, unsigned int index, unsigned int zorder, unsigned int flag);

 
 int meson_open_drm();
 void meson_close_drm(int drmFd);
diff --git a/meson/meson_drm_settings_test.c b/meson/meson_drm_settings_test.c
index f9938b5..5efb491 100644
--- a/meson/meson_drm_settings_test.c
+++ b/meson/meson_drm_settings_test.c
@@ -161,7 +161,7 @@
         meson_close_drm(drmFd);
     } else if (select_s_g == 0 && select_len == 1) {
         printf("set value:1.av mute 2.HDMI HDCP enable  3.HDCP Content Type "
-             " 4.DvEnable 5.active 6.vrr Enable\n");
+             " 4.DvEnable 5.active 6.vrr Enable 7.video zorder \n");
         int set = 0;
         int ret = -1;
         drmModeAtomicReq * req;
@@ -237,6 +237,19 @@
                 } else {
                     printf("\n scanf fail\n");
                 }
+        } else if (set == 7 && len == 1) {
+            printf("\n please enter the parameters in order(index zorder flag): \n");
+            int zorder = 0;
+            int index = 0;
+            int flag = 0;
+            len = scanf("%d %d %d",&index,&zorder,&flag);
+            if (len == 3) {
+                int ret = meson_drm_setVideoZorder(drmFd, index, zorder, flag);
+                if (ret)
+                    printf("\n meson_drm_setVideoZorder fail:\n");
+                } else {
+                    printf("\n \ scanf fail \n");
+                }
         }
         ret = drmModeAtomicCommit(drmFd, req, DRM_MODE_ATOMIC_ALLOW_MODESET, NULL);
         if (ret) {
diff --git a/meson_drm.h b/meson_drm.h
index ec05b1e..e7ce079 100644
--- a/meson_drm.h
+++ b/meson_drm.h
@@ -2,7 +2,6 @@
 /*

  * Copyright © 2019-2022 Amlogic Inc.

  */

-
 #ifndef _MESON_DRM_H
 #define _MESON_DRM_H
 
@@ -38,6 +37,12 @@
 	__u32 handle;
 };
 
+struct drm_meson_video_zpos_target {
+	__u32 index;
+	__u32 zpos;
+	__u32 flag;
+};
+
 /*Memory related.*/
 #define DRM_IOCTL_MESON_GEM_CREATE		DRM_IOWR(DRM_COMMAND_BASE + \
 		0x00, struct drm_meson_gem_create)
@@ -48,4 +53,7 @@
 #define DRM_IOCTL_MESON_ASYNC_ATOMIC	DRM_IOWR(DRM_COMMAND_BASE + \
 		0x10, struct drm_mode_atomic)
 
+#define DRM_IOCTL_MESON_SET_VIDEO_ZPOS		DRM_IOWR(DRM_COMMAND_BASE + \
+		0x11, struct drm_meson_video_zpos_target)
+

 #endif /* _MESON_DRM_H */