chtls_cm.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*
  2. * Copyright (c) 2018 Chelsio Communications, Inc.
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. */
  8. #ifndef __CHTLS_CM_H__
  9. #define __CHTLS_CM_H__
  10. /*
  11. * TCB settings
  12. */
  13. /* 3:0 */
  14. #define TCB_ULP_TYPE_W 0
  15. #define TCB_ULP_TYPE_S 0
  16. #define TCB_ULP_TYPE_M 0xfULL
  17. #define TCB_ULP_TYPE_V(x) ((x) << TCB_ULP_TYPE_S)
  18. /* 11:4 */
  19. #define TCB_ULP_RAW_W 0
  20. #define TCB_ULP_RAW_S 4
  21. #define TCB_ULP_RAW_M 0xffULL
  22. #define TCB_ULP_RAW_V(x) ((x) << TCB_ULP_RAW_S)
  23. #define TF_TLS_KEY_SIZE_S 7
  24. #define TF_TLS_KEY_SIZE_V(x) ((x) << TF_TLS_KEY_SIZE_S)
  25. #define TF_TLS_CONTROL_S 2
  26. #define TF_TLS_CONTROL_V(x) ((x) << TF_TLS_CONTROL_S)
  27. #define TF_TLS_ACTIVE_S 1
  28. #define TF_TLS_ACTIVE_V(x) ((x) << TF_TLS_ACTIVE_S)
  29. #define TF_TLS_ENABLE_S 0
  30. #define TF_TLS_ENABLE_V(x) ((x) << TF_TLS_ENABLE_S)
  31. #define TF_RX_QUIESCE_S 15
  32. #define TF_RX_QUIESCE_V(x) ((x) << TF_RX_QUIESCE_S)
  33. /*
  34. * Max receive window supported by HW in bytes. Only a small part of it can
  35. * be set through option0, the rest needs to be set through RX_DATA_ACK.
  36. */
  37. #define MAX_RCV_WND ((1U << 27) - 1)
  38. #define MAX_MSS 65536
  39. /*
  40. * Min receive window. We want it to be large enough to accommodate receive
  41. * coalescing, handle jumbo frames, and not trigger sender SWS avoidance.
  42. */
  43. #define MIN_RCV_WND (24 * 1024U)
  44. #define LOOPBACK(x) (((x) & htonl(0xff000000)) == htonl(0x7f000000))
  45. /* ulp_mem_io + ulptx_idata + payload + padding */
  46. #define MAX_IMM_ULPTX_WR_LEN (32 + 8 + 256 + 8)
  47. /* for TX: a skb must have a headroom of at least TX_HEADER_LEN bytes */
  48. #define TX_HEADER_LEN \
  49. (sizeof(struct fw_ofld_tx_data_wr) + sizeof(struct sge_opaque_hdr))
  50. #define TX_TLSHDR_LEN \
  51. (sizeof(struct fw_tlstx_data_wr) + sizeof(struct cpl_tx_tls_sfo) + \
  52. sizeof(struct sge_opaque_hdr))
  53. #define TXDATA_SKB_LEN 128
  54. enum {
  55. CPL_TX_TLS_SFO_TYPE_CCS,
  56. CPL_TX_TLS_SFO_TYPE_ALERT,
  57. CPL_TX_TLS_SFO_TYPE_HANDSHAKE,
  58. CPL_TX_TLS_SFO_TYPE_DATA,
  59. CPL_TX_TLS_SFO_TYPE_HEARTBEAT,
  60. };
  61. enum {
  62. TLS_HDR_TYPE_CCS = 20,
  63. TLS_HDR_TYPE_ALERT,
  64. TLS_HDR_TYPE_HANDSHAKE,
  65. TLS_HDR_TYPE_RECORD,
  66. TLS_HDR_TYPE_HEARTBEAT,
  67. };
  68. typedef void (*defer_handler_t)(struct chtls_dev *dev, struct sk_buff *skb);
  69. extern struct request_sock_ops chtls_rsk_ops;
  70. struct deferred_skb_cb {
  71. defer_handler_t handler;
  72. struct chtls_dev *dev;
  73. };
  74. #define DEFERRED_SKB_CB(skb) ((struct deferred_skb_cb *)(skb)->cb)
  75. #define failover_flowc_wr_len offsetof(struct fw_flowc_wr, mnemval[3])
  76. #define WR_SKB_CB(skb) ((struct wr_skb_cb *)(skb)->cb)
  77. #define ACCEPT_QUEUE(sk) (&inet_csk(sk)->icsk_accept_queue.rskq_accept_head)
  78. #define SND_WSCALE(tp) ((tp)->rx_opt.snd_wscale)
  79. #define RCV_WSCALE(tp) ((tp)->rx_opt.rcv_wscale)
  80. #define USER_MSS(tp) ((tp)->rx_opt.user_mss)
  81. #define TS_RECENT_STAMP(tp) ((tp)->rx_opt.ts_recent_stamp)
  82. #define WSCALE_OK(tp) ((tp)->rx_opt.wscale_ok)
  83. #define TSTAMP_OK(tp) ((tp)->rx_opt.tstamp_ok)
  84. #define SACK_OK(tp) ((tp)->rx_opt.sack_ok)
  85. #define INC_ORPHAN_COUNT(sk) percpu_counter_inc((sk)->sk_prot->orphan_count)
  86. /* TLS SKB */
  87. #define skb_ulp_tls_inline(skb) (ULP_SKB_CB(skb)->ulp.tls.ofld)
  88. #define skb_ulp_tls_iv_imm(skb) (ULP_SKB_CB(skb)->ulp.tls.iv)
  89. void chtls_defer_reply(struct sk_buff *skb, struct chtls_dev *dev,
  90. defer_handler_t handler);
  91. /*
  92. * Returns true if the socket is in one of the supplied states.
  93. */
  94. static inline unsigned int sk_in_state(const struct sock *sk,
  95. unsigned int states)
  96. {
  97. return states & (1 << sk->sk_state);
  98. }
  99. static void chtls_rsk_destructor(struct request_sock *req)
  100. {
  101. /* do nothing */
  102. }
  103. static inline void chtls_init_rsk_ops(struct proto *chtls_tcp_prot,
  104. struct request_sock_ops *chtls_tcp_ops,
  105. struct proto *tcp_prot, int family)
  106. {
  107. memset(chtls_tcp_ops, 0, sizeof(*chtls_tcp_ops));
  108. chtls_tcp_ops->family = family;
  109. chtls_tcp_ops->obj_size = sizeof(struct tcp_request_sock);
  110. chtls_tcp_ops->destructor = chtls_rsk_destructor;
  111. chtls_tcp_ops->slab = tcp_prot->rsk_prot->slab;
  112. chtls_tcp_prot->rsk_prot = chtls_tcp_ops;
  113. }
  114. static inline void chtls_reqsk_free(struct request_sock *req)
  115. {
  116. if (req->rsk_listener)
  117. sock_put(req->rsk_listener);
  118. kmem_cache_free(req->rsk_ops->slab, req);
  119. }
  120. #define DECLARE_TASK_FUNC(task, task_param) \
  121. static void task(struct work_struct *task_param)
  122. static inline void sk_wakeup_sleepers(struct sock *sk, bool interruptable)
  123. {
  124. struct socket_wq *wq;
  125. rcu_read_lock();
  126. wq = rcu_dereference(sk->sk_wq);
  127. if (skwq_has_sleeper(wq)) {
  128. if (interruptable)
  129. wake_up_interruptible(sk_sleep(sk));
  130. else
  131. wake_up_all(sk_sleep(sk));
  132. }
  133. rcu_read_unlock();
  134. }
  135. static inline void chtls_set_req_port(struct request_sock *oreq,
  136. __be16 source, __be16 dest)
  137. {
  138. inet_rsk(oreq)->ir_rmt_port = source;
  139. inet_rsk(oreq)->ir_num = ntohs(dest);
  140. }
  141. static inline void chtls_set_req_addr(struct request_sock *oreq,
  142. __be32 local_ip, __be32 peer_ip)
  143. {
  144. inet_rsk(oreq)->ir_loc_addr = local_ip;
  145. inet_rsk(oreq)->ir_rmt_addr = peer_ip;
  146. }
  147. static inline void chtls_free_skb(struct sock *sk, struct sk_buff *skb)
  148. {
  149. skb_dst_set(skb, NULL);
  150. __skb_unlink(skb, &sk->sk_receive_queue);
  151. __kfree_skb(skb);
  152. }
  153. static inline void chtls_kfree_skb(struct sock *sk, struct sk_buff *skb)
  154. {
  155. skb_dst_set(skb, NULL);
  156. __skb_unlink(skb, &sk->sk_receive_queue);
  157. kfree_skb(skb);
  158. }
  159. static inline void enqueue_wr(struct chtls_sock *csk, struct sk_buff *skb)
  160. {
  161. WR_SKB_CB(skb)->next_wr = NULL;
  162. skb_get(skb);
  163. if (!csk->wr_skb_head)
  164. csk->wr_skb_head = skb;
  165. else
  166. WR_SKB_CB(csk->wr_skb_tail)->next_wr = skb;
  167. csk->wr_skb_tail = skb;
  168. }
  169. #endif