obj-api.c 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
  2. /*
  3. * Copyright 2021 NXP
  4. *
  5. */
  6. #include <linux/kernel.h>
  7. #include <linux/fsl/mc.h>
  8. #include "fsl-mc-private.h"
  9. static int fsl_mc_get_open_cmd_id(const char *type)
  10. {
  11. static const struct {
  12. int cmd_id;
  13. const char *type;
  14. } dev_ids[] = {
  15. { DPRTC_CMDID_OPEN, "dprtc" },
  16. { DPRC_CMDID_OPEN, "dprc" },
  17. { DPNI_CMDID_OPEN, "dpni" },
  18. { DPIO_CMDID_OPEN, "dpio" },
  19. { DPSW_CMDID_OPEN, "dpsw" },
  20. { DPBP_CMDID_OPEN, "dpbp" },
  21. { DPCON_CMDID_OPEN, "dpcon" },
  22. { DPMCP_CMDID_OPEN, "dpmcp" },
  23. { DPMAC_CMDID_OPEN, "dpmac" },
  24. { DPSECI_CMDID_OPEN, "dpseci" },
  25. { DPDMUX_CMDID_OPEN, "dpdmux" },
  26. { DPDCEI_CMDID_OPEN, "dpdcei" },
  27. { DPAIOP_CMDID_OPEN, "dpaiop" },
  28. { DPCI_CMDID_OPEN, "dpci" },
  29. { DPDMAI_CMDID_OPEN, "dpdmai" },
  30. { DPDBG_CMDID_OPEN, "dpdbg" },
  31. { 0, NULL }
  32. };
  33. int i;
  34. for (i = 0; dev_ids[i].type; i++)
  35. if (!strcmp(dev_ids[i].type, type))
  36. return dev_ids[i].cmd_id;
  37. return -1;
  38. }
  39. int fsl_mc_obj_open(struct fsl_mc_io *mc_io,
  40. u32 cmd_flags,
  41. int obj_id,
  42. char *obj_type,
  43. u16 *token)
  44. {
  45. struct fsl_mc_command cmd = { 0 };
  46. struct fsl_mc_obj_cmd_open *cmd_params;
  47. int err = 0;
  48. int cmd_id = fsl_mc_get_open_cmd_id(obj_type);
  49. if (cmd_id == -1)
  50. return -ENODEV;
  51. /* prepare command */
  52. cmd.header = mc_encode_cmd_header(cmd_id, cmd_flags, 0);
  53. cmd_params = (struct fsl_mc_obj_cmd_open *)cmd.params;
  54. cmd_params->obj_id = cpu_to_le32(obj_id);
  55. /* send command to mc*/
  56. err = mc_send_command(mc_io, &cmd);
  57. if (err)
  58. return err;
  59. /* retrieve response parameters */
  60. *token = mc_cmd_hdr_read_token(&cmd);
  61. return err;
  62. }
  63. EXPORT_SYMBOL_GPL(fsl_mc_obj_open);
  64. int fsl_mc_obj_close(struct fsl_mc_io *mc_io,
  65. u32 cmd_flags,
  66. u16 token)
  67. {
  68. struct fsl_mc_command cmd = { 0 };
  69. /* prepare command */
  70. cmd.header = mc_encode_cmd_header(OBJ_CMDID_CLOSE, cmd_flags,
  71. token);
  72. /* send command to mc*/
  73. return mc_send_command(mc_io, &cmd);
  74. }
  75. EXPORT_SYMBOL_GPL(fsl_mc_obj_close);
  76. int fsl_mc_obj_reset(struct fsl_mc_io *mc_io,
  77. u32 cmd_flags,
  78. u16 token)
  79. {
  80. struct fsl_mc_command cmd = { 0 };
  81. /* prepare command */
  82. cmd.header = mc_encode_cmd_header(OBJ_CMDID_RESET, cmd_flags,
  83. token);
  84. /* send command to mc*/
  85. return mc_send_command(mc_io, &cmd);
  86. }
  87. EXPORT_SYMBOL_GPL(fsl_mc_obj_reset);