t4_msg.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  1. /*
  2. * This file is part of the Chelsio T4 Ethernet driver for Linux.
  3. *
  4. * Copyright (c) 2003-2014 Chelsio Communications, Inc. All rights reserved.
  5. *
  6. * This software is available to you under a choice of one of two
  7. * licenses. You may choose to be licensed under the terms of the GNU
  8. * General Public License (GPL) Version 2, available from the file
  9. * COPYING in the main directory of this source tree, or the
  10. * OpenIB.org BSD license below:
  11. *
  12. * Redistribution and use in source and binary forms, with or
  13. * without modification, are permitted provided that the following
  14. * conditions are met:
  15. *
  16. * - Redistributions of source code must retain the above
  17. * copyright notice, this list of conditions and the following
  18. * disclaimer.
  19. *
  20. * - Redistributions in binary form must reproduce the above
  21. * copyright notice, this list of conditions and the following
  22. * disclaimer in the documentation and/or other materials
  23. * provided with the distribution.
  24. *
  25. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  26. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  27. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  28. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  29. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  30. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  31. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  32. * SOFTWARE.
  33. */
  34. #ifndef __T4_MSG_H
  35. #define __T4_MSG_H
  36. #include <linux/types.h>
  37. enum {
  38. CPL_PASS_OPEN_REQ = 0x1,
  39. CPL_PASS_ACCEPT_RPL = 0x2,
  40. CPL_ACT_OPEN_REQ = 0x3,
  41. CPL_SET_TCB_FIELD = 0x5,
  42. CPL_GET_TCB = 0x6,
  43. CPL_CLOSE_CON_REQ = 0x8,
  44. CPL_CLOSE_LISTSRV_REQ = 0x9,
  45. CPL_ABORT_REQ = 0xA,
  46. CPL_ABORT_RPL = 0xB,
  47. CPL_RX_DATA_ACK = 0xD,
  48. CPL_TX_PKT = 0xE,
  49. CPL_L2T_WRITE_REQ = 0x12,
  50. CPL_TID_RELEASE = 0x1A,
  51. CPL_CLOSE_LISTSRV_RPL = 0x20,
  52. CPL_L2T_WRITE_RPL = 0x23,
  53. CPL_PASS_OPEN_RPL = 0x24,
  54. CPL_ACT_OPEN_RPL = 0x25,
  55. CPL_PEER_CLOSE = 0x26,
  56. CPL_ABORT_REQ_RSS = 0x2B,
  57. CPL_ABORT_RPL_RSS = 0x2D,
  58. CPL_CLOSE_CON_RPL = 0x32,
  59. CPL_ISCSI_HDR = 0x33,
  60. CPL_RDMA_CQE = 0x35,
  61. CPL_RDMA_CQE_READ_RSP = 0x36,
  62. CPL_RDMA_CQE_ERR = 0x37,
  63. CPL_RX_DATA = 0x39,
  64. CPL_SET_TCB_RPL = 0x3A,
  65. CPL_RX_PKT = 0x3B,
  66. CPL_RX_DDP_COMPLETE = 0x3F,
  67. CPL_ACT_ESTABLISH = 0x40,
  68. CPL_PASS_ESTABLISH = 0x41,
  69. CPL_RX_DATA_DDP = 0x42,
  70. CPL_PASS_ACCEPT_REQ = 0x44,
  71. CPL_TRACE_PKT_T5 = 0x48,
  72. CPL_RX_ISCSI_DDP = 0x49,
  73. CPL_RDMA_READ_REQ = 0x60,
  74. CPL_PASS_OPEN_REQ6 = 0x81,
  75. CPL_ACT_OPEN_REQ6 = 0x83,
  76. CPL_RDMA_TERMINATE = 0xA2,
  77. CPL_RDMA_WRITE = 0xA4,
  78. CPL_SGE_EGR_UPDATE = 0xA5,
  79. CPL_TRACE_PKT = 0xB0,
  80. CPL_ISCSI_DATA = 0xB2,
  81. CPL_FW4_MSG = 0xC0,
  82. CPL_FW4_PLD = 0xC1,
  83. CPL_FW4_ACK = 0xC3,
  84. CPL_FW6_MSG = 0xE0,
  85. CPL_FW6_PLD = 0xE1,
  86. CPL_TX_PKT_LSO = 0xED,
  87. CPL_TX_PKT_XT = 0xEE,
  88. NUM_CPL_CMDS
  89. };
  90. enum CPL_error {
  91. CPL_ERR_NONE = 0,
  92. CPL_ERR_TCAM_FULL = 3,
  93. CPL_ERR_BAD_LENGTH = 15,
  94. CPL_ERR_BAD_ROUTE = 18,
  95. CPL_ERR_CONN_RESET = 20,
  96. CPL_ERR_CONN_EXIST_SYNRECV = 21,
  97. CPL_ERR_CONN_EXIST = 22,
  98. CPL_ERR_ARP_MISS = 23,
  99. CPL_ERR_BAD_SYN = 24,
  100. CPL_ERR_CONN_TIMEDOUT = 30,
  101. CPL_ERR_XMIT_TIMEDOUT = 31,
  102. CPL_ERR_PERSIST_TIMEDOUT = 32,
  103. CPL_ERR_FINWAIT2_TIMEDOUT = 33,
  104. CPL_ERR_KEEPALIVE_TIMEDOUT = 34,
  105. CPL_ERR_RTX_NEG_ADVICE = 35,
  106. CPL_ERR_PERSIST_NEG_ADVICE = 36,
  107. CPL_ERR_KEEPALV_NEG_ADVICE = 37,
  108. CPL_ERR_ABORT_FAILED = 42,
  109. CPL_ERR_IWARP_FLM = 50,
  110. };
  111. enum {
  112. ULP_MODE_NONE = 0,
  113. ULP_MODE_ISCSI = 2,
  114. ULP_MODE_RDMA = 4,
  115. ULP_MODE_TCPDDP = 5,
  116. ULP_MODE_FCOE = 6,
  117. };
  118. enum {
  119. ULP_CRC_HEADER = 1 << 0,
  120. ULP_CRC_DATA = 1 << 1
  121. };
  122. enum {
  123. CPL_ABORT_SEND_RST = 0,
  124. CPL_ABORT_NO_RST,
  125. };
  126. enum { /* TX_PKT_XT checksum types */
  127. TX_CSUM_TCP = 0,
  128. TX_CSUM_UDP = 1,
  129. TX_CSUM_CRC16 = 4,
  130. TX_CSUM_CRC32 = 5,
  131. TX_CSUM_CRC32C = 6,
  132. TX_CSUM_FCOE = 7,
  133. TX_CSUM_TCPIP = 8,
  134. TX_CSUM_UDPIP = 9,
  135. TX_CSUM_TCPIP6 = 10,
  136. TX_CSUM_UDPIP6 = 11,
  137. TX_CSUM_IP = 12,
  138. };
  139. union opcode_tid {
  140. __be32 opcode_tid;
  141. u8 opcode;
  142. };
  143. #define CPL_OPCODE(x) ((x) << 24)
  144. #define G_CPL_OPCODE(x) (((x) >> 24) & 0xFF)
  145. #define MK_OPCODE_TID(opcode, tid) (CPL_OPCODE(opcode) | (tid))
  146. #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
  147. #define GET_TID(cmd) (ntohl(OPCODE_TID(cmd)) & 0xFFFFFF)
  148. /* partitioning of TID fields that also carry a queue id */
  149. #define GET_TID_TID(x) ((x) & 0x3fff)
  150. #define GET_TID_QID(x) (((x) >> 14) & 0x3ff)
  151. #define TID_QID(x) ((x) << 14)
  152. struct rss_header {
  153. u8 opcode;
  154. #if defined(__LITTLE_ENDIAN_BITFIELD)
  155. u8 channel:2;
  156. u8 filter_hit:1;
  157. u8 filter_tid:1;
  158. u8 hash_type:2;
  159. u8 ipv6:1;
  160. u8 send2fw:1;
  161. #else
  162. u8 send2fw:1;
  163. u8 ipv6:1;
  164. u8 hash_type:2;
  165. u8 filter_tid:1;
  166. u8 filter_hit:1;
  167. u8 channel:2;
  168. #endif
  169. __be16 qid;
  170. __be32 hash_val;
  171. };
  172. struct work_request_hdr {
  173. __be32 wr_hi;
  174. __be32 wr_mid;
  175. __be64 wr_lo;
  176. };
  177. /* wr_hi fields */
  178. #define S_WR_OP 24
  179. #define V_WR_OP(x) ((__u64)(x) << S_WR_OP)
  180. #define WR_HDR struct work_request_hdr wr
  181. /* option 0 fields */
  182. #define S_MSS_IDX 60
  183. #define M_MSS_IDX 0xF
  184. #define V_MSS_IDX(x) ((__u64)(x) << S_MSS_IDX)
  185. #define G_MSS_IDX(x) (((x) >> S_MSS_IDX) & M_MSS_IDX)
  186. /* option 2 fields */
  187. #define S_RSS_QUEUE 0
  188. #define M_RSS_QUEUE 0x3FF
  189. #define V_RSS_QUEUE(x) ((x) << S_RSS_QUEUE)
  190. #define G_RSS_QUEUE(x) (((x) >> S_RSS_QUEUE) & M_RSS_QUEUE)
  191. struct cpl_pass_open_req {
  192. WR_HDR;
  193. union opcode_tid ot;
  194. __be16 local_port;
  195. __be16 peer_port;
  196. __be32 local_ip;
  197. __be32 peer_ip;
  198. __be64 opt0;
  199. #define TX_CHAN(x) ((x) << 2)
  200. #define NO_CONG(x) ((x) << 4)
  201. #define DELACK(x) ((x) << 5)
  202. #define ULP_MODE(x) ((x) << 8)
  203. #define RCV_BUFSIZ(x) ((x) << 12)
  204. #define RCV_BUFSIZ_MASK 0x3FFU
  205. #define DSCP(x) ((x) << 22)
  206. #define SMAC_SEL(x) ((u64)(x) << 28)
  207. #define L2T_IDX(x) ((u64)(x) << 36)
  208. #define TCAM_BYPASS(x) ((u64)(x) << 48)
  209. #define NAGLE(x) ((u64)(x) << 49)
  210. #define WND_SCALE(x) ((u64)(x) << 50)
  211. #define KEEP_ALIVE(x) ((u64)(x) << 54)
  212. #define MSS_IDX(x) ((u64)(x) << 60)
  213. __be64 opt1;
  214. #define SYN_RSS_ENABLE (1 << 0)
  215. #define SYN_RSS_QUEUE(x) ((x) << 2)
  216. #define CONN_POLICY_ASK (1 << 22)
  217. };
  218. struct cpl_pass_open_req6 {
  219. WR_HDR;
  220. union opcode_tid ot;
  221. __be16 local_port;
  222. __be16 peer_port;
  223. __be64 local_ip_hi;
  224. __be64 local_ip_lo;
  225. __be64 peer_ip_hi;
  226. __be64 peer_ip_lo;
  227. __be64 opt0;
  228. __be64 opt1;
  229. };
  230. struct cpl_pass_open_rpl {
  231. union opcode_tid ot;
  232. u8 rsvd[3];
  233. u8 status;
  234. };
  235. struct cpl_pass_accept_rpl {
  236. WR_HDR;
  237. union opcode_tid ot;
  238. __be32 opt2;
  239. #define RSS_QUEUE(x) ((x) << 0)
  240. #define RSS_QUEUE_VALID (1 << 10)
  241. #define RX_COALESCE_VALID(x) ((x) << 11)
  242. #define RX_COALESCE(x) ((x) << 12)
  243. #define PACE(x) ((x) << 16)
  244. #define RX_FC_VALID ((1U) << 19)
  245. #define RX_FC_DISABLE ((1U) << 20)
  246. #define TX_QUEUE(x) ((x) << 23)
  247. #define RX_CHANNEL(x) ((x) << 26)
  248. #define CCTRL_ECN(x) ((x) << 27)
  249. #define WND_SCALE_EN(x) ((x) << 28)
  250. #define TSTAMPS_EN(x) ((x) << 29)
  251. #define SACK_EN(x) ((x) << 30)
  252. #define T5_OPT_2_VALID ((1U) << 31)
  253. __be64 opt0;
  254. };
  255. struct cpl_t5_pass_accept_rpl {
  256. WR_HDR;
  257. union opcode_tid ot;
  258. __be32 opt2;
  259. __be64 opt0;
  260. __be32 iss;
  261. __be32 rsvd;
  262. };
  263. struct cpl_act_open_req {
  264. WR_HDR;
  265. union opcode_tid ot;
  266. __be16 local_port;
  267. __be16 peer_port;
  268. __be32 local_ip;
  269. __be32 peer_ip;
  270. __be64 opt0;
  271. __be32 params;
  272. __be32 opt2;
  273. };
  274. #define S_FILTER_TUPLE 24
  275. #define M_FILTER_TUPLE 0xFFFFFFFFFF
  276. #define V_FILTER_TUPLE(x) ((x) << S_FILTER_TUPLE)
  277. #define G_FILTER_TUPLE(x) (((x) >> S_FILTER_TUPLE) & M_FILTER_TUPLE)
  278. struct cpl_t5_act_open_req {
  279. WR_HDR;
  280. union opcode_tid ot;
  281. __be16 local_port;
  282. __be16 peer_port;
  283. __be32 local_ip;
  284. __be32 peer_ip;
  285. __be64 opt0;
  286. __be32 rsvd;
  287. __be32 opt2;
  288. __be64 params;
  289. };
  290. struct cpl_act_open_req6 {
  291. WR_HDR;
  292. union opcode_tid ot;
  293. __be16 local_port;
  294. __be16 peer_port;
  295. __be64 local_ip_hi;
  296. __be64 local_ip_lo;
  297. __be64 peer_ip_hi;
  298. __be64 peer_ip_lo;
  299. __be64 opt0;
  300. __be32 params;
  301. __be32 opt2;
  302. };
  303. struct cpl_t5_act_open_req6 {
  304. WR_HDR;
  305. union opcode_tid ot;
  306. __be16 local_port;
  307. __be16 peer_port;
  308. __be64 local_ip_hi;
  309. __be64 local_ip_lo;
  310. __be64 peer_ip_hi;
  311. __be64 peer_ip_lo;
  312. __be64 opt0;
  313. __be32 rsvd;
  314. __be32 opt2;
  315. __be64 params;
  316. };
  317. struct cpl_act_open_rpl {
  318. union opcode_tid ot;
  319. __be32 atid_status;
  320. #define GET_AOPEN_STATUS(x) ((x) & 0xff)
  321. #define GET_AOPEN_ATID(x) (((x) >> 8) & 0xffffff)
  322. };
  323. struct cpl_pass_establish {
  324. union opcode_tid ot;
  325. __be32 rsvd;
  326. __be32 tos_stid;
  327. #define PASS_OPEN_TID(x) ((x) << 0)
  328. #define PASS_OPEN_TOS(x) ((x) << 24)
  329. #define GET_PASS_OPEN_TID(x) (((x) >> 0) & 0xFFFFFF)
  330. #define GET_POPEN_TID(x) ((x) & 0xffffff)
  331. #define GET_POPEN_TOS(x) (((x) >> 24) & 0xff)
  332. __be16 mac_idx;
  333. __be16 tcp_opt;
  334. #define GET_TCPOPT_WSCALE_OK(x) (((x) >> 5) & 1)
  335. #define GET_TCPOPT_SACK(x) (((x) >> 6) & 1)
  336. #define GET_TCPOPT_TSTAMP(x) (((x) >> 7) & 1)
  337. #define GET_TCPOPT_SND_WSCALE(x) (((x) >> 8) & 0xf)
  338. #define GET_TCPOPT_MSS(x) (((x) >> 12) & 0xf)
  339. __be32 snd_isn;
  340. __be32 rcv_isn;
  341. };
  342. struct cpl_act_establish {
  343. union opcode_tid ot;
  344. __be32 rsvd;
  345. __be32 tos_atid;
  346. __be16 mac_idx;
  347. __be16 tcp_opt;
  348. __be32 snd_isn;
  349. __be32 rcv_isn;
  350. };
  351. struct cpl_get_tcb {
  352. WR_HDR;
  353. union opcode_tid ot;
  354. __be16 reply_ctrl;
  355. #define QUEUENO(x) ((x) << 0)
  356. #define REPLY_CHAN(x) ((x) << 14)
  357. #define NO_REPLY(x) ((x) << 15)
  358. __be16 cookie;
  359. };
  360. struct cpl_set_tcb_field {
  361. WR_HDR;
  362. union opcode_tid ot;
  363. __be16 reply_ctrl;
  364. __be16 word_cookie;
  365. #define TCB_WORD(x) ((x) << 0)
  366. #define TCB_COOKIE(x) ((x) << 5)
  367. #define GET_TCB_COOKIE(x) (((x) >> 5) & 7)
  368. __be64 mask;
  369. __be64 val;
  370. };
  371. struct cpl_set_tcb_rpl {
  372. union opcode_tid ot;
  373. __be16 rsvd;
  374. u8 cookie;
  375. u8 status;
  376. __be64 oldval;
  377. };
  378. struct cpl_close_con_req {
  379. WR_HDR;
  380. union opcode_tid ot;
  381. __be32 rsvd;
  382. };
  383. struct cpl_close_con_rpl {
  384. union opcode_tid ot;
  385. u8 rsvd[3];
  386. u8 status;
  387. __be32 snd_nxt;
  388. __be32 rcv_nxt;
  389. };
  390. struct cpl_close_listsvr_req {
  391. WR_HDR;
  392. union opcode_tid ot;
  393. __be16 reply_ctrl;
  394. #define LISTSVR_IPV6(x) ((x) << 14)
  395. __be16 rsvd;
  396. };
  397. struct cpl_close_listsvr_rpl {
  398. union opcode_tid ot;
  399. u8 rsvd[3];
  400. u8 status;
  401. };
  402. struct cpl_abort_req_rss {
  403. union opcode_tid ot;
  404. u8 rsvd[3];
  405. u8 status;
  406. };
  407. struct cpl_abort_req {
  408. WR_HDR;
  409. union opcode_tid ot;
  410. __be32 rsvd0;
  411. u8 rsvd1;
  412. u8 cmd;
  413. u8 rsvd2[6];
  414. };
  415. struct cpl_abort_rpl_rss {
  416. union opcode_tid ot;
  417. u8 rsvd[3];
  418. u8 status;
  419. };
  420. struct cpl_abort_rpl {
  421. WR_HDR;
  422. union opcode_tid ot;
  423. __be32 rsvd0;
  424. u8 rsvd1;
  425. u8 cmd;
  426. u8 rsvd2[6];
  427. };
  428. struct cpl_peer_close {
  429. union opcode_tid ot;
  430. __be32 rcv_nxt;
  431. };
  432. struct cpl_tid_release {
  433. WR_HDR;
  434. union opcode_tid ot;
  435. __be32 rsvd;
  436. };
  437. struct cpl_tx_pkt_core {
  438. __be32 ctrl0;
  439. #define TXPKT_VF(x) ((x) << 0)
  440. #define TXPKT_PF(x) ((x) << 8)
  441. #define TXPKT_VF_VLD (1 << 11)
  442. #define TXPKT_OVLAN_IDX(x) ((x) << 12)
  443. #define TXPKT_INTF(x) ((x) << 16)
  444. #define TXPKT_INS_OVLAN (1 << 21)
  445. #define TXPKT_OPCODE(x) ((x) << 24)
  446. __be16 pack;
  447. __be16 len;
  448. __be64 ctrl1;
  449. #define TXPKT_CSUM_END(x) ((x) << 12)
  450. #define TXPKT_CSUM_START(x) ((x) << 20)
  451. #define TXPKT_IPHDR_LEN(x) ((u64)(x) << 20)
  452. #define TXPKT_CSUM_LOC(x) ((u64)(x) << 30)
  453. #define TXPKT_ETHHDR_LEN(x) ((u64)(x) << 34)
  454. #define TXPKT_CSUM_TYPE(x) ((u64)(x) << 40)
  455. #define TXPKT_VLAN(x) ((u64)(x) << 44)
  456. #define TXPKT_VLAN_VLD (1ULL << 60)
  457. #define TXPKT_IPCSUM_DIS (1ULL << 62)
  458. #define TXPKT_L4CSUM_DIS (1ULL << 63)
  459. };
  460. struct cpl_tx_pkt {
  461. WR_HDR;
  462. struct cpl_tx_pkt_core c;
  463. };
  464. #define cpl_tx_pkt_xt cpl_tx_pkt
  465. struct cpl_tx_pkt_lso_core {
  466. __be32 lso_ctrl;
  467. #define LSO_TCPHDR_LEN(x) ((x) << 0)
  468. #define LSO_IPHDR_LEN(x) ((x) << 4)
  469. #define LSO_ETHHDR_LEN(x) ((x) << 16)
  470. #define LSO_IPV6(x) ((x) << 20)
  471. #define LSO_LAST_SLICE (1 << 22)
  472. #define LSO_FIRST_SLICE (1 << 23)
  473. #define LSO_OPCODE(x) ((x) << 24)
  474. __be16 ipid_ofst;
  475. __be16 mss;
  476. __be32 seqno_offset;
  477. __be32 len;
  478. /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
  479. };
  480. struct cpl_tx_pkt_lso {
  481. WR_HDR;
  482. struct cpl_tx_pkt_lso_core c;
  483. /* encapsulated CPL (TX_PKT, TX_PKT_XT or TX_DATA) follows here */
  484. };
  485. struct cpl_iscsi_hdr {
  486. union opcode_tid ot;
  487. __be16 pdu_len_ddp;
  488. #define ISCSI_PDU_LEN(x) ((x) & 0x7FFF)
  489. #define ISCSI_DDP (1 << 15)
  490. __be16 len;
  491. __be32 seq;
  492. __be16 urg;
  493. u8 rsvd;
  494. u8 status;
  495. };
  496. struct cpl_rx_data {
  497. union opcode_tid ot;
  498. __be16 rsvd;
  499. __be16 len;
  500. __be32 seq;
  501. __be16 urg;
  502. #if defined(__LITTLE_ENDIAN_BITFIELD)
  503. u8 dack_mode:2;
  504. u8 psh:1;
  505. u8 heartbeat:1;
  506. u8 ddp_off:1;
  507. u8 :3;
  508. #else
  509. u8 :3;
  510. u8 ddp_off:1;
  511. u8 heartbeat:1;
  512. u8 psh:1;
  513. u8 dack_mode:2;
  514. #endif
  515. u8 status;
  516. };
  517. struct cpl_rx_data_ack {
  518. WR_HDR;
  519. union opcode_tid ot;
  520. __be32 credit_dack;
  521. #define RX_CREDITS(x) ((x) << 0)
  522. #define RX_FORCE_ACK(x) ((x) << 28)
  523. };
  524. struct cpl_rx_pkt {
  525. struct rss_header rsshdr;
  526. u8 opcode;
  527. #if defined(__LITTLE_ENDIAN_BITFIELD)
  528. u8 iff:4;
  529. u8 csum_calc:1;
  530. u8 ipmi_pkt:1;
  531. u8 vlan_ex:1;
  532. u8 ip_frag:1;
  533. #else
  534. u8 ip_frag:1;
  535. u8 vlan_ex:1;
  536. u8 ipmi_pkt:1;
  537. u8 csum_calc:1;
  538. u8 iff:4;
  539. #endif
  540. __be16 csum;
  541. __be16 vlan;
  542. __be16 len;
  543. __be32 l2info;
  544. #define RXF_UDP (1 << 22)
  545. #define RXF_TCP (1 << 23)
  546. #define RXF_IP (1 << 24)
  547. #define RXF_IP6 (1 << 25)
  548. __be16 hdr_len;
  549. __be16 err_vec;
  550. };
  551. /* rx_pkt.l2info fields */
  552. #define S_RX_ETHHDR_LEN 0
  553. #define M_RX_ETHHDR_LEN 0x1F
  554. #define V_RX_ETHHDR_LEN(x) ((x) << S_RX_ETHHDR_LEN)
  555. #define G_RX_ETHHDR_LEN(x) (((x) >> S_RX_ETHHDR_LEN) & M_RX_ETHHDR_LEN)
  556. #define S_RX_T5_ETHHDR_LEN 0
  557. #define M_RX_T5_ETHHDR_LEN 0x3F
  558. #define V_RX_T5_ETHHDR_LEN(x) ((x) << S_RX_T5_ETHHDR_LEN)
  559. #define G_RX_T5_ETHHDR_LEN(x) (((x) >> S_RX_T5_ETHHDR_LEN) & M_RX_T5_ETHHDR_LEN)
  560. #define S_RX_MACIDX 8
  561. #define M_RX_MACIDX 0x1FF
  562. #define V_RX_MACIDX(x) ((x) << S_RX_MACIDX)
  563. #define G_RX_MACIDX(x) (((x) >> S_RX_MACIDX) & M_RX_MACIDX)
  564. #define S_RXF_SYN 21
  565. #define V_RXF_SYN(x) ((x) << S_RXF_SYN)
  566. #define F_RXF_SYN V_RXF_SYN(1U)
  567. #define S_RX_CHAN 28
  568. #define M_RX_CHAN 0xF
  569. #define V_RX_CHAN(x) ((x) << S_RX_CHAN)
  570. #define G_RX_CHAN(x) (((x) >> S_RX_CHAN) & M_RX_CHAN)
  571. /* rx_pkt.hdr_len fields */
  572. #define S_RX_TCPHDR_LEN 0
  573. #define M_RX_TCPHDR_LEN 0x3F
  574. #define V_RX_TCPHDR_LEN(x) ((x) << S_RX_TCPHDR_LEN)
  575. #define G_RX_TCPHDR_LEN(x) (((x) >> S_RX_TCPHDR_LEN) & M_RX_TCPHDR_LEN)
  576. #define S_RX_IPHDR_LEN 6
  577. #define M_RX_IPHDR_LEN 0x3FF
  578. #define V_RX_IPHDR_LEN(x) ((x) << S_RX_IPHDR_LEN)
  579. #define G_RX_IPHDR_LEN(x) (((x) >> S_RX_IPHDR_LEN) & M_RX_IPHDR_LEN)
  580. struct cpl_trace_pkt {
  581. u8 opcode;
  582. u8 intf;
  583. #if defined(__LITTLE_ENDIAN_BITFIELD)
  584. u8 runt:4;
  585. u8 filter_hit:4;
  586. u8 :6;
  587. u8 err:1;
  588. u8 trunc:1;
  589. #else
  590. u8 filter_hit:4;
  591. u8 runt:4;
  592. u8 trunc:1;
  593. u8 err:1;
  594. u8 :6;
  595. #endif
  596. __be16 rsvd;
  597. __be16 len;
  598. __be64 tstamp;
  599. };
  600. struct cpl_t5_trace_pkt {
  601. __u8 opcode;
  602. __u8 intf;
  603. #if defined(__LITTLE_ENDIAN_BITFIELD)
  604. __u8 runt:4;
  605. __u8 filter_hit:4;
  606. __u8:6;
  607. __u8 err:1;
  608. __u8 trunc:1;
  609. #else
  610. __u8 filter_hit:4;
  611. __u8 runt:4;
  612. __u8 trunc:1;
  613. __u8 err:1;
  614. __u8:6;
  615. #endif
  616. __be16 rsvd;
  617. __be16 len;
  618. __be64 tstamp;
  619. __be64 rsvd1;
  620. };
  621. struct cpl_l2t_write_req {
  622. WR_HDR;
  623. union opcode_tid ot;
  624. __be16 params;
  625. #define L2T_W_INFO(x) ((x) << 2)
  626. #define L2T_W_PORT(x) ((x) << 8)
  627. #define L2T_W_NOREPLY(x) ((x) << 15)
  628. __be16 l2t_idx;
  629. __be16 vlan;
  630. u8 dst_mac[6];
  631. };
  632. struct cpl_l2t_write_rpl {
  633. union opcode_tid ot;
  634. u8 status;
  635. u8 rsvd[3];
  636. };
  637. struct cpl_rdma_terminate {
  638. union opcode_tid ot;
  639. __be16 rsvd;
  640. __be16 len;
  641. };
  642. struct cpl_sge_egr_update {
  643. __be32 opcode_qid;
  644. #define EGR_QID(x) ((x) & 0x1FFFF)
  645. __be16 cidx;
  646. __be16 pidx;
  647. };
  648. /* cpl_fw*.type values */
  649. enum {
  650. FW_TYPE_CMD_RPL = 0,
  651. FW_TYPE_WR_RPL = 1,
  652. FW_TYPE_CQE = 2,
  653. FW_TYPE_OFLD_CONNECTION_WR_RPL = 3,
  654. FW_TYPE_RSSCPL = 4,
  655. };
  656. struct cpl_fw4_pld {
  657. u8 opcode;
  658. u8 rsvd0[3];
  659. u8 type;
  660. u8 rsvd1;
  661. __be16 len;
  662. __be64 data;
  663. __be64 rsvd2;
  664. };
  665. struct cpl_fw6_pld {
  666. u8 opcode;
  667. u8 rsvd[5];
  668. __be16 len;
  669. __be64 data[4];
  670. };
  671. struct cpl_fw4_msg {
  672. u8 opcode;
  673. u8 type;
  674. __be16 rsvd0;
  675. __be32 rsvd1;
  676. __be64 data[2];
  677. };
  678. struct cpl_fw4_ack {
  679. union opcode_tid ot;
  680. u8 credits;
  681. u8 rsvd0[2];
  682. u8 seq_vld;
  683. __be32 snd_nxt;
  684. __be32 snd_una;
  685. __be64 rsvd1;
  686. };
  687. struct cpl_fw6_msg {
  688. u8 opcode;
  689. u8 type;
  690. __be16 rsvd0;
  691. __be32 rsvd1;
  692. __be64 data[4];
  693. };
  694. /* cpl_fw6_msg.type values */
  695. enum {
  696. FW6_TYPE_CMD_RPL = 0,
  697. FW6_TYPE_WR_RPL = 1,
  698. FW6_TYPE_CQE = 2,
  699. FW6_TYPE_OFLD_CONNECTION_WR_RPL = 3,
  700. FW6_TYPE_RSSCPL = FW_TYPE_RSSCPL,
  701. };
  702. struct cpl_fw6_msg_ofld_connection_wr_rpl {
  703. __u64 cookie;
  704. __be32 tid; /* or atid in case of active failure */
  705. __u8 t_state;
  706. __u8 retval;
  707. __u8 rsvd[2];
  708. };
  709. enum {
  710. ULP_TX_MEM_READ = 2,
  711. ULP_TX_MEM_WRITE = 3,
  712. ULP_TX_PKT = 4
  713. };
  714. enum {
  715. ULP_TX_SC_NOOP = 0x80,
  716. ULP_TX_SC_IMM = 0x81,
  717. ULP_TX_SC_DSGL = 0x82,
  718. ULP_TX_SC_ISGL = 0x83
  719. };
  720. struct ulptx_sge_pair {
  721. __be32 len[2];
  722. __be64 addr[2];
  723. };
  724. struct ulptx_sgl {
  725. __be32 cmd_nsge;
  726. #define ULPTX_CMD(x) ((x) << 24)
  727. #define ULPTX_NSGE(x) ((x) << 0)
  728. #define ULPTX_MORE (1U << 23)
  729. __be32 len0;
  730. __be64 addr0;
  731. struct ulptx_sge_pair sge[0];
  732. };
  733. struct ulp_mem_io {
  734. WR_HDR;
  735. __be32 cmd;
  736. #define ULP_MEMIO_ORDER(x) ((x) << 23)
  737. __be32 len16; /* command length */
  738. __be32 dlen; /* data length in 32-byte units */
  739. #define ULP_MEMIO_DATA_LEN(x) ((x) << 0)
  740. __be32 lock_addr;
  741. #define ULP_MEMIO_ADDR(x) ((x) << 0)
  742. #define ULP_MEMIO_LOCK(x) ((x) << 31)
  743. };
  744. #define S_T5_ULP_MEMIO_IMM 23
  745. #define V_T5_ULP_MEMIO_IMM(x) ((x) << S_T5_ULP_MEMIO_IMM)
  746. #define F_T5_ULP_MEMIO_IMM V_T5_ULP_MEMIO_IMM(1U)
  747. #define S_T5_ULP_MEMIO_ORDER 22
  748. #define V_T5_ULP_MEMIO_ORDER(x) ((x) << S_T5_ULP_MEMIO_ORDER)
  749. #define F_T5_ULP_MEMIO_ORDER V_T5_ULP_MEMIO_ORDER(1U)
  750. #endif /* __T4_MSG_H */