dfc_defs.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef _DFC_DEFS_H
  6. #define _DFC_DEFS_H
  7. #include <linux/soc/qcom/qmi.h>
  8. #include "qmi_rmnet_i.h"
  9. #define DFC_ACK_TYPE_DISABLE 1
  10. #define DFC_ACK_TYPE_THRESHOLD 2
  11. #define DFC_MASK_TCP_BIDIR 0x1
  12. #define DFC_MASK_RAT_SWITCH 0x2
  13. #define DFC_IS_TCP_BIDIR(r) (bool)((r) & DFC_MASK_TCP_BIDIR)
  14. #define DFC_IS_RAT_SWITCH(r) (bool)((r) & DFC_MASK_RAT_SWITCH)
  15. #define DFC_MAX_QOS_ID_V01 2
  16. struct dfc_qmi_data {
  17. void *rmnet_port;
  18. struct workqueue_struct *dfc_wq;
  19. struct work_struct svc_arrive;
  20. struct qmi_handle handle;
  21. struct sockaddr_qrtr ssctl;
  22. struct svc_info svc;
  23. struct work_struct qmi_ind_work;
  24. struct list_head qmi_ind_q;
  25. spinlock_t qmi_ind_lock;
  26. int index;
  27. int restart_state;
  28. };
  29. enum dfc_ip_type_enum_v01 {
  30. DFC_IP_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
  31. DFC_IPV4_TYPE_V01 = 0x4,
  32. DFC_IPV6_TYPE_V01 = 0x6,
  33. DFC_IP_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647
  34. };
  35. struct dfc_qos_id_type_v01 {
  36. u32 qos_id;
  37. enum dfc_ip_type_enum_v01 ip_type;
  38. };
  39. struct dfc_flow_status_info_type_v01 {
  40. u8 subs_id;
  41. u8 mux_id;
  42. u8 bearer_id;
  43. u32 num_bytes;
  44. u16 seq_num;
  45. u8 qos_ids_len;
  46. struct dfc_qos_id_type_v01 qos_ids[DFC_MAX_QOS_ID_V01];
  47. u8 rx_bytes_valid;
  48. u32 rx_bytes;
  49. };
  50. struct dfc_ancillary_info_type_v01 {
  51. u8 subs_id;
  52. u8 mux_id;
  53. u8 bearer_id;
  54. u32 reserved;
  55. };
  56. struct dfc_flow_status_ind_msg_v01 {
  57. u8 flow_status_valid;
  58. u8 flow_status_len;
  59. struct dfc_flow_status_info_type_v01 flow_status[DFC_MAX_BEARERS_V01];
  60. u8 eod_ack_reqd_valid;
  61. u8 eod_ack_reqd;
  62. u8 ancillary_info_valid;
  63. u8 ancillary_info_len;
  64. struct dfc_ancillary_info_type_v01 ancillary_info[DFC_MAX_BEARERS_V01];
  65. };
  66. struct dfc_bearer_info_type_v01 {
  67. u8 subs_id;
  68. u8 mux_id;
  69. u8 bearer_id;
  70. enum dfc_ip_type_enum_v01 ip_type;
  71. };
  72. struct dfc_tx_link_status_ind_msg_v01 {
  73. u8 tx_status;
  74. u8 bearer_info_valid;
  75. u8 bearer_info_len;
  76. struct dfc_bearer_info_type_v01 bearer_info[DFC_MAX_BEARERS_V01];
  77. };
  78. void dfc_do_burst_flow_control(struct dfc_qmi_data *dfc,
  79. struct dfc_flow_status_ind_msg_v01 *ind,
  80. bool is_query);
  81. void dfc_handle_tx_link_status_ind(struct dfc_qmi_data *dfc,
  82. struct dfc_tx_link_status_ind_msg_v01 *ind);
  83. #endif /* _DFC_DEFS_H */