qcom_glink_native.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (c) 2016-2017, Linaro Ltd
  4. */
  5. #ifndef __QCOM_GLINK_NATIVE_H__
  6. #define __QCOM_GLINK_NATIVE_H__
  7. #include <linux/rpmsg.h>
  8. #define GLINK_FEATURE_INTENT_REUSE BIT(0)
  9. #define GLINK_FEATURE_MIGRATION BIT(1)
  10. #define GLINK_FEATURE_TRACER_PKT BIT(2)
  11. #define GLINK_FEATURE_ZERO_COPY BIT(3)
  12. #define GLINK_FEATURE_ZERO_COPY_POOLS BIT(4)
  13. /**
  14. * rpmsg rx callback return definitions
  15. * @RPMSG_HANDLED: rpmsg user is done processing data, framework can free the
  16. * resources related to the buffer
  17. * @RPMSG_DEFER: rpmsg user is not done processing data, framework will hold
  18. * onto resources related to the buffer until rpmsg_rx_done is
  19. * called. User should check their endpoint to see if rx_done
  20. * is a supported operation.
  21. */
  22. #define RPMSG_HANDLED 0
  23. #define RPMSG_DEFER 1
  24. struct qcom_glink_pipe {
  25. size_t length;
  26. size_t (*avail)(struct qcom_glink_pipe *glink_pipe);
  27. void (*peak)(struct qcom_glink_pipe *glink_pipe, void *data,
  28. unsigned int offset, size_t count);
  29. void (*advance)(struct qcom_glink_pipe *glink_pipe, size_t count);
  30. void (*write)(struct qcom_glink_pipe *glink_pipe,
  31. const void *hdr, size_t hlen,
  32. const void *data, size_t dlen);
  33. void (*reset)(struct qcom_glink_pipe *glink_pipe);
  34. };
  35. struct qcom_glink;
  36. extern const struct dev_pm_ops glink_native_pm_ops;
  37. struct qcom_glink *qcom_glink_native_probe(struct device *dev,
  38. unsigned long features,
  39. struct qcom_glink_pipe *rx,
  40. struct qcom_glink_pipe *tx,
  41. bool intentless);
  42. int qcom_glink_native_start(struct qcom_glink *glink);
  43. void qcom_glink_native_remove(struct qcom_glink *glink);
  44. void qcom_glink_native_unregister(struct qcom_glink *glink);
  45. /* These operations are temporarily exposing signal interfaces */
  46. int qcom_glink_get_signals(struct rpmsg_endpoint *ept);
  47. int qcom_glink_set_signals(struct rpmsg_endpoint *ept, u32 set, u32 clear);
  48. int qcom_glink_register_signals_cb(struct rpmsg_endpoint *ept,
  49. int (*signals_cb)(struct rpmsg_device *dev, void *priv, u32 old, u32 new));
  50. /* These operations are temporarily exposing deferred freeing interfaces */
  51. bool qcom_glink_rx_done_supported(struct rpmsg_endpoint *ept);
  52. int qcom_glink_rx_done(struct rpmsg_endpoint *ept, void *data);
  53. void *qcom_glink_prepare_da_for_cpu(u64 da, size_t len);
  54. #endif