grph_object_id.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. /*
  2. * Copyright 2012-15 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 __DAL_GRPH_OBJECT_ID_H__
  26. #define __DAL_GRPH_OBJECT_ID_H__
  27. /* Types of graphics objects */
  28. enum object_type {
  29. OBJECT_TYPE_UNKNOWN = 0,
  30. /* Direct ATOM BIOS translation */
  31. OBJECT_TYPE_GPU,
  32. OBJECT_TYPE_ENCODER,
  33. OBJECT_TYPE_CONNECTOR,
  34. OBJECT_TYPE_ROUTER,
  35. OBJECT_TYPE_GENERIC,
  36. /* Driver specific */
  37. OBJECT_TYPE_AUDIO,
  38. OBJECT_TYPE_CONTROLLER,
  39. OBJECT_TYPE_CLOCK_SOURCE,
  40. OBJECT_TYPE_ENGINE,
  41. OBJECT_TYPE_COUNT
  42. };
  43. /* Enumeration inside one type of graphics objects */
  44. enum object_enum_id {
  45. ENUM_ID_UNKNOWN = 0,
  46. ENUM_ID_1,
  47. ENUM_ID_2,
  48. ENUM_ID_3,
  49. ENUM_ID_4,
  50. ENUM_ID_5,
  51. ENUM_ID_6,
  52. ENUM_ID_7,
  53. ENUM_ID_COUNT
  54. };
  55. /* Generic object ids */
  56. enum generic_id {
  57. GENERIC_ID_UNKNOWN = 0,
  58. GENERIC_ID_MXM_OPM,
  59. GENERIC_ID_GLSYNC,
  60. GENERIC_ID_STEREO,
  61. GENERIC_ID_COUNT
  62. };
  63. /* Controller object ids */
  64. enum controller_id {
  65. CONTROLLER_ID_UNDEFINED = 0,
  66. CONTROLLER_ID_D0,
  67. CONTROLLER_ID_D1,
  68. CONTROLLER_ID_D2,
  69. CONTROLLER_ID_D3,
  70. CONTROLLER_ID_D4,
  71. CONTROLLER_ID_D5,
  72. CONTROLLER_ID_UNDERLAY0,
  73. CONTROLLER_ID_MAX = CONTROLLER_ID_UNDERLAY0
  74. };
  75. #define IS_UNDERLAY_CONTROLLER(ctrlr_id) (ctrlr_id >= CONTROLLER_ID_UNDERLAY0)
  76. /*
  77. * ClockSource object ids.
  78. * We maintain the order matching (more or less) ATOM BIOS
  79. * to improve optimized acquire
  80. */
  81. enum clock_source_id {
  82. CLOCK_SOURCE_ID_UNDEFINED = 0,
  83. CLOCK_SOURCE_ID_PLL0,
  84. CLOCK_SOURCE_ID_PLL1,
  85. CLOCK_SOURCE_ID_PLL2,
  86. CLOCK_SOURCE_ID_EXTERNAL, /* ID (Phy) ref. clk. for DP */
  87. CLOCK_SOURCE_ID_DCPLL,
  88. CLOCK_SOURCE_ID_DFS, /* DENTIST */
  89. CLOCK_SOURCE_ID_VCE, /* VCE does not need a real PLL */
  90. /* Used to distinguish between programming pixel clock and ID (Phy) clock */
  91. CLOCK_SOURCE_ID_DP_DTO,
  92. CLOCK_SOURCE_COMBO_PHY_PLL0, /*combo PHY PLL defines (DC 11.2 and up)*/
  93. CLOCK_SOURCE_COMBO_PHY_PLL1,
  94. CLOCK_SOURCE_COMBO_PHY_PLL2,
  95. CLOCK_SOURCE_COMBO_PHY_PLL3,
  96. CLOCK_SOURCE_COMBO_PHY_PLL4,
  97. CLOCK_SOURCE_COMBO_PHY_PLL5,
  98. CLOCK_SOURCE_COMBO_DISPLAY_PLL0
  99. };
  100. /* Encoder object ids */
  101. enum encoder_id {
  102. ENCODER_ID_UNKNOWN = 0,
  103. /* Radeon Class Display Hardware */
  104. ENCODER_ID_INTERNAL_LVDS,
  105. ENCODER_ID_INTERNAL_TMDS1,
  106. ENCODER_ID_INTERNAL_TMDS2,
  107. ENCODER_ID_INTERNAL_DAC1,
  108. ENCODER_ID_INTERNAL_DAC2, /* TV/CV DAC */
  109. /* External Third Party Encoders */
  110. ENCODER_ID_INTERNAL_LVTM1, /* not used for Radeon */
  111. ENCODER_ID_INTERNAL_HDMI,
  112. /* Kaledisope (KLDSCP) Class Display Hardware */
  113. ENCODER_ID_INTERNAL_KLDSCP_TMDS1,
  114. ENCODER_ID_INTERNAL_KLDSCP_DAC1,
  115. ENCODER_ID_INTERNAL_KLDSCP_DAC2, /* Shared with CV/TV and CRT */
  116. /* External TMDS (dual link) */
  117. ENCODER_ID_EXTERNAL_MVPU_FPGA, /* MVPU FPGA chip */
  118. ENCODER_ID_INTERNAL_DDI,
  119. ENCODER_ID_INTERNAL_UNIPHY,
  120. ENCODER_ID_INTERNAL_KLDSCP_LVTMA,
  121. ENCODER_ID_INTERNAL_UNIPHY1,
  122. ENCODER_ID_INTERNAL_UNIPHY2,
  123. ENCODER_ID_EXTERNAL_NUTMEG,
  124. ENCODER_ID_EXTERNAL_TRAVIS,
  125. ENCODER_ID_INTERNAL_WIRELESS, /* Internal wireless display encoder */
  126. ENCODER_ID_INTERNAL_UNIPHY3,
  127. ENCODER_ID_INTERNAL_VIRTUAL,
  128. };
  129. /* Connector object ids */
  130. enum connector_id {
  131. CONNECTOR_ID_UNKNOWN = 0,
  132. CONNECTOR_ID_SINGLE_LINK_DVII = 1,
  133. CONNECTOR_ID_DUAL_LINK_DVII = 2,
  134. CONNECTOR_ID_SINGLE_LINK_DVID = 3,
  135. CONNECTOR_ID_DUAL_LINK_DVID = 4,
  136. CONNECTOR_ID_VGA = 5,
  137. CONNECTOR_ID_HDMI_TYPE_A = 12,
  138. CONNECTOR_ID_LVDS = 14,
  139. CONNECTOR_ID_PCIE = 16,
  140. CONNECTOR_ID_HARDCODE_DVI = 18,
  141. CONNECTOR_ID_DISPLAY_PORT = 19,
  142. CONNECTOR_ID_EDP = 20,
  143. CONNECTOR_ID_MXM = 21,
  144. CONNECTOR_ID_WIRELESS = 22,
  145. CONNECTOR_ID_MIRACAST = 23,
  146. CONNECTOR_ID_VIRTUAL = 100
  147. };
  148. /* Audio object ids */
  149. enum audio_id {
  150. AUDIO_ID_UNKNOWN = 0,
  151. AUDIO_ID_INTERNAL_AZALIA
  152. };
  153. /* Engine object ids */
  154. enum engine_id {
  155. ENGINE_ID_DIGA,
  156. ENGINE_ID_DIGB,
  157. ENGINE_ID_DIGC,
  158. ENGINE_ID_DIGD,
  159. ENGINE_ID_DIGE,
  160. ENGINE_ID_DIGF,
  161. ENGINE_ID_DIGG,
  162. ENGINE_ID_DACA,
  163. ENGINE_ID_DACB,
  164. ENGINE_ID_VCE, /* wireless display pseudo-encoder */
  165. ENGINE_ID_VIRTUAL,
  166. ENGINE_ID_COUNT,
  167. ENGINE_ID_UNKNOWN = (-1L)
  168. };
  169. enum transmitter_color_depth {
  170. TRANSMITTER_COLOR_DEPTH_24 = 0, /* 8 bits */
  171. TRANSMITTER_COLOR_DEPTH_30, /* 10 bits */
  172. TRANSMITTER_COLOR_DEPTH_36, /* 12 bits */
  173. TRANSMITTER_COLOR_DEPTH_48 /* 16 bits */
  174. };
  175. /*
  176. *****************************************************************************
  177. * graphics_object_id struct
  178. *
  179. * graphics_object_id is a very simple struct wrapping 32bit Graphics
  180. * Object identication
  181. *
  182. * This struct should stay very simple
  183. * No dependencies at all (no includes)
  184. * No debug messages or asserts
  185. * No #ifndef and preprocessor directives
  186. * No grow in space (no more data member)
  187. *****************************************************************************
  188. */
  189. struct graphics_object_id {
  190. uint32_t id:8;
  191. uint32_t enum_id:4;
  192. uint32_t type:4;
  193. uint32_t reserved:16; /* for padding. total size should be u32 */
  194. };
  195. /* some simple functions for convenient graphics_object_id handle */
  196. static inline struct graphics_object_id dal_graphics_object_id_init(
  197. uint32_t id,
  198. enum object_enum_id enum_id,
  199. enum object_type type)
  200. {
  201. struct graphics_object_id result = {
  202. id, enum_id, type, 0
  203. };
  204. return result;
  205. }
  206. bool dal_graphics_object_id_is_equal(
  207. struct graphics_object_id id1,
  208. struct graphics_object_id id2);
  209. /* Based on internal data members memory layout */
  210. static inline uint32_t dal_graphics_object_id_to_uint(
  211. struct graphics_object_id id)
  212. {
  213. return id.id + (id.enum_id << 0x8) + (id.type << 0xc);
  214. }
  215. static inline enum controller_id dal_graphics_object_id_get_controller_id(
  216. struct graphics_object_id id)
  217. {
  218. if (id.type == OBJECT_TYPE_CONTROLLER)
  219. return (enum controller_id) id.id;
  220. return CONTROLLER_ID_UNDEFINED;
  221. }
  222. static inline enum clock_source_id dal_graphics_object_id_get_clock_source_id(
  223. struct graphics_object_id id)
  224. {
  225. if (id.type == OBJECT_TYPE_CLOCK_SOURCE)
  226. return (enum clock_source_id) id.id;
  227. return CLOCK_SOURCE_ID_UNDEFINED;
  228. }
  229. static inline enum encoder_id dal_graphics_object_id_get_encoder_id(
  230. struct graphics_object_id id)
  231. {
  232. if (id.type == OBJECT_TYPE_ENCODER)
  233. return (enum encoder_id) id.id;
  234. return ENCODER_ID_UNKNOWN;
  235. }
  236. static inline enum connector_id dal_graphics_object_id_get_connector_id(
  237. struct graphics_object_id id)
  238. {
  239. if (id.type == OBJECT_TYPE_CONNECTOR)
  240. return (enum connector_id) id.id;
  241. return CONNECTOR_ID_UNKNOWN;
  242. }
  243. static inline enum audio_id dal_graphics_object_id_get_audio_id(
  244. struct graphics_object_id id)
  245. {
  246. if (id.type == OBJECT_TYPE_AUDIO)
  247. return (enum audio_id) id.id;
  248. return AUDIO_ID_UNKNOWN;
  249. }
  250. static inline enum engine_id dal_graphics_object_id_get_engine_id(
  251. struct graphics_object_id id)
  252. {
  253. if (id.type == OBJECT_TYPE_ENGINE)
  254. return (enum engine_id) id.id;
  255. return ENGINE_ID_UNKNOWN;
  256. }
  257. #endif