Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / gpu / drm / sti / sti_layer.h
diff --git a/kernel/drivers/gpu/drm/sti/sti_layer.h b/kernel/drivers/gpu/drm/sti/sti_layer.h
new file mode 100644 (file)
index 0000000..ceff497
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) STMicroelectronics SA 2014
+ * Authors: Benjamin Gaignard <benjamin.gaignard@st.com>
+ *          Fabien Dessenne <fabien.dessenne@st.com>
+ *          for STMicroelectronics.
+ * License terms:  GNU General Public License (GPL), version 2
+ */
+
+#ifndef _STI_LAYER_H_
+#define _STI_LAYER_H_
+
+#include <drm/drmP.h>
+
+#define to_sti_layer(x) container_of(x, struct sti_layer, plane)
+
+#define STI_LAYER_TYPE_SHIFT 8
+#define STI_LAYER_TYPE_MASK (~((1<<STI_LAYER_TYPE_SHIFT)-1))
+
+struct sti_layer;
+
+enum sti_layer_type {
+       STI_GDP = 1 << STI_LAYER_TYPE_SHIFT,
+       STI_VID = 2 << STI_LAYER_TYPE_SHIFT,
+       STI_CUR = 3 << STI_LAYER_TYPE_SHIFT,
+       STI_BCK = 4 << STI_LAYER_TYPE_SHIFT,
+       STI_VDP = 5 << STI_LAYER_TYPE_SHIFT
+};
+
+enum sti_layer_id_of_type {
+       STI_ID_0 = 0,
+       STI_ID_1 = 1,
+       STI_ID_2 = 2,
+       STI_ID_3 = 3
+};
+
+enum sti_layer_desc {
+       STI_GDP_0       = STI_GDP | STI_ID_0,
+       STI_GDP_1       = STI_GDP | STI_ID_1,
+       STI_GDP_2       = STI_GDP | STI_ID_2,
+       STI_GDP_3       = STI_GDP | STI_ID_3,
+       STI_VID_0       = STI_VID | STI_ID_0,
+       STI_VID_1       = STI_VID | STI_ID_1,
+       STI_HQVDP_0     = STI_VDP | STI_ID_0,
+       STI_CURSOR      = STI_CUR,
+       STI_BACK        = STI_BCK
+};
+
+/**
+ * STI layer functions structure
+ *
+ * @get_formats:       get layer supported formats
+ * @get_nb_formats:    get number of format supported
+ * @init:               initialize the layer
+ * @prepare:           prepare layer before rendering
+ * @commit:            set layer for rendering
+ * @disable:           disable layer
+ */
+struct sti_layer_funcs {
+       const uint32_t* (*get_formats)(struct sti_layer *layer);
+       unsigned int (*get_nb_formats)(struct sti_layer *layer);
+       void (*init)(struct sti_layer *layer);
+       int (*prepare)(struct sti_layer *layer, bool first_prepare);
+       int (*commit)(struct sti_layer *layer);
+       int (*disable)(struct sti_layer *layer);
+};
+
+/**
+ * STI layer structure
+ *
+ * @plane:              drm plane it is bound to (if any)
+ * @fb:                 drm fb it is bound to
+ * @crtc:               crtc it is bound to
+ * @mode:               display mode
+ * @desc:               layer type & id
+ * @device:            driver device
+ * @regs:              layer registers
+ * @ops:                layer functions
+ * @zorder:             layer z-order
+ * @mixer_id:           id of the mixer used to display the layer
+ * @enabled:            to know if the layer is active or not
+ * @src_x src_y:        coordinates of the input (fb) area
+ * @src_w src_h:        size of the input (fb) area
+ * @dst_x dst_y:        coordinates of the output (crtc) area
+ * @dst_w dst_h:        size of the output (crtc) area
+ * @format:             format
+ * @pitches:            pitch of 'planes' (eg: Y, U, V)
+ * @offsets:            offset of 'planes'
+ * @vaddr:              virtual address of the input buffer
+ * @paddr:              physical address of the input buffer
+ */
+struct sti_layer {
+       struct drm_plane plane;
+       struct drm_framebuffer *fb;
+       struct drm_crtc *crtc;
+       struct drm_display_mode *mode;
+       enum sti_layer_desc desc;
+       struct device *dev;
+       void __iomem *regs;
+       const struct sti_layer_funcs *ops;
+       int zorder;
+       int mixer_id;
+       bool enabled;
+       int src_x, src_y;
+       int src_w, src_h;
+       int dst_x, dst_y;
+       int dst_w, dst_h;
+       uint32_t format;
+       unsigned int pitches[4];
+       unsigned int offsets[4];
+       void *vaddr;
+       dma_addr_t paddr;
+};
+
+struct sti_layer *sti_layer_create(struct device *dev, int desc,
+                       void __iomem *baseaddr);
+int sti_layer_prepare(struct sti_layer *layer,
+                       struct drm_crtc *crtc,
+                       struct drm_framebuffer *fb,
+                       struct drm_display_mode *mode,
+                       int mixer_id,
+                       int dest_x, int dest_y,
+                       int dest_w, int dest_h,
+                       int src_x, int src_y,
+                       int src_w, int src_h);
+int sti_layer_commit(struct sti_layer *layer);
+int sti_layer_disable(struct sti_layer *layer);
+const uint32_t *sti_layer_get_formats(struct sti_layer *layer);
+unsigned int sti_layer_get_nb_formats(struct sti_layer *layer);
+const char *sti_layer_to_str(struct sti_layer *layer);
+
+#endif