amd_acpi.h 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. /*
  2. * Copyright 2012 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. */
  23. #ifndef AMD_ACPI_H
  24. #define AMD_ACPI_H
  25. #define ACPI_AC_CLASS "ac_adapter"
  26. struct atif_verify_interface {
  27. u16 size; /* structure size in bytes (includes size field) */
  28. u16 version; /* version */
  29. u32 notification_mask; /* supported notifications mask */
  30. u32 function_bits; /* supported functions bit vector */
  31. } __packed;
  32. struct atif_system_params {
  33. u16 size; /* structure size in bytes (includes size field) */
  34. u32 valid_mask; /* valid flags mask */
  35. u32 flags; /* flags */
  36. u8 command_code; /* notify command code */
  37. } __packed;
  38. struct atif_sbios_requests {
  39. u16 size; /* structure size in bytes (includes size field) */
  40. u32 pending; /* pending sbios requests */
  41. u8 panel_exp_mode; /* panel expansion mode */
  42. u8 thermal_gfx; /* thermal state: target gfx controller */
  43. u8 thermal_state; /* thermal state: state id (0: exit state, non-0: state) */
  44. u8 forced_power_gfx; /* forced power state: target gfx controller */
  45. u8 forced_power_state; /* forced power state: state id */
  46. u8 system_power_src; /* system power source */
  47. u8 backlight_level; /* panel backlight level (0-255) */
  48. } __packed;
  49. struct atif_qbtc_arguments {
  50. u16 size; /* structure size in bytes (includes size field) */
  51. u8 requested_display; /* which display is requested */
  52. } __packed;
  53. #define ATIF_QBTC_MAX_DATA_POINTS 99
  54. struct atif_qbtc_data_point {
  55. u8 luminance; /* luminance in percent */
  56. u8 ipnut_signal; /* input signal in range 0-255 */
  57. } __packed;
  58. struct atif_qbtc_output {
  59. u16 size; /* structure size in bytes (includes size field) */
  60. u16 flags; /* all zeroes */
  61. u8 error_code; /* error code */
  62. u8 ac_level; /* default brightness on AC power */
  63. u8 dc_level; /* default brightness on DC power */
  64. u8 min_input_signal; /* max input signal in range 0-255 */
  65. u8 max_input_signal; /* min input signal in range 0-255 */
  66. u8 number_of_points; /* number of data points */
  67. struct atif_qbtc_data_point data_points[ATIF_QBTC_MAX_DATA_POINTS];
  68. } __packed;
  69. #define ATIF_NOTIFY_MASK 0x3
  70. #define ATIF_NOTIFY_NONE 0
  71. #define ATIF_NOTIFY_81 1
  72. #define ATIF_NOTIFY_N 2
  73. struct atcs_verify_interface {
  74. u16 size; /* structure size in bytes (includes size field) */
  75. u16 version; /* version */
  76. u32 function_bits; /* supported functions bit vector */
  77. } __packed;
  78. #define ATCS_VALID_FLAGS_MASK 0x3
  79. struct atcs_pref_req_input {
  80. u16 size; /* structure size in bytes (includes size field) */
  81. u16 client_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */
  82. u16 valid_flags_mask; /* valid flags mask */
  83. u16 flags; /* flags */
  84. u8 req_type; /* request type */
  85. u8 perf_req; /* performance request */
  86. } __packed;
  87. struct atcs_pref_req_output {
  88. u16 size; /* structure size in bytes (includes size field) */
  89. u8 ret_val; /* return value */
  90. } __packed;
  91. struct atcs_pwr_shift_input {
  92. u16 size; /* structure size in bytes (includes size field) */
  93. u16 dgpu_id; /* client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num) */
  94. u8 dev_acpi_state; /* D0 = 0, D3 hot = 3 */
  95. u8 drv_state; /* 0 = operational, 1 = not operational */
  96. } __packed;
  97. /* AMD hw uses four ACPI control methods:
  98. * 1. ATIF
  99. * ARG0: (ACPI_INTEGER) function code
  100. * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes
  101. * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes
  102. * ATIF provides an entry point for the gfx driver to interact with the sbios.
  103. * The AMD ACPI notification mechanism uses Notify (VGA, 0x81) or a custom
  104. * notification. Which notification is used as indicated by the ATIF Control
  105. * Method GET_SYSTEM_PARAMETERS. When the driver receives Notify (VGA, 0x81) or
  106. * a custom notification it invokes ATIF Control Method GET_SYSTEM_BIOS_REQUESTS
  107. * to identify pending System BIOS requests and associated parameters. For
  108. * example, if one of the pending requests is DISPLAY_SWITCH_REQUEST, the driver
  109. * will perform display device detection and invoke ATIF Control Method
  110. * SELECT_ACTIVE_DISPLAYS.
  111. *
  112. * 2. ATPX
  113. * ARG0: (ACPI_INTEGER) function code
  114. * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes
  115. * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes
  116. * ATPX methods are used on PowerXpress systems to handle mux switching and
  117. * discrete GPU power control.
  118. *
  119. * 3. ATRM
  120. * ARG0: (ACPI_INTEGER) offset of vbios rom data
  121. * ARG1: (ACPI_BUFFER) size of the buffer to fill (up to 4K).
  122. * OUTPUT: (ACPI_BUFFER) output buffer
  123. * ATRM provides an interfacess to access the discrete GPU vbios image on
  124. * PowerXpress systems with multiple GPUs.
  125. *
  126. * 4. ATCS
  127. * ARG0: (ACPI_INTEGER) function code
  128. * ARG1: (ACPI_BUFFER) parameter buffer, 256 bytes
  129. * OUTPUT: (ACPI_BUFFER) output buffer, 256 bytes
  130. * ATCS provides an interface to AMD chipset specific functionality.
  131. *
  132. */
  133. /* ATIF */
  134. #define ATIF_FUNCTION_VERIFY_INTERFACE 0x0
  135. /* ARG0: ATIF_FUNCTION_VERIFY_INTERFACE
  136. * ARG1: none
  137. * OUTPUT:
  138. * WORD - structure size in bytes (includes size field)
  139. * WORD - version
  140. * DWORD - supported notifications mask
  141. * DWORD - supported functions bit vector
  142. */
  143. /* Notifications mask */
  144. # define ATIF_THERMAL_STATE_CHANGE_REQUEST_SUPPORTED (1 << 2)
  145. # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST_SUPPORTED (1 << 3)
  146. # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST_SUPPORTED (1 << 4)
  147. # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST_SUPPORTED (1 << 7)
  148. # define ATIF_DGPU_DISPLAY_EVENT_SUPPORTED (1 << 8)
  149. # define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST_SUPPORTED (1 << 12)
  150. /* supported functions vector */
  151. # define ATIF_GET_SYSTEM_PARAMETERS_SUPPORTED (1 << 0)
  152. # define ATIF_GET_SYSTEM_BIOS_REQUESTS_SUPPORTED (1 << 1)
  153. # define ATIF_TEMPERATURE_CHANGE_NOTIFICATION_SUPPORTED (1 << 12)
  154. # define ATIF_QUERY_BACKLIGHT_TRANSFER_CHARACTERISTICS_SUPPORTED (1 << 15)
  155. # define ATIF_READY_TO_UNDOCK_NOTIFICATION_SUPPORTED (1 << 16)
  156. # define ATIF_GET_EXTERNAL_GPU_INFORMATION_SUPPORTED (1 << 20)
  157. #define ATIF_FUNCTION_GET_SYSTEM_PARAMETERS 0x1
  158. /* ARG0: ATIF_FUNCTION_GET_SYSTEM_PARAMETERS
  159. * ARG1: none
  160. * OUTPUT:
  161. * WORD - structure size in bytes (includes size field)
  162. * DWORD - valid flags mask
  163. * DWORD - flags
  164. *
  165. * OR
  166. *
  167. * WORD - structure size in bytes (includes size field)
  168. * DWORD - valid flags mask
  169. * DWORD - flags
  170. * BYTE - notify command code
  171. *
  172. * flags
  173. * bits 1:0:
  174. * 0 - Notify(VGA, 0x81) is not used for notification
  175. * 1 - Notify(VGA, 0x81) is used for notification
  176. * 2 - Notify(VGA, n) is used for notification where
  177. * n (0xd0-0xd9) is specified in notify command code.
  178. * bit 2:
  179. * 1 - lid changes not reported though int10
  180. * bit 3:
  181. * 1 - system bios controls overclocking
  182. * bit 4:
  183. * 1 - enable overclocking
  184. */
  185. #define ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS 0x2
  186. /* ARG0: ATIF_FUNCTION_GET_SYSTEM_BIOS_REQUESTS
  187. * ARG1: none
  188. * OUTPUT:
  189. * WORD - structure size in bytes (includes size field)
  190. * DWORD - pending sbios requests
  191. * BYTE - reserved (all zeroes)
  192. * BYTE - thermal state: target gfx controller
  193. * BYTE - thermal state: state id (0: exit state, non-0: state)
  194. * BYTE - forced power state: target gfx controller
  195. * BYTE - forced power state: state id (0: forced state, non-0: state)
  196. * BYTE - system power source
  197. * BYTE - panel backlight level (0-255)
  198. * BYTE - GPU package power limit: target gfx controller
  199. * DWORD - GPU package power limit: value (24:8 fractional format, Watts)
  200. */
  201. /* pending sbios requests */
  202. # define ATIF_THERMAL_STATE_CHANGE_REQUEST (1 << 2)
  203. # define ATIF_FORCED_POWER_STATE_CHANGE_REQUEST (1 << 3)
  204. # define ATIF_SYSTEM_POWER_SOURCE_CHANGE_REQUEST (1 << 4)
  205. # define ATIF_PANEL_BRIGHTNESS_CHANGE_REQUEST (1 << 7)
  206. # define ATIF_DGPU_DISPLAY_EVENT (1 << 8)
  207. # define ATIF_GPU_PACKAGE_POWER_LIMIT_REQUEST (1 << 12)
  208. /* target gfx controller */
  209. # define ATIF_TARGET_GFX_SINGLE 0
  210. # define ATIF_TARGET_GFX_PX_IGPU 1
  211. # define ATIF_TARGET_GFX_PX_DGPU 2
  212. /* system power source */
  213. # define ATIF_POWER_SOURCE_AC 1
  214. # define ATIF_POWER_SOURCE_DC 2
  215. # define ATIF_POWER_SOURCE_RESTRICTED_AC_1 3
  216. # define ATIF_POWER_SOURCE_RESTRICTED_AC_2 4
  217. #define ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION 0xD
  218. /* ARG0: ATIF_FUNCTION_TEMPERATURE_CHANGE_NOTIFICATION
  219. * ARG1:
  220. * WORD - structure size in bytes (includes size field)
  221. * WORD - gfx controller id
  222. * BYTE - current temperature (degress Celsius)
  223. * OUTPUT: none
  224. */
  225. #define ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS 0x10
  226. /* ARG0: ATIF_FUNCTION_QUERY_BRIGHTNESS_TRANSFER_CHARACTERISTICS
  227. * ARG1:
  228. * WORD - structure size in bytes (includes size field)
  229. * BYTE - requested display
  230. * OUTPUT:
  231. * WORD - structure size in bytes (includes size field)
  232. * WORD - flags (currently all 16 bits are reserved)
  233. * BYTE - error code (on failure, disregard all below fields)
  234. * BYTE - AC level (default brightness in percent when machine has full power)
  235. * BYTE - DC level (default brightness in percent when machine is on battery)
  236. * BYTE - min input signal, in range 0-255, corresponding to 0% backlight
  237. * BYTE - max input signal, in range 0-255, corresponding to 100% backlight
  238. * BYTE - number of reported data points
  239. * BYTE - luminance level in percent \ repeated structure
  240. * BYTE - input signal in range 0-255 / does not have entries for 0% and 100%
  241. */
  242. /* requested display */
  243. # define ATIF_QBTC_REQUEST_LCD1 0
  244. # define ATIF_QBTC_REQUEST_CRT1 1
  245. # define ATIF_QBTC_REQUEST_DFP1 3
  246. # define ATIF_QBTC_REQUEST_CRT2 4
  247. # define ATIF_QBTC_REQUEST_LCD2 5
  248. # define ATIF_QBTC_REQUEST_DFP2 7
  249. # define ATIF_QBTC_REQUEST_DFP3 9
  250. # define ATIF_QBTC_REQUEST_DFP4 10
  251. # define ATIF_QBTC_REQUEST_DFP5 11
  252. # define ATIF_QBTC_REQUEST_DFP6 12
  253. /* error code */
  254. # define ATIF_QBTC_ERROR_CODE_SUCCESS 0
  255. # define ATIF_QBTC_ERROR_CODE_FAILURE 1
  256. # define ATIF_QBTC_ERROR_CODE_DEVICE_NOT_SUPPORTED 2
  257. #define ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION 0x11
  258. /* ARG0: ATIF_FUNCTION_READY_TO_UNDOCK_NOTIFICATION
  259. * ARG1: none
  260. * OUTPUT: none
  261. */
  262. #define ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION 0x15
  263. /* ARG0: ATIF_FUNCTION_GET_EXTERNAL_GPU_INFORMATION
  264. * ARG1: none
  265. * OUTPUT:
  266. * WORD - number of reported external gfx devices
  267. * WORD - device structure size in bytes (excludes device size field)
  268. * WORD - flags \
  269. * WORD - bus number / repeated structure
  270. */
  271. /* flags */
  272. # define ATIF_EXTERNAL_GRAPHICS_PORT (1 << 0)
  273. /* ATPX */
  274. #define ATPX_FUNCTION_VERIFY_INTERFACE 0x0
  275. /* ARG0: ATPX_FUNCTION_VERIFY_INTERFACE
  276. * ARG1: none
  277. * OUTPUT:
  278. * WORD - structure size in bytes (includes size field)
  279. * WORD - version
  280. * DWORD - supported functions bit vector
  281. */
  282. /* supported functions vector */
  283. # define ATPX_GET_PX_PARAMETERS_SUPPORTED (1 << 0)
  284. # define ATPX_POWER_CONTROL_SUPPORTED (1 << 1)
  285. # define ATPX_DISPLAY_MUX_CONTROL_SUPPORTED (1 << 2)
  286. # define ATPX_I2C_MUX_CONTROL_SUPPORTED (1 << 3)
  287. # define ATPX_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION_SUPPORTED (1 << 4)
  288. # define ATPX_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION_SUPPORTED (1 << 5)
  289. # define ATPX_GET_DISPLAY_CONNECTORS_MAPPING_SUPPORTED (1 << 7)
  290. # define ATPX_GET_DISPLAY_DETECTION_PORTS_SUPPORTED (1 << 8)
  291. #define ATPX_FUNCTION_GET_PX_PARAMETERS 0x1
  292. /* ARG0: ATPX_FUNCTION_GET_PX_PARAMETERS
  293. * ARG1: none
  294. * OUTPUT:
  295. * WORD - structure size in bytes (includes size field)
  296. * DWORD - valid flags mask
  297. * DWORD - flags
  298. */
  299. /* flags */
  300. # define ATPX_LVDS_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 0)
  301. # define ATPX_CRT1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 1)
  302. # define ATPX_DVI1_I2C_AVAILABLE_TO_BOTH_GPUS (1 << 2)
  303. # define ATPX_CRT1_RGB_SIGNAL_MUXED (1 << 3)
  304. # define ATPX_TV_SIGNAL_MUXED (1 << 4)
  305. # define ATPX_DFP_SIGNAL_MUXED (1 << 5)
  306. # define ATPX_SEPARATE_MUX_FOR_I2C (1 << 6)
  307. # define ATPX_DYNAMIC_PX_SUPPORTED (1 << 7)
  308. # define ATPX_ACF_NOT_SUPPORTED (1 << 8)
  309. # define ATPX_FIXED_NOT_SUPPORTED (1 << 9)
  310. # define ATPX_DYNAMIC_DGPU_POWER_OFF_SUPPORTED (1 << 10)
  311. # define ATPX_DGPU_REQ_POWER_FOR_DISPLAYS (1 << 11)
  312. # define ATPX_DGPU_CAN_DRIVE_DISPLAYS (1 << 12)
  313. # define ATPX_MS_HYBRID_GFX_SUPPORTED (1 << 14)
  314. #define ATPX_FUNCTION_POWER_CONTROL 0x2
  315. /* ARG0: ATPX_FUNCTION_POWER_CONTROL
  316. * ARG1:
  317. * WORD - structure size in bytes (includes size field)
  318. * BYTE - dGPU power state (0: power off, 1: power on)
  319. * OUTPUT: none
  320. */
  321. #define ATPX_FUNCTION_DISPLAY_MUX_CONTROL 0x3
  322. /* ARG0: ATPX_FUNCTION_DISPLAY_MUX_CONTROL
  323. * ARG1:
  324. * WORD - structure size in bytes (includes size field)
  325. * WORD - display mux control (0: iGPU, 1: dGPU)
  326. * OUTPUT: none
  327. */
  328. # define ATPX_INTEGRATED_GPU 0
  329. # define ATPX_DISCRETE_GPU 1
  330. #define ATPX_FUNCTION_I2C_MUX_CONTROL 0x4
  331. /* ARG0: ATPX_FUNCTION_I2C_MUX_CONTROL
  332. * ARG1:
  333. * WORD - structure size in bytes (includes size field)
  334. * WORD - i2c/aux/hpd mux control (0: iGPU, 1: dGPU)
  335. * OUTPUT: none
  336. */
  337. #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION 0x5
  338. /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_START_NOTIFICATION
  339. * ARG1:
  340. * WORD - structure size in bytes (includes size field)
  341. * WORD - target gpu (0: iGPU, 1: dGPU)
  342. * OUTPUT: none
  343. */
  344. #define ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION 0x6
  345. /* ARG0: ATPX_FUNCTION_GRAPHICS_DEVICE_SWITCH_END_NOTIFICATION
  346. * ARG1:
  347. * WORD - structure size in bytes (includes size field)
  348. * WORD - target gpu (0: iGPU, 1: dGPU)
  349. * OUTPUT: none
  350. */
  351. #define ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING 0x8
  352. /* ARG0: ATPX_FUNCTION_GET_DISPLAY_CONNECTORS_MAPPING
  353. * ARG1: none
  354. * OUTPUT:
  355. * WORD - number of display connectors
  356. * WORD - connector structure size in bytes (excludes connector size field)
  357. * BYTE - flags \
  358. * BYTE - ATIF display vector bit position } repeated
  359. * BYTE - adapter id (0: iGPU, 1-n: dGPU ordered by pcie bus number) } structure
  360. * WORD - connector ACPI id /
  361. */
  362. /* flags */
  363. # define ATPX_DISPLAY_OUTPUT_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 0)
  364. # define ATPX_DISPLAY_HPD_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 1)
  365. # define ATPX_DISPLAY_I2C_SUPPORTED_BY_ADAPTER_ID_DEVICE (1 << 2)
  366. #define ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS 0x9
  367. /* ARG0: ATPX_FUNCTION_GET_DISPLAY_DETECTION_PORTS
  368. * ARG1: none
  369. * OUTPUT:
  370. * WORD - number of HPD/DDC ports
  371. * WORD - port structure size in bytes (excludes port size field)
  372. * BYTE - ATIF display vector bit position \
  373. * BYTE - hpd id } reapeated structure
  374. * BYTE - ddc id /
  375. *
  376. * available on A+A systems only
  377. */
  378. /* hpd id */
  379. # define ATPX_HPD_NONE 0
  380. # define ATPX_HPD1 1
  381. # define ATPX_HPD2 2
  382. # define ATPX_HPD3 3
  383. # define ATPX_HPD4 4
  384. # define ATPX_HPD5 5
  385. # define ATPX_HPD6 6
  386. /* ddc id */
  387. # define ATPX_DDC_NONE 0
  388. # define ATPX_DDC1 1
  389. # define ATPX_DDC2 2
  390. # define ATPX_DDC3 3
  391. # define ATPX_DDC4 4
  392. # define ATPX_DDC5 5
  393. # define ATPX_DDC6 6
  394. # define ATPX_DDC7 7
  395. # define ATPX_DDC8 8
  396. /* ATCS */
  397. #define ATCS_FUNCTION_VERIFY_INTERFACE 0x0
  398. /* ARG0: ATCS_FUNCTION_VERIFY_INTERFACE
  399. * ARG1: none
  400. * OUTPUT:
  401. * WORD - structure size in bytes (includes size field)
  402. * WORD - version
  403. * DWORD - supported functions bit vector
  404. */
  405. /* supported functions vector */
  406. # define ATCS_GET_EXTERNAL_STATE_SUPPORTED (1 << 0)
  407. # define ATCS_PCIE_PERFORMANCE_REQUEST_SUPPORTED (1 << 1)
  408. # define ATCS_PCIE_DEVICE_READY_NOTIFICATION_SUPPORTED (1 << 2)
  409. # define ATCS_SET_PCIE_BUS_WIDTH_SUPPORTED (1 << 3)
  410. # define ATCS_SET_POWER_SHIFT_CONTROL_SUPPORTED (1 << 7)
  411. #define ATCS_FUNCTION_GET_EXTERNAL_STATE 0x1
  412. /* ARG0: ATCS_FUNCTION_GET_EXTERNAL_STATE
  413. * ARG1: none
  414. * OUTPUT:
  415. * WORD - structure size in bytes (includes size field)
  416. * DWORD - valid flags mask
  417. * DWORD - flags (0: undocked, 1: docked)
  418. */
  419. /* flags */
  420. # define ATCS_DOCKED (1 << 0)
  421. #define ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST 0x2
  422. /* ARG0: ATCS_FUNCTION_PCIE_PERFORMANCE_REQUEST
  423. * ARG1:
  424. * WORD - structure size in bytes (includes size field)
  425. * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)
  426. * WORD - valid flags mask
  427. * WORD - flags
  428. * BYTE - request type
  429. * BYTE - performance request
  430. * OUTPUT:
  431. * WORD - structure size in bytes (includes size field)
  432. * BYTE - return value
  433. */
  434. /* flags */
  435. # define ATCS_ADVERTISE_CAPS (1 << 0)
  436. # define ATCS_WAIT_FOR_COMPLETION (1 << 1)
  437. /* request type */
  438. # define ATCS_PCIE_LINK_SPEED 1
  439. /* performance request */
  440. # define ATCS_REMOVE 0
  441. # define ATCS_FORCE_LOW_POWER 1
  442. # define ATCS_PERF_LEVEL_1 2 /* PCIE Gen 1 */
  443. # define ATCS_PERF_LEVEL_2 3 /* PCIE Gen 2 */
  444. # define ATCS_PERF_LEVEL_3 4 /* PCIE Gen 3 */
  445. /* return value */
  446. # define ATCS_REQUEST_REFUSED 1
  447. # define ATCS_REQUEST_COMPLETE 2
  448. # define ATCS_REQUEST_IN_PROGRESS 3
  449. #define ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION 0x3
  450. /* ARG0: ATCS_FUNCTION_PCIE_DEVICE_READY_NOTIFICATION
  451. * ARG1: none
  452. * OUTPUT: none
  453. */
  454. #define ATCS_FUNCTION_SET_PCIE_BUS_WIDTH 0x4
  455. /* ARG0: ATCS_FUNCTION_SET_PCIE_BUS_WIDTH
  456. * ARG1:
  457. * WORD - structure size in bytes (includes size field)
  458. * WORD - client id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)
  459. * BYTE - number of active lanes
  460. * OUTPUT:
  461. * WORD - structure size in bytes (includes size field)
  462. * BYTE - number of active lanes
  463. */
  464. #define ATCS_FUNCTION_POWER_SHIFT_CONTROL 0x8
  465. /* ARG0: ATCS_FUNCTION_POWER_SHIFT_CONTROL
  466. * ARG1:
  467. * WORD - structure size in bytes (includes size field)
  468. * WORD - dGPU id (bit 2-0: func num, 7-3: dev num, 15-8: bus num)
  469. * BYTE - Device ACPI state
  470. * BYTE - Driver state
  471. * OUTPUT: none
  472. */
  473. #endif