dfc_defs.h 2.3 KB

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