sti_layer.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*
  2. * Copyright (C) STMicroelectronics SA 2014
  3. * Authors: Benjamin Gaignard <benjamin.gaignard@st.com>
  4. * Fabien Dessenne <fabien.dessenne@st.com>
  5. * for STMicroelectronics.
  6. * License terms: GNU General Public License (GPL), version 2
  7. */
  8. #ifndef _STI_LAYER_H_
  9. #define _STI_LAYER_H_
  10. #include <drm/drmP.h>
  11. #define to_sti_layer(x) container_of(x, struct sti_layer, plane)
  12. #define STI_LAYER_TYPE_SHIFT 8
  13. #define STI_LAYER_TYPE_MASK (~((1<<STI_LAYER_TYPE_SHIFT)-1))
  14. struct sti_layer;
  15. enum sti_layer_type {
  16. STI_GDP = 1 << STI_LAYER_TYPE_SHIFT,
  17. STI_VID = 2 << STI_LAYER_TYPE_SHIFT,
  18. STI_CUR = 3 << STI_LAYER_TYPE_SHIFT,
  19. STI_BCK = 4 << STI_LAYER_TYPE_SHIFT,
  20. STI_VDP = 5 << STI_LAYER_TYPE_SHIFT
  21. };
  22. enum sti_layer_id_of_type {
  23. STI_ID_0 = 0,
  24. STI_ID_1 = 1,
  25. STI_ID_2 = 2,
  26. STI_ID_3 = 3
  27. };
  28. enum sti_layer_desc {
  29. STI_GDP_0 = STI_GDP | STI_ID_0,
  30. STI_GDP_1 = STI_GDP | STI_ID_1,
  31. STI_GDP_2 = STI_GDP | STI_ID_2,
  32. STI_GDP_3 = STI_GDP | STI_ID_3,
  33. STI_VID_0 = STI_VID | STI_ID_0,
  34. STI_VID_1 = STI_VID | STI_ID_1,
  35. STI_HQVDP_0 = STI_VDP | STI_ID_0,
  36. STI_CURSOR = STI_CUR,
  37. STI_BACK = STI_BCK
  38. };
  39. /**
  40. * STI layer functions structure
  41. *
  42. * @get_formats: get layer supported formats
  43. * @get_nb_formats: get number of format supported
  44. * @init: initialize the layer
  45. * @prepare: prepare layer before rendering
  46. * @commit: set layer for rendering
  47. * @disable: disable layer
  48. */
  49. struct sti_layer_funcs {
  50. const uint32_t* (*get_formats)(struct sti_layer *layer);
  51. unsigned int (*get_nb_formats)(struct sti_layer *layer);
  52. void (*init)(struct sti_layer *layer);
  53. int (*prepare)(struct sti_layer *layer, bool first_prepare);
  54. int (*commit)(struct sti_layer *layer);
  55. int (*disable)(struct sti_layer *layer);
  56. };
  57. /**
  58. * STI layer structure
  59. *
  60. * @plane: drm plane it is bound to (if any)
  61. * @fb: drm fb it is bound to
  62. * @crtc: crtc it is bound to
  63. * @mode: display mode
  64. * @desc: layer type & id
  65. * @device: driver device
  66. * @regs: layer registers
  67. * @ops: layer functions
  68. * @zorder: layer z-order
  69. * @mixer_id: id of the mixer used to display the layer
  70. * @enabled: to know if the layer is active or not
  71. * @src_x src_y: coordinates of the input (fb) area
  72. * @src_w src_h: size of the input (fb) area
  73. * @dst_x dst_y: coordinates of the output (crtc) area
  74. * @dst_w dst_h: size of the output (crtc) area
  75. * @format: format
  76. * @pitches: pitch of 'planes' (eg: Y, U, V)
  77. * @offsets: offset of 'planes'
  78. * @vaddr: virtual address of the input buffer
  79. * @paddr: physical address of the input buffer
  80. */
  81. struct sti_layer {
  82. struct drm_plane plane;
  83. struct drm_framebuffer *fb;
  84. struct drm_crtc *crtc;
  85. struct drm_display_mode *mode;
  86. enum sti_layer_desc desc;
  87. struct device *dev;
  88. void __iomem *regs;
  89. const struct sti_layer_funcs *ops;
  90. int zorder;
  91. int mixer_id;
  92. bool enabled;
  93. int src_x, src_y;
  94. int src_w, src_h;
  95. int dst_x, dst_y;
  96. int dst_w, dst_h;
  97. uint32_t format;
  98. unsigned int pitches[4];
  99. unsigned int offsets[4];
  100. void *vaddr;
  101. dma_addr_t paddr;
  102. };
  103. struct sti_layer *sti_layer_create(struct device *dev, int desc,
  104. void __iomem *baseaddr);
  105. int sti_layer_prepare(struct sti_layer *layer,
  106. struct drm_crtc *crtc,
  107. struct drm_framebuffer *fb,
  108. struct drm_display_mode *mode,
  109. int mixer_id,
  110. int dest_x, int dest_y,
  111. int dest_w, int dest_h,
  112. int src_x, int src_y,
  113. int src_w, int src_h);
  114. int sti_layer_commit(struct sti_layer *layer);
  115. int sti_layer_disable(struct sti_layer *layer);
  116. const uint32_t *sti_layer_get_formats(struct sti_layer *layer);
  117. unsigned int sti_layer_get_nb_formats(struct sti_layer *layer);
  118. const char *sti_layer_to_str(struct sti_layer *layer);
  119. #endif