rsserial.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0
  2. /*******************************************************************************
  3. *
  4. * Module Name: rsserial - GPIO/serial_bus resource descriptors
  5. *
  6. ******************************************************************************/
  7. #include <acpi/acpi.h>
  8. #include "accommon.h"
  9. #include "acresrc.h"
  10. #define _COMPONENT ACPI_RESOURCES
  11. ACPI_MODULE_NAME("rsserial")
  12. /*******************************************************************************
  13. *
  14. * acpi_rs_convert_gpio
  15. *
  16. ******************************************************************************/
  17. struct acpi_rsconvert_info acpi_rs_convert_gpio[18] = {
  18. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_GPIO,
  19. ACPI_RS_SIZE(struct acpi_resource_gpio),
  20. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_gpio)},
  21. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_GPIO,
  22. sizeof(struct aml_resource_gpio),
  23. 0},
  24. /*
  25. * These fields are contiguous in both the source and destination:
  26. * revision_id
  27. * connection_type
  28. */
  29. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.revision_id),
  30. AML_OFFSET(gpio.revision_id),
  31. 2},
  32. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.producer_consumer),
  33. AML_OFFSET(gpio.flags),
  34. 0},
  35. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.shareable),
  36. AML_OFFSET(gpio.int_flags),
  37. 3},
  38. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.wake_capable),
  39. AML_OFFSET(gpio.int_flags),
  40. 4},
  41. {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.io_restriction),
  42. AML_OFFSET(gpio.int_flags),
  43. 0},
  44. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.gpio.triggering),
  45. AML_OFFSET(gpio.int_flags),
  46. 0},
  47. {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.gpio.polarity),
  48. AML_OFFSET(gpio.int_flags),
  49. 1},
  50. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.pin_config),
  51. AML_OFFSET(gpio.pin_config),
  52. 1},
  53. /*
  54. * These fields are contiguous in both the source and destination:
  55. * drive_strength
  56. * debounce_timeout
  57. */
  58. {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.gpio.drive_strength),
  59. AML_OFFSET(gpio.drive_strength),
  60. 2},
  61. /* Pin Table */
  62. {ACPI_RSC_COUNT_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table_length),
  63. AML_OFFSET(gpio.pin_table_offset),
  64. AML_OFFSET(gpio.res_source_offset)},
  65. {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.gpio.pin_table),
  66. AML_OFFSET(gpio.pin_table_offset),
  67. 0},
  68. /* Resource Source */
  69. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.gpio.resource_source.index),
  70. AML_OFFSET(gpio.res_source_index),
  71. 1},
  72. {ACPI_RSC_COUNT_GPIO_RES,
  73. ACPI_RS_OFFSET(data.gpio.resource_source.string_length),
  74. AML_OFFSET(gpio.res_source_offset),
  75. AML_OFFSET(gpio.vendor_offset)},
  76. {ACPI_RSC_MOVE_GPIO_RES,
  77. ACPI_RS_OFFSET(data.gpio.resource_source.string_ptr),
  78. AML_OFFSET(gpio.res_source_offset),
  79. 0},
  80. /* Vendor Data */
  81. {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.gpio.vendor_length),
  82. AML_OFFSET(gpio.vendor_length),
  83. 1},
  84. {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.gpio.vendor_data),
  85. AML_OFFSET(gpio.vendor_offset),
  86. 0},
  87. };
  88. /*******************************************************************************
  89. *
  90. * acpi_rs_convert_pinfunction
  91. *
  92. ******************************************************************************/
  93. struct acpi_rsconvert_info acpi_rs_convert_pin_function[13] = {
  94. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_FUNCTION,
  95. ACPI_RS_SIZE(struct acpi_resource_pin_function),
  96. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_function)},
  97. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_FUNCTION,
  98. sizeof(struct aml_resource_pin_function),
  99. 0},
  100. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.revision_id),
  101. AML_OFFSET(pin_function.revision_id),
  102. 1},
  103. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_function.shareable),
  104. AML_OFFSET(pin_function.flags),
  105. 0},
  106. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_function.pin_config),
  107. AML_OFFSET(pin_function.pin_config),
  108. 1},
  109. {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.pin_function.function_number),
  110. AML_OFFSET(pin_function.function_number),
  111. 2},
  112. /* Pin Table */
  113. /*
  114. * It is OK to use GPIO operations here because none of them refer GPIO
  115. * structures directly but instead use offsets given here.
  116. */
  117. {ACPI_RSC_COUNT_GPIO_PIN,
  118. ACPI_RS_OFFSET(data.pin_function.pin_table_length),
  119. AML_OFFSET(pin_function.pin_table_offset),
  120. AML_OFFSET(pin_function.res_source_offset)},
  121. {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_function.pin_table),
  122. AML_OFFSET(pin_function.pin_table_offset),
  123. 0},
  124. /* Resource Source */
  125. {ACPI_RSC_MOVE8,
  126. ACPI_RS_OFFSET(data.pin_function.resource_source.index),
  127. AML_OFFSET(pin_function.res_source_index),
  128. 1},
  129. {ACPI_RSC_COUNT_GPIO_RES,
  130. ACPI_RS_OFFSET(data.pin_function.resource_source.string_length),
  131. AML_OFFSET(pin_function.res_source_offset),
  132. AML_OFFSET(pin_function.vendor_offset)},
  133. {ACPI_RSC_MOVE_GPIO_RES,
  134. ACPI_RS_OFFSET(data.pin_function.resource_source.string_ptr),
  135. AML_OFFSET(pin_function.res_source_offset),
  136. 0},
  137. /* Vendor Data */
  138. {ACPI_RSC_COUNT_GPIO_VEN,
  139. ACPI_RS_OFFSET(data.pin_function.vendor_length),
  140. AML_OFFSET(pin_function.vendor_length),
  141. 1},
  142. {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_function.vendor_data),
  143. AML_OFFSET(pin_function.vendor_offset),
  144. 0},
  145. };
  146. /*******************************************************************************
  147. *
  148. * acpi_rs_convert_csi2_serial_bus
  149. *
  150. ******************************************************************************/
  151. struct acpi_rsconvert_info acpi_rs_convert_csi2_serial_bus[14] = {
  152. { ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
  153. ACPI_RS_SIZE(struct acpi_resource_csi2_serialbus),
  154. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_csi2_serial_bus) },
  155. { ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
  156. sizeof(struct aml_resource_csi2_serialbus),
  157. 0 },
  158. { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
  159. AML_OFFSET(common_serial_bus.revision_id),
  160. 1 },
  161. { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type),
  162. AML_OFFSET(csi2_serial_bus.type),
  163. 1 },
  164. { ACPI_RSC_1BITFLAG,
  165. ACPI_RS_OFFSET(data.csi2_serial_bus.producer_consumer),
  166. AML_OFFSET(csi2_serial_bus.flags),
  167. 1 },
  168. { ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.slave_mode),
  169. AML_OFFSET(csi2_serial_bus.flags),
  170. 0 },
  171. { ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.csi2_serial_bus.phy_type),
  172. AML_OFFSET(csi2_serial_bus.type_specific_flags),
  173. 0 },
  174. { ACPI_RSC_6BITFLAG,
  175. ACPI_RS_OFFSET(data.csi2_serial_bus.local_port_instance),
  176. AML_OFFSET(csi2_serial_bus.type_specific_flags),
  177. 2 },
  178. { ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.csi2_serial_bus.type_revision_id),
  179. AML_OFFSET(csi2_serial_bus.type_revision_id),
  180. 1 },
  181. /* Vendor data */
  182. { ACPI_RSC_COUNT_SERIAL_VEN,
  183. ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_length),
  184. AML_OFFSET(csi2_serial_bus.type_data_length),
  185. AML_RESOURCE_CSI2_MIN_DATA_LEN },
  186. { ACPI_RSC_MOVE_SERIAL_VEN,
  187. ACPI_RS_OFFSET(data.csi2_serial_bus.vendor_data),
  188. 0,
  189. sizeof(struct aml_resource_csi2_serialbus) },
  190. /* Resource Source */
  191. { ACPI_RSC_MOVE8,
  192. ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.index),
  193. AML_OFFSET(csi2_serial_bus.res_source_index),
  194. 1 },
  195. { ACPI_RSC_COUNT_SERIAL_RES,
  196. ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_length),
  197. AML_OFFSET(csi2_serial_bus.type_data_length),
  198. sizeof(struct aml_resource_csi2_serialbus) },
  199. { ACPI_RSC_MOVE_SERIAL_RES,
  200. ACPI_RS_OFFSET(data.csi2_serial_bus.resource_source.string_ptr),
  201. AML_OFFSET(csi2_serial_bus.type_data_length),
  202. sizeof(struct aml_resource_csi2_serialbus) },
  203. };
  204. /*******************************************************************************
  205. *
  206. * acpi_rs_convert_i2c_serial_bus
  207. *
  208. ******************************************************************************/
  209. struct acpi_rsconvert_info acpi_rs_convert_i2c_serial_bus[17] = {
  210. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
  211. ACPI_RS_SIZE(struct acpi_resource_i2c_serialbus),
  212. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_i2c_serial_bus)},
  213. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
  214. sizeof(struct aml_resource_i2c_serialbus),
  215. 0},
  216. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
  217. AML_OFFSET(common_serial_bus.revision_id),
  218. 1},
  219. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
  220. AML_OFFSET(common_serial_bus.type),
  221. 1},
  222. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
  223. AML_OFFSET(common_serial_bus.flags),
  224. 0},
  225. {ACPI_RSC_1BITFLAG,
  226. ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
  227. AML_OFFSET(common_serial_bus.flags),
  228. 1},
  229. {ACPI_RSC_1BITFLAG,
  230. ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
  231. AML_OFFSET(common_serial_bus.flags),
  232. 2},
  233. {ACPI_RSC_MOVE8,
  234. ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
  235. AML_OFFSET(common_serial_bus.type_revision_id),
  236. 1},
  237. {ACPI_RSC_MOVE16,
  238. ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
  239. AML_OFFSET(common_serial_bus.type_data_length),
  240. 1},
  241. /* Vendor data */
  242. {ACPI_RSC_COUNT_SERIAL_VEN,
  243. ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
  244. AML_OFFSET(common_serial_bus.type_data_length),
  245. AML_RESOURCE_I2C_MIN_DATA_LEN},
  246. {ACPI_RSC_MOVE_SERIAL_VEN,
  247. ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
  248. 0,
  249. sizeof(struct aml_resource_i2c_serialbus)},
  250. /* Resource Source */
  251. {ACPI_RSC_MOVE8,
  252. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
  253. AML_OFFSET(common_serial_bus.res_source_index),
  254. 1},
  255. {ACPI_RSC_COUNT_SERIAL_RES,
  256. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
  257. AML_OFFSET(common_serial_bus.type_data_length),
  258. sizeof(struct aml_resource_common_serialbus)},
  259. {ACPI_RSC_MOVE_SERIAL_RES,
  260. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
  261. AML_OFFSET(common_serial_bus.type_data_length),
  262. sizeof(struct aml_resource_common_serialbus)},
  263. /* I2C bus type specific */
  264. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.i2c_serial_bus.access_mode),
  265. AML_OFFSET(i2c_serial_bus.type_specific_flags),
  266. 0},
  267. {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.i2c_serial_bus.connection_speed),
  268. AML_OFFSET(i2c_serial_bus.connection_speed),
  269. 1},
  270. {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.i2c_serial_bus.slave_address),
  271. AML_OFFSET(i2c_serial_bus.slave_address),
  272. 1},
  273. };
  274. /*******************************************************************************
  275. *
  276. * acpi_rs_convert_spi_serial_bus
  277. *
  278. ******************************************************************************/
  279. struct acpi_rsconvert_info acpi_rs_convert_spi_serial_bus[21] = {
  280. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
  281. ACPI_RS_SIZE(struct acpi_resource_spi_serialbus),
  282. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_spi_serial_bus)},
  283. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
  284. sizeof(struct aml_resource_spi_serialbus),
  285. 0},
  286. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
  287. AML_OFFSET(common_serial_bus.revision_id),
  288. 1},
  289. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
  290. AML_OFFSET(common_serial_bus.type),
  291. 1},
  292. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
  293. AML_OFFSET(common_serial_bus.flags),
  294. 0},
  295. {ACPI_RSC_1BITFLAG,
  296. ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
  297. AML_OFFSET(common_serial_bus.flags),
  298. 1},
  299. {ACPI_RSC_1BITFLAG,
  300. ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
  301. AML_OFFSET(common_serial_bus.flags),
  302. 2},
  303. {ACPI_RSC_MOVE8,
  304. ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
  305. AML_OFFSET(common_serial_bus.type_revision_id),
  306. 1},
  307. {ACPI_RSC_MOVE16,
  308. ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
  309. AML_OFFSET(common_serial_bus.type_data_length),
  310. 1},
  311. /* Vendor data */
  312. {ACPI_RSC_COUNT_SERIAL_VEN,
  313. ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
  314. AML_OFFSET(common_serial_bus.type_data_length),
  315. AML_RESOURCE_SPI_MIN_DATA_LEN},
  316. {ACPI_RSC_MOVE_SERIAL_VEN,
  317. ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
  318. 0,
  319. sizeof(struct aml_resource_spi_serialbus)},
  320. /* Resource Source */
  321. {ACPI_RSC_MOVE8,
  322. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
  323. AML_OFFSET(common_serial_bus.res_source_index),
  324. 1},
  325. {ACPI_RSC_COUNT_SERIAL_RES,
  326. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
  327. AML_OFFSET(common_serial_bus.type_data_length),
  328. sizeof(struct aml_resource_common_serialbus)},
  329. {ACPI_RSC_MOVE_SERIAL_RES,
  330. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
  331. AML_OFFSET(common_serial_bus.type_data_length),
  332. sizeof(struct aml_resource_common_serialbus)},
  333. /* Spi bus type specific */
  334. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.wire_mode),
  335. AML_OFFSET(spi_serial_bus.type_specific_flags),
  336. 0},
  337. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.spi_serial_bus.device_polarity),
  338. AML_OFFSET(spi_serial_bus.type_specific_flags),
  339. 1},
  340. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.data_bit_length),
  341. AML_OFFSET(spi_serial_bus.data_bit_length),
  342. 1},
  343. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_phase),
  344. AML_OFFSET(spi_serial_bus.clock_phase),
  345. 1},
  346. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.spi_serial_bus.clock_polarity),
  347. AML_OFFSET(spi_serial_bus.clock_polarity),
  348. 1},
  349. {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.spi_serial_bus.device_selection),
  350. AML_OFFSET(spi_serial_bus.device_selection),
  351. 1},
  352. {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.spi_serial_bus.connection_speed),
  353. AML_OFFSET(spi_serial_bus.connection_speed),
  354. 1},
  355. };
  356. /*******************************************************************************
  357. *
  358. * acpi_rs_convert_uart_serial_bus
  359. *
  360. ******************************************************************************/
  361. struct acpi_rsconvert_info acpi_rs_convert_uart_serial_bus[23] = {
  362. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_SERIAL_BUS,
  363. ACPI_RS_SIZE(struct acpi_resource_uart_serialbus),
  364. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_uart_serial_bus)},
  365. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_SERIAL_BUS,
  366. sizeof(struct aml_resource_uart_serialbus),
  367. 0},
  368. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.revision_id),
  369. AML_OFFSET(common_serial_bus.revision_id),
  370. 1},
  371. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.common_serial_bus.type),
  372. AML_OFFSET(common_serial_bus.type),
  373. 1},
  374. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.common_serial_bus.slave_mode),
  375. AML_OFFSET(common_serial_bus.flags),
  376. 0},
  377. {ACPI_RSC_1BITFLAG,
  378. ACPI_RS_OFFSET(data.common_serial_bus.producer_consumer),
  379. AML_OFFSET(common_serial_bus.flags),
  380. 1},
  381. {ACPI_RSC_1BITFLAG,
  382. ACPI_RS_OFFSET(data.common_serial_bus.connection_sharing),
  383. AML_OFFSET(common_serial_bus.flags),
  384. 2},
  385. {ACPI_RSC_MOVE8,
  386. ACPI_RS_OFFSET(data.common_serial_bus.type_revision_id),
  387. AML_OFFSET(common_serial_bus.type_revision_id),
  388. 1},
  389. {ACPI_RSC_MOVE16,
  390. ACPI_RS_OFFSET(data.common_serial_bus.type_data_length),
  391. AML_OFFSET(common_serial_bus.type_data_length),
  392. 1},
  393. /* Vendor data */
  394. {ACPI_RSC_COUNT_SERIAL_VEN,
  395. ACPI_RS_OFFSET(data.common_serial_bus.vendor_length),
  396. AML_OFFSET(common_serial_bus.type_data_length),
  397. AML_RESOURCE_UART_MIN_DATA_LEN},
  398. {ACPI_RSC_MOVE_SERIAL_VEN,
  399. ACPI_RS_OFFSET(data.common_serial_bus.vendor_data),
  400. 0,
  401. sizeof(struct aml_resource_uart_serialbus)},
  402. /* Resource Source */
  403. {ACPI_RSC_MOVE8,
  404. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.index),
  405. AML_OFFSET(common_serial_bus.res_source_index),
  406. 1},
  407. {ACPI_RSC_COUNT_SERIAL_RES,
  408. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_length),
  409. AML_OFFSET(common_serial_bus.type_data_length),
  410. sizeof(struct aml_resource_common_serialbus)},
  411. {ACPI_RSC_MOVE_SERIAL_RES,
  412. ACPI_RS_OFFSET(data.common_serial_bus.resource_source.string_ptr),
  413. AML_OFFSET(common_serial_bus.type_data_length),
  414. sizeof(struct aml_resource_common_serialbus)},
  415. /* Uart bus type specific */
  416. {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.flow_control),
  417. AML_OFFSET(uart_serial_bus.type_specific_flags),
  418. 0},
  419. {ACPI_RSC_2BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.stop_bits),
  420. AML_OFFSET(uart_serial_bus.type_specific_flags),
  421. 2},
  422. {ACPI_RSC_3BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.data_bits),
  423. AML_OFFSET(uart_serial_bus.type_specific_flags),
  424. 4},
  425. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.uart_serial_bus.endian),
  426. AML_OFFSET(uart_serial_bus.type_specific_flags),
  427. 7},
  428. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.parity),
  429. AML_OFFSET(uart_serial_bus.parity),
  430. 1},
  431. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.uart_serial_bus.lines_enabled),
  432. AML_OFFSET(uart_serial_bus.lines_enabled),
  433. 1},
  434. {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.rx_fifo_size),
  435. AML_OFFSET(uart_serial_bus.rx_fifo_size),
  436. 1},
  437. {ACPI_RSC_MOVE16, ACPI_RS_OFFSET(data.uart_serial_bus.tx_fifo_size),
  438. AML_OFFSET(uart_serial_bus.tx_fifo_size),
  439. 1},
  440. {ACPI_RSC_MOVE32,
  441. ACPI_RS_OFFSET(data.uart_serial_bus.default_baud_rate),
  442. AML_OFFSET(uart_serial_bus.default_baud_rate),
  443. 1},
  444. };
  445. /*******************************************************************************
  446. *
  447. * acpi_rs_convert_pin_config
  448. *
  449. ******************************************************************************/
  450. struct acpi_rsconvert_info acpi_rs_convert_pin_config[14] = {
  451. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_CONFIG,
  452. ACPI_RS_SIZE(struct acpi_resource_pin_config),
  453. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_config)},
  454. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_CONFIG,
  455. sizeof(struct aml_resource_pin_config),
  456. 0},
  457. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.revision_id),
  458. AML_OFFSET(pin_config.revision_id),
  459. 1},
  460. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.shareable),
  461. AML_OFFSET(pin_config.flags),
  462. 0},
  463. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_config.producer_consumer),
  464. AML_OFFSET(pin_config.flags),
  465. 1},
  466. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.pin_config_type),
  467. AML_OFFSET(pin_config.pin_config_type),
  468. 1},
  469. {ACPI_RSC_MOVE32, ACPI_RS_OFFSET(data.pin_config.pin_config_value),
  470. AML_OFFSET(pin_config.pin_config_value),
  471. 1},
  472. /* Pin Table */
  473. /*
  474. * It is OK to use GPIO operations here because none of them refer GPIO
  475. * structures directly but instead use offsets given here.
  476. */
  477. {ACPI_RSC_COUNT_GPIO_PIN,
  478. ACPI_RS_OFFSET(data.pin_config.pin_table_length),
  479. AML_OFFSET(pin_config.pin_table_offset),
  480. AML_OFFSET(pin_config.res_source_offset)},
  481. {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_config.pin_table),
  482. AML_OFFSET(pin_config.pin_table_offset),
  483. 0},
  484. /* Resource Source */
  485. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_config.resource_source.index),
  486. AML_OFFSET(pin_config.res_source_index),
  487. 1},
  488. {ACPI_RSC_COUNT_GPIO_RES,
  489. ACPI_RS_OFFSET(data.pin_config.resource_source.string_length),
  490. AML_OFFSET(pin_config.res_source_offset),
  491. AML_OFFSET(pin_config.vendor_offset)},
  492. {ACPI_RSC_MOVE_GPIO_RES,
  493. ACPI_RS_OFFSET(data.pin_config.resource_source.string_ptr),
  494. AML_OFFSET(pin_config.res_source_offset),
  495. 0},
  496. /* Vendor Data */
  497. {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_config.vendor_length),
  498. AML_OFFSET(pin_config.vendor_length),
  499. 1},
  500. {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_config.vendor_data),
  501. AML_OFFSET(pin_config.vendor_offset),
  502. 0},
  503. };
  504. /*******************************************************************************
  505. *
  506. * acpi_rs_convert_pin_group
  507. *
  508. ******************************************************************************/
  509. struct acpi_rsconvert_info acpi_rs_convert_pin_group[10] = {
  510. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP,
  511. ACPI_RS_SIZE(struct acpi_resource_pin_group),
  512. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group)},
  513. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP,
  514. sizeof(struct aml_resource_pin_group),
  515. 0},
  516. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group.revision_id),
  517. AML_OFFSET(pin_group.revision_id),
  518. 1},
  519. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group.producer_consumer),
  520. AML_OFFSET(pin_group.flags),
  521. 0},
  522. /* Pin Table */
  523. /*
  524. * It is OK to use GPIO operations here because none of them refer GPIO
  525. * structures directly but instead use offsets given here.
  526. */
  527. {ACPI_RSC_COUNT_GPIO_PIN,
  528. ACPI_RS_OFFSET(data.pin_group.pin_table_length),
  529. AML_OFFSET(pin_group.pin_table_offset),
  530. AML_OFFSET(pin_group.label_offset)},
  531. {ACPI_RSC_MOVE_GPIO_PIN, ACPI_RS_OFFSET(data.pin_group.pin_table),
  532. AML_OFFSET(pin_group.pin_table_offset),
  533. 0},
  534. /* Resource Label */
  535. {ACPI_RSC_COUNT_GPIO_RES,
  536. ACPI_RS_OFFSET(data.pin_group.resource_label.string_length),
  537. AML_OFFSET(pin_group.label_offset),
  538. AML_OFFSET(pin_group.vendor_offset)},
  539. {ACPI_RSC_MOVE_GPIO_RES,
  540. ACPI_RS_OFFSET(data.pin_group.resource_label.string_ptr),
  541. AML_OFFSET(pin_group.label_offset),
  542. 0},
  543. /* Vendor Data */
  544. {ACPI_RSC_COUNT_GPIO_VEN, ACPI_RS_OFFSET(data.pin_group.vendor_length),
  545. AML_OFFSET(pin_group.vendor_length),
  546. 1},
  547. {ACPI_RSC_MOVE_GPIO_RES, ACPI_RS_OFFSET(data.pin_group.vendor_data),
  548. AML_OFFSET(pin_group.vendor_offset),
  549. 0},
  550. };
  551. /*******************************************************************************
  552. *
  553. * acpi_rs_convert_pin_group_function
  554. *
  555. ******************************************************************************/
  556. struct acpi_rsconvert_info acpi_rs_convert_pin_group_function[13] = {
  557. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_FUNCTION,
  558. ACPI_RS_SIZE(struct acpi_resource_pin_group_function),
  559. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_function)},
  560. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_FUNCTION,
  561. sizeof(struct aml_resource_pin_group_function),
  562. 0},
  563. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_function.revision_id),
  564. AML_OFFSET(pin_group_function.revision_id),
  565. 1},
  566. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_function.shareable),
  567. AML_OFFSET(pin_group_function.flags),
  568. 0},
  569. {ACPI_RSC_1BITFLAG,
  570. ACPI_RS_OFFSET(data.pin_group_function.producer_consumer),
  571. AML_OFFSET(pin_group_function.flags),
  572. 1},
  573. {ACPI_RSC_MOVE16,
  574. ACPI_RS_OFFSET(data.pin_group_function.function_number),
  575. AML_OFFSET(pin_group_function.function_number),
  576. 1},
  577. /* Resource Source */
  578. {ACPI_RSC_MOVE8,
  579. ACPI_RS_OFFSET(data.pin_group_function.resource_source.index),
  580. AML_OFFSET(pin_group_function.res_source_index),
  581. 1},
  582. {ACPI_RSC_COUNT_GPIO_RES,
  583. ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_length),
  584. AML_OFFSET(pin_group_function.res_source_offset),
  585. AML_OFFSET(pin_group_function.res_source_label_offset)},
  586. {ACPI_RSC_MOVE_GPIO_RES,
  587. ACPI_RS_OFFSET(data.pin_group_function.resource_source.string_ptr),
  588. AML_OFFSET(pin_group_function.res_source_offset),
  589. 0},
  590. /* Resource Source Label */
  591. {ACPI_RSC_COUNT_GPIO_RES,
  592. ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
  593. string_length),
  594. AML_OFFSET(pin_group_function.res_source_label_offset),
  595. AML_OFFSET(pin_group_function.vendor_offset)},
  596. {ACPI_RSC_MOVE_GPIO_RES,
  597. ACPI_RS_OFFSET(data.pin_group_function.resource_source_label.
  598. string_ptr),
  599. AML_OFFSET(pin_group_function.res_source_label_offset),
  600. 0},
  601. /* Vendor Data */
  602. {ACPI_RSC_COUNT_GPIO_VEN,
  603. ACPI_RS_OFFSET(data.pin_group_function.vendor_length),
  604. AML_OFFSET(pin_group_function.vendor_length),
  605. 1},
  606. {ACPI_RSC_MOVE_GPIO_RES,
  607. ACPI_RS_OFFSET(data.pin_group_function.vendor_data),
  608. AML_OFFSET(pin_group_function.vendor_offset),
  609. 0},
  610. };
  611. /*******************************************************************************
  612. *
  613. * acpi_rs_convert_pin_group_config
  614. *
  615. ******************************************************************************/
  616. struct acpi_rsconvert_info acpi_rs_convert_pin_group_config[14] = {
  617. {ACPI_RSC_INITGET, ACPI_RESOURCE_TYPE_PIN_GROUP_CONFIG,
  618. ACPI_RS_SIZE(struct acpi_resource_pin_group_config),
  619. ACPI_RSC_TABLE_SIZE(acpi_rs_convert_pin_group_config)},
  620. {ACPI_RSC_INITSET, ACPI_RESOURCE_NAME_PIN_GROUP_CONFIG,
  621. sizeof(struct aml_resource_pin_group_config),
  622. 0},
  623. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.revision_id),
  624. AML_OFFSET(pin_group_config.revision_id),
  625. 1},
  626. {ACPI_RSC_1BITFLAG, ACPI_RS_OFFSET(data.pin_group_config.shareable),
  627. AML_OFFSET(pin_group_config.flags),
  628. 0},
  629. {ACPI_RSC_1BITFLAG,
  630. ACPI_RS_OFFSET(data.pin_group_config.producer_consumer),
  631. AML_OFFSET(pin_group_config.flags),
  632. 1},
  633. {ACPI_RSC_MOVE8, ACPI_RS_OFFSET(data.pin_group_config.pin_config_type),
  634. AML_OFFSET(pin_group_config.pin_config_type),
  635. 1},
  636. {ACPI_RSC_MOVE32,
  637. ACPI_RS_OFFSET(data.pin_group_config.pin_config_value),
  638. AML_OFFSET(pin_group_config.pin_config_value),
  639. 1},
  640. /* Resource Source */
  641. {ACPI_RSC_MOVE8,
  642. ACPI_RS_OFFSET(data.pin_group_config.resource_source.index),
  643. AML_OFFSET(pin_group_config.res_source_index),
  644. 1},
  645. {ACPI_RSC_COUNT_GPIO_RES,
  646. ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_length),
  647. AML_OFFSET(pin_group_config.res_source_offset),
  648. AML_OFFSET(pin_group_config.res_source_label_offset)},
  649. {ACPI_RSC_MOVE_GPIO_RES,
  650. ACPI_RS_OFFSET(data.pin_group_config.resource_source.string_ptr),
  651. AML_OFFSET(pin_group_config.res_source_offset),
  652. 0},
  653. /* Resource Source Label */
  654. {ACPI_RSC_COUNT_GPIO_RES,
  655. ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.
  656. string_length),
  657. AML_OFFSET(pin_group_config.res_source_label_offset),
  658. AML_OFFSET(pin_group_config.vendor_offset)},
  659. {ACPI_RSC_MOVE_GPIO_RES,
  660. ACPI_RS_OFFSET(data.pin_group_config.resource_source_label.string_ptr),
  661. AML_OFFSET(pin_group_config.res_source_label_offset),
  662. 0},
  663. /* Vendor Data */
  664. {ACPI_RSC_COUNT_GPIO_VEN,
  665. ACPI_RS_OFFSET(data.pin_group_config.vendor_length),
  666. AML_OFFSET(pin_group_config.vendor_length),
  667. 1},
  668. {ACPI_RSC_MOVE_GPIO_RES,
  669. ACPI_RS_OFFSET(data.pin_group_config.vendor_data),
  670. AML_OFFSET(pin_group_config.vendor_offset),
  671. 0},
  672. };