f_qdss.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
  4. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  5. */
  6. #ifndef _F_QDSS_H
  7. #define _F_QDSS_H
  8. #include <linux/completion.h>
  9. #include <linux/kernel.h>
  10. #include <linux/ipc_logging.h>
  11. #include <linux/list.h>
  12. #include <linux/mutex.h>
  13. #include <linux/usb/ch9.h>
  14. #include <linux/usb/gadget.h>
  15. #include <linux/usb/composite.h>
  16. #include <linux/usb/usb_qdss.h>
  17. enum qti_port_type {
  18. QTI_PORT_RMNET,
  19. QTI_PORT_DPL,
  20. QTI_NUM_PORTS
  21. };
  22. struct usb_qdss_ch {
  23. const char *name;
  24. struct list_head list;
  25. void (*notify)(void *priv, unsigned int event,
  26. struct qdss_request *d_req, struct usb_qdss_ch *ch);
  27. void *priv;
  28. int ch_type;
  29. };
  30. struct gqdss {
  31. struct usb_function function;
  32. struct usb_ep *ctrl_out;
  33. struct usb_ep *ctrl_in;
  34. struct usb_ep *data;
  35. int (*send_encap_cmd)(enum qti_port_type qport, void *buf, size_t len);
  36. void (*notify_modem)(void *g, enum qti_port_type qport, int cbits);
  37. };
  38. /* struct f_qdss - USB qdss function driver private structure */
  39. struct f_qdss {
  40. struct gqdss port;
  41. struct usb_gadget *gadget;
  42. short int port_num;
  43. u8 ctrl_iface_id;
  44. u8 data_iface_id;
  45. int usb_connected;
  46. bool debug_inface_enabled;
  47. struct usb_request *endless_req;
  48. struct usb_qdss_ch ch;
  49. /* for mdm channel SW path */
  50. struct list_head data_write_pool;
  51. struct list_head queued_data_pool;
  52. struct list_head dequeued_data_pool;
  53. struct work_struct connect_w;
  54. struct work_struct disconnect_w;
  55. spinlock_t lock;
  56. unsigned int data_enabled:1;
  57. unsigned int ctrl_in_enabled:1;
  58. unsigned int ctrl_out_enabled:1;
  59. struct workqueue_struct *wq;
  60. struct mutex mutex;
  61. bool opened; /* protected by 'mutex' */
  62. struct completion dequeue_done;
  63. };
  64. struct usb_qdss_opts {
  65. struct usb_function_instance func_inst;
  66. struct f_qdss *usb_qdss;
  67. char *channel_name;
  68. };
  69. struct qdss_req {
  70. struct usb_request *usb_req;
  71. struct qdss_request *qdss_req;
  72. struct list_head list;
  73. };
  74. int set_qdss_data_connection(struct f_qdss *qdss, int enable);
  75. int alloc_hw_req(struct usb_ep *data_ep);
  76. #endif