dprc.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. /*
  2. * Freescale Layerscape MC I/O wrapper
  3. *
  4. * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
  5. * Author: German Rivera <German.Rivera@freescale.com>
  6. *
  7. * SPDX-License-Identifier: GPL-2.0+
  8. */
  9. #include <fsl-mc/fsl_mc_sys.h>
  10. #include <fsl-mc/fsl_mc_cmd.h>
  11. #include <fsl-mc/fsl_dprc.h>
  12. int dprc_get_container_id(struct fsl_mc_io *mc_io,
  13. uint32_t cmd_flags,
  14. int *container_id)
  15. {
  16. struct mc_command cmd = { 0 };
  17. int err;
  18. /* prepare command */
  19. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
  20. cmd_flags,
  21. 0);
  22. /* send command to mc*/
  23. err = mc_send_command(mc_io, &cmd);
  24. if (err)
  25. return err;
  26. /* retrieve response parameters */
  27. DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
  28. return 0;
  29. }
  30. int dprc_open(struct fsl_mc_io *mc_io,
  31. uint32_t cmd_flags,
  32. int container_id,
  33. uint16_t *token)
  34. {
  35. struct mc_command cmd = { 0 };
  36. int err;
  37. /* prepare command */
  38. cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
  39. 0);
  40. DPRC_CMD_OPEN(cmd, container_id);
  41. /* send command to mc*/
  42. err = mc_send_command(mc_io, &cmd);
  43. if (err)
  44. return err;
  45. /* retrieve response parameters */
  46. *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
  47. return 0;
  48. }
  49. int dprc_close(struct fsl_mc_io *mc_io,
  50. uint32_t cmd_flags,
  51. uint16_t token)
  52. {
  53. struct mc_command cmd = { 0 };
  54. /* prepare command */
  55. cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
  56. token);
  57. /* send command to mc*/
  58. return mc_send_command(mc_io, &cmd);
  59. }
  60. int dprc_reset_container(struct fsl_mc_io *mc_io,
  61. uint32_t cmd_flags,
  62. uint16_t token,
  63. int child_container_id)
  64. {
  65. struct mc_command cmd = { 0 };
  66. /* prepare command */
  67. cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
  68. cmd_flags,
  69. token);
  70. DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
  71. /* send command to mc*/
  72. return mc_send_command(mc_io, &cmd);
  73. }
  74. int dprc_get_attributes(struct fsl_mc_io *mc_io,
  75. uint32_t cmd_flags,
  76. uint16_t token,
  77. struct dprc_attributes *attr)
  78. {
  79. struct mc_command cmd = { 0 };
  80. int err;
  81. /* prepare command */
  82. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
  83. cmd_flags,
  84. token);
  85. /* send command to mc*/
  86. err = mc_send_command(mc_io, &cmd);
  87. if (err)
  88. return err;
  89. /* retrieve response parameters */
  90. DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
  91. return 0;
  92. }
  93. int dprc_get_obj_count(struct fsl_mc_io *mc_io,
  94. uint32_t cmd_flags,
  95. uint16_t token,
  96. int *obj_count)
  97. {
  98. struct mc_command cmd = { 0 };
  99. int err;
  100. /* prepare command */
  101. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
  102. cmd_flags,
  103. token);
  104. /* send command to mc*/
  105. err = mc_send_command(mc_io, &cmd);
  106. if (err)
  107. return err;
  108. /* retrieve response parameters */
  109. DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
  110. return 0;
  111. }
  112. int dprc_get_obj(struct fsl_mc_io *mc_io,
  113. uint32_t cmd_flags,
  114. uint16_t token,
  115. int obj_index,
  116. struct dprc_obj_desc *obj_desc)
  117. {
  118. struct mc_command cmd = { 0 };
  119. int err;
  120. /* prepare command */
  121. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
  122. cmd_flags,
  123. token);
  124. DPRC_CMD_GET_OBJ(cmd, obj_index);
  125. /* send command to mc*/
  126. err = mc_send_command(mc_io, &cmd);
  127. if (err)
  128. return err;
  129. /* retrieve response parameters */
  130. DPRC_RSP_GET_OBJ(cmd, obj_desc);
  131. return 0;
  132. }
  133. int dprc_get_res_count(struct fsl_mc_io *mc_io,
  134. uint32_t cmd_flags,
  135. uint16_t token,
  136. char *type,
  137. int *res_count)
  138. {
  139. struct mc_command cmd = { 0 };
  140. int err;
  141. *res_count = 0;
  142. /* prepare command */
  143. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
  144. cmd_flags,
  145. token);
  146. DPRC_CMD_GET_RES_COUNT(cmd, type);
  147. /* send command to mc*/
  148. err = mc_send_command(mc_io, &cmd);
  149. if (err)
  150. return err;
  151. /* retrieve response parameters */
  152. DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
  153. return 0;
  154. }
  155. int dprc_get_res_ids(struct fsl_mc_io *mc_io,
  156. uint32_t cmd_flags,
  157. uint16_t token,
  158. char *type,
  159. struct dprc_res_ids_range_desc *range_desc)
  160. {
  161. struct mc_command cmd = { 0 };
  162. int err;
  163. /* prepare command */
  164. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
  165. cmd_flags,
  166. token);
  167. DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
  168. /* send command to mc*/
  169. err = mc_send_command(mc_io, &cmd);
  170. if (err)
  171. return err;
  172. /* retrieve response parameters */
  173. DPRC_RSP_GET_RES_IDS(cmd, range_desc);
  174. return 0;
  175. }
  176. int dprc_get_obj_region(struct fsl_mc_io *mc_io,
  177. uint32_t cmd_flags,
  178. uint16_t token,
  179. char *obj_type,
  180. int obj_id,
  181. uint8_t region_index,
  182. struct dprc_region_desc *region_desc)
  183. {
  184. struct mc_command cmd = { 0 };
  185. int err;
  186. /* prepare command */
  187. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
  188. cmd_flags,
  189. token);
  190. DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
  191. /* send command to mc*/
  192. err = mc_send_command(mc_io, &cmd);
  193. if (err)
  194. return err;
  195. /* retrieve response parameters */
  196. DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
  197. return 0;
  198. }
  199. int dprc_connect(struct fsl_mc_io *mc_io,
  200. uint32_t cmd_flags,
  201. uint16_t token,
  202. const struct dprc_endpoint *endpoint1,
  203. const struct dprc_endpoint *endpoint2,
  204. const struct dprc_connection_cfg *cfg)
  205. {
  206. struct mc_command cmd = { 0 };
  207. /* prepare command */
  208. cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
  209. cmd_flags,
  210. token);
  211. DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
  212. /* send command to mc*/
  213. return mc_send_command(mc_io, &cmd);
  214. }
  215. int dprc_disconnect(struct fsl_mc_io *mc_io,
  216. uint32_t cmd_flags,
  217. uint16_t token,
  218. const struct dprc_endpoint *endpoint)
  219. {
  220. struct mc_command cmd = { 0 };
  221. /* prepare command */
  222. cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
  223. cmd_flags,
  224. token);
  225. DPRC_CMD_DISCONNECT(cmd, endpoint);
  226. /* send command to mc*/
  227. return mc_send_command(mc_io, &cmd);
  228. }
  229. int dprc_get_connection(struct fsl_mc_io *mc_io,
  230. uint32_t cmd_flags,
  231. uint16_t token,
  232. const struct dprc_endpoint *endpoint1,
  233. struct dprc_endpoint *endpoint2,
  234. int *state)
  235. {
  236. struct mc_command cmd = { 0 };
  237. int err;
  238. /* prepare command */
  239. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
  240. cmd_flags,
  241. token);
  242. DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
  243. /* send command to mc*/
  244. err = mc_send_command(mc_io, &cmd);
  245. if (err)
  246. return err;
  247. /* retrieve response parameters */
  248. DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
  249. return 0;
  250. }