dcn10_ipp.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /*
  2. * Copyright 2017 Advanced Micro Devices, Inc.
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a
  5. * copy of this software and associated documentation files (the "Software"),
  6. * to deal in the Software without restriction, including without limitation
  7. * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8. * and/or sell copies of the Software, and to permit persons to whom the
  9. * Software is furnished to do so, subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in
  12. * all copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  17. * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
  18. * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
  19. * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  20. * OTHER DEALINGS IN THE SOFTWARE.
  21. *
  22. * Authors: AMD
  23. *
  24. */
  25. #ifndef _DCN10_IPP_H_
  26. #define _DCN10_IPP_H_
  27. #include "ipp.h"
  28. #define TO_DCN10_IPP(ipp)\
  29. container_of(ipp, struct dcn10_ipp, base)
  30. #define IPP_REG_LIST_DCN(id) \
  31. SRI(FORMAT_CONTROL, CNVC_CFG, id), \
  32. SRI(CNVC_SURFACE_PIXEL_FORMAT, CNVC_CFG, id), \
  33. SRI(CURSOR0_CONTROL, CNVC_CUR, id), \
  34. SRI(CURSOR0_COLOR0, CNVC_CUR, id), \
  35. SRI(CURSOR0_COLOR1, CNVC_CUR, id)
  36. #define IPP_REG_LIST_DCN10(id) \
  37. IPP_REG_LIST_DCN(id), \
  38. SRI(CURSOR_SETTINS, HUBPREQ, id), \
  39. SRI(CURSOR_SURFACE_ADDRESS_HIGH, CURSOR, id), \
  40. SRI(CURSOR_SURFACE_ADDRESS, CURSOR, id), \
  41. SRI(CURSOR_SIZE, CURSOR, id), \
  42. SRI(CURSOR_CONTROL, CURSOR, id), \
  43. SRI(CURSOR_POSITION, CURSOR, id), \
  44. SRI(CURSOR_HOT_SPOT, CURSOR, id), \
  45. SRI(CURSOR_DST_OFFSET, CURSOR, id)
  46. #define CURSOR0_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT 0x4
  47. #define CURSOR0_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK 0x00000010L
  48. #define CURSOR1_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT 0x4
  49. #define CURSOR1_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK 0x00000010L
  50. #define CURSOR2_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT 0x4
  51. #define CURSOR2_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK 0x00000010L
  52. #define CURSOR3_CURSOR_CONTROL__CURSOR_2X_MAGNIFY__SHIFT 0x4
  53. #define CURSOR3_CURSOR_CONTROL__CURSOR_2X_MAGNIFY_MASK 0x00000010L
  54. #define IPP_SF(reg_name, field_name, post_fix)\
  55. .field_name = reg_name ## __ ## field_name ## post_fix
  56. #define IPP_MASK_SH_LIST_DCN(mask_sh) \
  57. IPP_SF(CNVC_CFG0_CNVC_SURFACE_PIXEL_FORMAT, CNVC_SURFACE_PIXEL_FORMAT, mask_sh), \
  58. IPP_SF(CNVC_CFG0_FORMAT_CONTROL, CNVC_BYPASS, mask_sh), \
  59. IPP_SF(CNVC_CFG0_FORMAT_CONTROL, ALPHA_EN, mask_sh), \
  60. IPP_SF(CNVC_CFG0_FORMAT_CONTROL, FORMAT_EXPANSION_MODE, mask_sh), \
  61. IPP_SF(CNVC_CUR0_CURSOR0_CONTROL, CUR0_MODE, mask_sh), \
  62. IPP_SF(CNVC_CUR0_CURSOR0_COLOR0, CUR0_COLOR0, mask_sh), \
  63. IPP_SF(CNVC_CUR0_CURSOR0_COLOR1, CUR0_COLOR1, mask_sh), \
  64. IPP_SF(CNVC_CUR0_CURSOR0_CONTROL, CUR0_EXPANSION_MODE, mask_sh), \
  65. IPP_SF(CNVC_CUR0_CURSOR0_CONTROL, CUR0_ENABLE, mask_sh)
  66. #define IPP_MASK_SH_LIST_DCN10(mask_sh) \
  67. IPP_MASK_SH_LIST_DCN(mask_sh),\
  68. IPP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_DST_Y_OFFSET, mask_sh), \
  69. IPP_SF(HUBPREQ0_CURSOR_SETTINS, CURSOR0_CHUNK_HDL_ADJUST, mask_sh), \
  70. IPP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS_HIGH, CURSOR_SURFACE_ADDRESS_HIGH, mask_sh), \
  71. IPP_SF(CURSOR0_CURSOR_SURFACE_ADDRESS, CURSOR_SURFACE_ADDRESS, mask_sh), \
  72. IPP_SF(CURSOR0_CURSOR_SIZE, CURSOR_WIDTH, mask_sh), \
  73. IPP_SF(CURSOR0_CURSOR_SIZE, CURSOR_HEIGHT, mask_sh), \
  74. IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_MODE, mask_sh), \
  75. IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_2X_MAGNIFY, mask_sh), \
  76. IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_PITCH, mask_sh), \
  77. IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_LINES_PER_CHUNK, mask_sh), \
  78. IPP_SF(CURSOR0_CURSOR_CONTROL, CURSOR_ENABLE, mask_sh), \
  79. IPP_SF(CURSOR0_CURSOR_POSITION, CURSOR_X_POSITION, mask_sh), \
  80. IPP_SF(CURSOR0_CURSOR_POSITION, CURSOR_Y_POSITION, mask_sh), \
  81. IPP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_X, mask_sh), \
  82. IPP_SF(CURSOR0_CURSOR_HOT_SPOT, CURSOR_HOT_SPOT_Y, mask_sh), \
  83. IPP_SF(CURSOR0_CURSOR_DST_OFFSET, CURSOR_DST_X_OFFSET, mask_sh), \
  84. IPP_SF(CNVC_CFG0_FORMAT_CONTROL, OUTPUT_FP, mask_sh)
  85. #define IPP_DCN10_REG_FIELD_LIST(type) \
  86. type CNVC_SURFACE_PIXEL_FORMAT; \
  87. type CNVC_BYPASS; \
  88. type ALPHA_EN; \
  89. type FORMAT_EXPANSION_MODE; \
  90. type CURSOR0_DST_Y_OFFSET; \
  91. type CURSOR0_CHUNK_HDL_ADJUST; \
  92. type CUR0_MODE; \
  93. type CUR0_COLOR0; \
  94. type CUR0_COLOR1; \
  95. type CUR0_EXPANSION_MODE; \
  96. type CURSOR_SURFACE_ADDRESS_HIGH; \
  97. type CURSOR_SURFACE_ADDRESS; \
  98. type CURSOR_WIDTH; \
  99. type CURSOR_HEIGHT; \
  100. type CURSOR_MODE; \
  101. type CURSOR_2X_MAGNIFY; \
  102. type CURSOR_PITCH; \
  103. type CURSOR_LINES_PER_CHUNK; \
  104. type CURSOR_ENABLE; \
  105. type CUR0_ENABLE; \
  106. type CURSOR_X_POSITION; \
  107. type CURSOR_Y_POSITION; \
  108. type CURSOR_HOT_SPOT_X; \
  109. type CURSOR_HOT_SPOT_Y; \
  110. type CURSOR_DST_X_OFFSET; \
  111. type OUTPUT_FP
  112. struct dcn10_ipp_shift {
  113. IPP_DCN10_REG_FIELD_LIST(uint8_t);
  114. };
  115. struct dcn10_ipp_mask {
  116. IPP_DCN10_REG_FIELD_LIST(uint32_t);
  117. };
  118. struct dcn10_ipp_registers {
  119. uint32_t CURSOR_SETTINS;
  120. uint32_t CURSOR_SETTINGS;
  121. uint32_t CNVC_SURFACE_PIXEL_FORMAT;
  122. uint32_t CURSOR0_CONTROL;
  123. uint32_t CURSOR0_COLOR0;
  124. uint32_t CURSOR0_COLOR1;
  125. uint32_t FORMAT_CONTROL;
  126. uint32_t CURSOR_SURFACE_ADDRESS_HIGH;
  127. uint32_t CURSOR_SURFACE_ADDRESS;
  128. uint32_t CURSOR_SIZE;
  129. uint32_t CURSOR_CONTROL;
  130. uint32_t CURSOR_POSITION;
  131. uint32_t CURSOR_HOT_SPOT;
  132. uint32_t CURSOR_DST_OFFSET;
  133. };
  134. struct dcn10_ipp {
  135. struct input_pixel_processor base;
  136. const struct dcn10_ipp_registers *regs;
  137. const struct dcn10_ipp_shift *ipp_shift;
  138. const struct dcn10_ipp_mask *ipp_mask;
  139. struct dc_cursor_attributes curs_attr;
  140. };
  141. void dcn10_ipp_construct(struct dcn10_ipp *ippn10,
  142. struct dc_context *ctx,
  143. int inst,
  144. const struct dcn10_ipp_registers *regs,
  145. const struct dcn10_ipp_shift *ipp_shift,
  146. const struct dcn10_ipp_mask *ipp_mask);
  147. #endif /* _DCN10_IPP_H_ */