summaryrefslogtreecommitdiffstats
path: root/hwc/hwc_dev.h
diff options
context:
space:
mode:
Diffstat (limited to 'hwc/hwc_dev.h')
-rw-r--r--hwc/hwc_dev.h180
1 files changed, 180 insertions, 0 deletions
diff --git a/hwc/hwc_dev.h b/hwc/hwc_dev.h
new file mode 100644
index 0000000..32cc273
--- /dev/null
+++ b/hwc/hwc_dev.h
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) Texas Instruments - http://www.ti.com/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HWC_DEV__
+#define __HWC_DEV__
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include <hardware/hwcomposer.h>
+#ifdef OMAP_ENHANCEMENT_S3D
+#include <ui/S3DFormat.h>
+#endif
+
+#include <linux/bltsville.h>
+#include <video/dsscomp.h>
+#include <video/omap_hwc.h>
+
+#include "hal_public.h"
+#include "rgz_2d.h"
+
+struct ext_transform {
+ uint8_t rotation : 3; /* 90-degree clockwise rotations */
+ uint8_t hflip : 1; /* flip l-r (after rotation) */
+ uint8_t enabled : 1; /* cloning enabled */
+ uint8_t docking : 1; /* docking vs. mirroring - used for state */
+};
+typedef struct ext_transform ext_transform_t;
+
+/* cloning support and state */
+struct omap_hwc_ext {
+ /* support */
+ ext_transform_t mirror; /* mirroring settings */
+ ext_transform_t dock; /* docking settings */
+ float lcd_xpy; /* pixel ratio for UI */
+ bool avoid_mode_change; /* use HDMI mode used for mirroring if possible */
+ bool force_dock; /* must dock */
+
+ /* state */
+ bool hdmi_state; /* whether HDMI is connected */
+ bool on_tv; /* using a tv */
+ ext_transform_t current; /* current settings */
+ ext_transform_t last; /* last-used settings */
+
+ /* configuration */
+ uint32_t last_xres_used; /* resolution and pixel ratio used for mode selection */
+ uint32_t last_yres_used;
+ uint32_t last_mode; /* 2-s complement of last HDMI mode set, 0 if none */
+ uint32_t mirror_mode; /* 2-s complement of mode used when mirroring */
+ float last_xpy;
+ uint16_t width; /* external screen dimensions */
+ uint16_t height;
+ uint32_t xres; /* external screen resolution */
+ uint32_t yres;
+ float m[2][3]; /* external transformation matrix */
+ hwc_rect_t mirror_region; /* region of screen to mirror */
+#ifdef OMAP_ENHANCEMENT_S3D
+ bool s3d_enabled;
+ bool s3d_capable;
+ enum S3DLayoutType s3d_type;
+ enum S3DLayoutOrder s3d_order;
+#endif
+};
+typedef struct omap_hwc_ext omap_hwc_ext_t;
+
+enum bltpolicy {
+ BLTPOLICY_DISABLED = 0,
+ BLTPOLICY_DEFAULT = 1, /* Default blit policy */
+ BLTPOLICY_ALL, /* Test mode to attempt to blit all */
+};
+
+enum bltmode {
+ BLTMODE_PAINT = 0, /* Attempt to blit layer by layer */
+ BLTMODE_REGION = 1, /* Attempt to blit layers via regions */
+};
+
+struct omap_hwc_module {
+ hwc_module_t base;
+
+ IMG_framebuffer_device_public_t *fb_dev;
+};
+typedef struct omap_hwc_module omap_hwc_module_t;
+
+struct counts {
+ uint32_t possible_overlay_layers;
+ uint32_t composited_layers;
+ uint32_t scaled_layers;
+ uint32_t RGB;
+ uint32_t BGR;
+ uint32_t NV12;
+ uint32_t dockable;
+ uint32_t protected;
+#ifdef OMAP_ENHANCEMENT_S3D
+ uint32_t s3d;
+#endif
+
+ uint32_t max_hw_overlays;
+ uint32_t max_scaling_overlays;
+ uint32_t mem;
+};
+typedef struct counts counts_t;
+
+struct omap_hwc_device {
+ /* static data */
+ hwc_composer_device_1_t base;
+ hwc_procs_t *procs;
+ pthread_t hdmi_thread;
+#ifdef SYSFS_VSYNC_NOTIFICATION
+ pthread_t vsync_thread;
+#endif
+ pthread_mutex_t lock;
+
+ IMG_framebuffer_device_public_t *fb_dev;
+ struct dsscomp_display_info fb_dis;
+ int fb_fd; /* file descriptor for /dev/fb0 */
+ int dsscomp_fd; /* file descriptor for /dev/dsscomp */
+ int hdmi_fb_fd; /* file descriptor for /dev/fb1 */
+ int pipe_fds[2]; /* pipe to event thread */
+
+ int img_mem_size; /* size of fb for hdmi */
+ void *img_mem_ptr; /* start of fb for hdmi */
+
+ int flags_rgb_order;
+ int flags_nv12_only;
+ float upscaled_nv12_limit;
+
+ bool on_tv; /* using a tv */
+ int force_sgx;
+ omap_hwc_ext_t ext; /* external mirroring data */
+ int idle;
+
+ float primary_m[2][3]; /* internal transformation matrix */
+ int primary_transform;
+ int primary_rotation;
+ hwc_rect_t primary_region;
+
+ buffer_handle_t *buffers;
+ bool use_sgx;
+ bool swap_rb;
+ uint32_t post2_layers; /* buffers used with DSS pipes*/
+ uint32_t post2_blit_buffers; /* buffers used with blit */
+ int ext_ovls; /* # of overlays on external display for current composition */
+ int ext_ovls_wanted; /* # of overlays that should be on external display for current composition */
+ int last_ext_ovls; /* # of overlays on external/internal display for last composition */
+ int last_int_ovls;
+#ifdef OMAP_ENHANCEMENT_S3D
+ enum S3DLayoutType s3d_input_type;
+ enum S3DLayoutOrder s3d_input_order;
+#endif
+ enum bltmode blt_mode;
+ enum bltpolicy blt_policy;
+
+ uint32_t blit_flags;
+ int blit_num;
+ struct omap_hwc_data comp_data; /* This is a kernel data structure */
+ struct rgz_blt_entry blit_ops[RGZ_MAX_BLITS];
+
+ counts_t counts;
+
+ int ion_fd;
+ struct ion_handle *ion_handles[2];
+ bool use_sw_vsync;
+
+};
+typedef struct omap_hwc_device omap_hwc_device_t;
+
+#endif