dfc_defs.h 2.3 KB

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