dpbp.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Freescale Layerscape MC I/O wrapper
  4. *
  5. * Copyright 2013-2016 Freescale Semiconductor, Inc.
  6. * Copyright 2017 NXP
  7. */
  8. #include <fsl-mc/fsl_mc_sys.h>
  9. #include <fsl-mc/fsl_mc_cmd.h>
  10. #include <fsl-mc/fsl_dpbp.h>
  11. int dpbp_open(struct fsl_mc_io *mc_io,
  12. uint32_t cmd_flags,
  13. int dpbp_id,
  14. uint16_t *token)
  15. {
  16. struct mc_command cmd = { 0 };
  17. int err;
  18. /* prepare command */
  19. cmd.header = mc_encode_cmd_header(DPBP_CMDID_OPEN,
  20. cmd_flags,
  21. 0);
  22. DPBP_CMD_OPEN(cmd, dpbp_id);
  23. /* send command to mc*/
  24. err = mc_send_command(mc_io, &cmd);
  25. if (err)
  26. return err;
  27. /* retrieve response parameters */
  28. *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
  29. return err;
  30. }
  31. int dpbp_close(struct fsl_mc_io *mc_io,
  32. uint32_t cmd_flags,
  33. uint16_t token)
  34. {
  35. struct mc_command cmd = { 0 };
  36. /* prepare command */
  37. cmd.header = mc_encode_cmd_header(DPBP_CMDID_CLOSE, cmd_flags,
  38. token);
  39. /* send command to mc*/
  40. return mc_send_command(mc_io, &cmd);
  41. }
  42. int dpbp_create(struct fsl_mc_io *mc_io,
  43. uint16_t dprc_token,
  44. uint32_t cmd_flags,
  45. const struct dpbp_cfg *cfg,
  46. uint32_t *obj_id)
  47. {
  48. struct mc_command cmd = { 0 };
  49. int err;
  50. (void)(cfg); /* unused */
  51. /* prepare command */
  52. cmd.header = mc_encode_cmd_header(DPBP_CMDID_CREATE,
  53. cmd_flags,
  54. dprc_token);
  55. /* send command to mc*/
  56. err = mc_send_command(mc_io, &cmd);
  57. if (err)
  58. return err;
  59. /* retrieve response parameters */
  60. MC_CMD_READ_OBJ_ID(cmd, *obj_id);
  61. return 0;
  62. }
  63. int dpbp_destroy(struct fsl_mc_io *mc_io,
  64. uint16_t dprc_token,
  65. uint32_t cmd_flags,
  66. uint32_t obj_id)
  67. {
  68. struct mc_command cmd = { 0 };
  69. /* prepare command */
  70. cmd.header = mc_encode_cmd_header(DPBP_CMDID_DESTROY,
  71. cmd_flags,
  72. dprc_token);
  73. /* set object id to destroy */
  74. CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
  75. /* send command to mc*/
  76. return mc_send_command(mc_io, &cmd);
  77. }
  78. int dpbp_enable(struct fsl_mc_io *mc_io,
  79. uint32_t cmd_flags,
  80. uint16_t token)
  81. {
  82. struct mc_command cmd = { 0 };
  83. /* prepare command */
  84. cmd.header = mc_encode_cmd_header(DPBP_CMDID_ENABLE, cmd_flags,
  85. token);
  86. /* send command to mc*/
  87. return mc_send_command(mc_io, &cmd);
  88. }
  89. int dpbp_disable(struct fsl_mc_io *mc_io,
  90. uint32_t cmd_flags,
  91. uint16_t token)
  92. {
  93. struct mc_command cmd = { 0 };
  94. /* prepare command */
  95. cmd.header = mc_encode_cmd_header(DPBP_CMDID_DISABLE,
  96. cmd_flags,
  97. token);
  98. /* send command to mc*/
  99. return mc_send_command(mc_io, &cmd);
  100. }
  101. int dpbp_reset(struct fsl_mc_io *mc_io,
  102. uint32_t cmd_flags,
  103. uint16_t token)
  104. {
  105. struct mc_command cmd = { 0 };
  106. /* prepare command */
  107. cmd.header = mc_encode_cmd_header(DPBP_CMDID_RESET,
  108. cmd_flags,
  109. token);
  110. /* send command to mc*/
  111. return mc_send_command(mc_io, &cmd);
  112. }
  113. int dpbp_get_attributes(struct fsl_mc_io *mc_io,
  114. uint32_t cmd_flags,
  115. uint16_t token,
  116. struct dpbp_attr *attr)
  117. {
  118. struct mc_command cmd = { 0 };
  119. int err;
  120. /* prepare command */
  121. cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_ATTR,
  122. cmd_flags,
  123. token);
  124. /* send command to mc*/
  125. err = mc_send_command(mc_io, &cmd);
  126. if (err)
  127. return err;
  128. /* retrieve response parameters */
  129. DPBP_RSP_GET_ATTRIBUTES(cmd, attr);
  130. return 0;
  131. }
  132. int dpbp_get_api_version(struct fsl_mc_io *mc_io,
  133. u32 cmd_flags,
  134. u16 *major_ver,
  135. u16 *minor_ver)
  136. {
  137. struct mc_command cmd = { 0 };
  138. int err;
  139. /* prepare command */
  140. cmd.header = mc_encode_cmd_header(DPBP_CMDID_GET_API_VERSION,
  141. cmd_flags, 0);
  142. /* send command to mc */
  143. err = mc_send_command(mc_io, &cmd);
  144. if (err)
  145. return err;
  146. /* retrieve response parameters */
  147. mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
  148. return 0;
  149. }