dprc.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283
  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, int *container_id)
  13. {
  14. struct mc_command cmd = { 0 };
  15. int err;
  16. /* prepare command */
  17. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
  18. MC_CMD_PRI_LOW, 0);
  19. /* send command to mc*/
  20. err = mc_send_command(mc_io, &cmd);
  21. if (err)
  22. return err;
  23. /* retrieve response parameters */
  24. DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
  25. return 0;
  26. }
  27. int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token)
  28. {
  29. struct mc_command cmd = { 0 };
  30. int err;
  31. /* prepare command */
  32. cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, MC_CMD_PRI_LOW,
  33. 0);
  34. DPRC_CMD_OPEN(cmd, container_id);
  35. /* send command to mc*/
  36. err = mc_send_command(mc_io, &cmd);
  37. if (err)
  38. return err;
  39. /* retrieve response parameters */
  40. *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
  41. return 0;
  42. }
  43. int dprc_close(struct fsl_mc_io *mc_io, uint16_t token)
  44. {
  45. struct mc_command cmd = { 0 };
  46. /* prepare command */
  47. cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, MC_CMD_PRI_HIGH,
  48. token);
  49. /* send command to mc*/
  50. return mc_send_command(mc_io, &cmd);
  51. }
  52. int dprc_reset_container(struct fsl_mc_io *mc_io,
  53. uint16_t token,
  54. int child_container_id)
  55. {
  56. struct mc_command cmd = { 0 };
  57. /* prepare command */
  58. cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
  59. MC_CMD_PRI_LOW, token);
  60. DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
  61. /* send command to mc*/
  62. return mc_send_command(mc_io, &cmd);
  63. }
  64. int dprc_get_attributes(struct fsl_mc_io *mc_io,
  65. uint16_t token,
  66. struct dprc_attributes *attr)
  67. {
  68. struct mc_command cmd = { 0 };
  69. int err;
  70. /* prepare command */
  71. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
  72. MC_CMD_PRI_LOW,
  73. token);
  74. /* send command to mc*/
  75. err = mc_send_command(mc_io, &cmd);
  76. if (err)
  77. return err;
  78. /* retrieve response parameters */
  79. DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
  80. return 0;
  81. }
  82. int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count)
  83. {
  84. struct mc_command cmd = { 0 };
  85. int err;
  86. /* prepare command */
  87. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
  88. MC_CMD_PRI_LOW, token);
  89. /* send command to mc*/
  90. err = mc_send_command(mc_io, &cmd);
  91. if (err)
  92. return err;
  93. /* retrieve response parameters */
  94. DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
  95. return 0;
  96. }
  97. int dprc_get_obj(struct fsl_mc_io *mc_io,
  98. uint16_t token,
  99. int obj_index,
  100. struct dprc_obj_desc *obj_desc)
  101. {
  102. struct mc_command cmd = { 0 };
  103. int err;
  104. /* prepare command */
  105. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
  106. MC_CMD_PRI_LOW,
  107. token);
  108. DPRC_CMD_GET_OBJ(cmd, obj_index);
  109. /* send command to mc*/
  110. err = mc_send_command(mc_io, &cmd);
  111. if (err)
  112. return err;
  113. /* retrieve response parameters */
  114. DPRC_RSP_GET_OBJ(cmd, obj_desc);
  115. return 0;
  116. }
  117. int dprc_get_res_count(struct fsl_mc_io *mc_io,
  118. uint16_t token,
  119. char *type,
  120. int *res_count)
  121. {
  122. struct mc_command cmd = { 0 };
  123. int err;
  124. *res_count = 0;
  125. /* prepare command */
  126. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
  127. MC_CMD_PRI_LOW, token);
  128. DPRC_CMD_GET_RES_COUNT(cmd, type);
  129. /* send command to mc*/
  130. err = mc_send_command(mc_io, &cmd);
  131. if (err)
  132. return err;
  133. /* retrieve response parameters */
  134. DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
  135. return 0;
  136. }
  137. int dprc_get_res_ids(struct fsl_mc_io *mc_io,
  138. uint16_t token,
  139. char *type,
  140. struct dprc_res_ids_range_desc *range_desc)
  141. {
  142. struct mc_command cmd = { 0 };
  143. int err;
  144. /* prepare command */
  145. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
  146. MC_CMD_PRI_LOW, token);
  147. DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
  148. /* send command to mc*/
  149. err = mc_send_command(mc_io, &cmd);
  150. if (err)
  151. return err;
  152. /* retrieve response parameters */
  153. DPRC_RSP_GET_RES_IDS(cmd, range_desc);
  154. return 0;
  155. }
  156. int dprc_get_obj_region(struct fsl_mc_io *mc_io,
  157. uint16_t token,
  158. char *obj_type,
  159. int obj_id,
  160. uint8_t region_index,
  161. struct dprc_region_desc *region_desc)
  162. {
  163. struct mc_command cmd = { 0 };
  164. int err;
  165. /* prepare command */
  166. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
  167. MC_CMD_PRI_LOW, token);
  168. DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
  169. /* send command to mc*/
  170. err = mc_send_command(mc_io, &cmd);
  171. if (err)
  172. return err;
  173. /* retrieve response parameters */
  174. DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
  175. return 0;
  176. }
  177. int dprc_connect(struct fsl_mc_io *mc_io,
  178. uint16_t token,
  179. const struct dprc_endpoint *endpoint1,
  180. const struct dprc_endpoint *endpoint2)
  181. {
  182. struct mc_command cmd = { 0 };
  183. /* prepare command */
  184. cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
  185. MC_CMD_PRI_LOW,
  186. token);
  187. DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2);
  188. /* send command to mc*/
  189. return mc_send_command(mc_io, &cmd);
  190. }
  191. int dprc_disconnect(struct fsl_mc_io *mc_io,
  192. uint16_t token,
  193. const struct dprc_endpoint *endpoint)
  194. {
  195. struct mc_command cmd = { 0 };
  196. /* prepare command */
  197. cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
  198. MC_CMD_PRI_LOW,
  199. token);
  200. DPRC_CMD_DISCONNECT(cmd, endpoint);
  201. /* send command to mc*/
  202. return mc_send_command(mc_io, &cmd);
  203. }
  204. int dprc_get_connection(struct fsl_mc_io *mc_io,
  205. uint16_t token,
  206. const struct dprc_endpoint *endpoint1,
  207. struct dprc_endpoint *endpoint2,
  208. int *state)
  209. {
  210. struct mc_command cmd = { 0 };
  211. int err;
  212. /* prepare command */
  213. cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
  214. MC_CMD_PRI_LOW,
  215. token);
  216. DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
  217. /* send command to mc*/
  218. err = mc_send_command(mc_io, &cmd);
  219. if (err)
  220. return err;
  221. /* retrieve response parameters */
  222. DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
  223. return 0;
  224. }