t3_cpl.h 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444
  1. /*
  2. * Copyright (c) 2004-2007 Chelsio, Inc. All rights reserved.
  3. *
  4. * This software is available to you under a choice of one of two
  5. * licenses. You may choose to be licensed under the terms of the GNU
  6. * General Public License (GPL) Version 2, available from the file
  7. * COPYING in the main directory of this source tree, or the
  8. * OpenIB.org BSD license below:
  9. *
  10. * Redistribution and use in source and binary forms, with or
  11. * without modification, are permitted provided that the following
  12. * conditions are met:
  13. *
  14. * - Redistributions of source code must retain the above
  15. * copyright notice, this list of conditions and the following
  16. * disclaimer.
  17. *
  18. * - Redistributions in binary form must reproduce the above
  19. * copyright notice, this list of conditions and the following
  20. * disclaimer in the documentation and/or other materials
  21. * provided with the distribution.
  22. *
  23. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  24. * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  25. * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  26. * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  27. * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  28. * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  29. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  30. * SOFTWARE.
  31. */
  32. #ifndef T3_CPL_H
  33. #define T3_CPL_H
  34. #if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD)
  35. # include <asm/byteorder.h>
  36. #endif
  37. enum CPL_opcode {
  38. CPL_PASS_OPEN_REQ = 0x1,
  39. CPL_PASS_ACCEPT_RPL = 0x2,
  40. CPL_ACT_OPEN_REQ = 0x3,
  41. CPL_SET_TCB = 0x4,
  42. CPL_SET_TCB_FIELD = 0x5,
  43. CPL_GET_TCB = 0x6,
  44. CPL_PCMD = 0x7,
  45. CPL_CLOSE_CON_REQ = 0x8,
  46. CPL_CLOSE_LISTSRV_REQ = 0x9,
  47. CPL_ABORT_REQ = 0xA,
  48. CPL_ABORT_RPL = 0xB,
  49. CPL_TX_DATA = 0xC,
  50. CPL_RX_DATA_ACK = 0xD,
  51. CPL_TX_PKT = 0xE,
  52. CPL_RTE_DELETE_REQ = 0xF,
  53. CPL_RTE_WRITE_REQ = 0x10,
  54. CPL_RTE_READ_REQ = 0x11,
  55. CPL_L2T_WRITE_REQ = 0x12,
  56. CPL_L2T_READ_REQ = 0x13,
  57. CPL_SMT_WRITE_REQ = 0x14,
  58. CPL_SMT_READ_REQ = 0x15,
  59. CPL_TX_PKT_LSO = 0x16,
  60. CPL_PCMD_READ = 0x17,
  61. CPL_BARRIER = 0x18,
  62. CPL_TID_RELEASE = 0x1A,
  63. CPL_CLOSE_LISTSRV_RPL = 0x20,
  64. CPL_ERROR = 0x21,
  65. CPL_GET_TCB_RPL = 0x22,
  66. CPL_L2T_WRITE_RPL = 0x23,
  67. CPL_PCMD_READ_RPL = 0x24,
  68. CPL_PCMD_RPL = 0x25,
  69. CPL_PEER_CLOSE = 0x26,
  70. CPL_RTE_DELETE_RPL = 0x27,
  71. CPL_RTE_WRITE_RPL = 0x28,
  72. CPL_RX_DDP_COMPLETE = 0x29,
  73. CPL_RX_PHYS_ADDR = 0x2A,
  74. CPL_RX_PKT = 0x2B,
  75. CPL_RX_URG_NOTIFY = 0x2C,
  76. CPL_SET_TCB_RPL = 0x2D,
  77. CPL_SMT_WRITE_RPL = 0x2E,
  78. CPL_TX_DATA_ACK = 0x2F,
  79. CPL_ABORT_REQ_RSS = 0x30,
  80. CPL_ABORT_RPL_RSS = 0x31,
  81. CPL_CLOSE_CON_RPL = 0x32,
  82. CPL_ISCSI_HDR = 0x33,
  83. CPL_L2T_READ_RPL = 0x34,
  84. CPL_RDMA_CQE = 0x35,
  85. CPL_RDMA_CQE_READ_RSP = 0x36,
  86. CPL_RDMA_CQE_ERR = 0x37,
  87. CPL_RTE_READ_RPL = 0x38,
  88. CPL_RX_DATA = 0x39,
  89. CPL_ACT_OPEN_RPL = 0x40,
  90. CPL_PASS_OPEN_RPL = 0x41,
  91. CPL_RX_DATA_DDP = 0x42,
  92. CPL_SMT_READ_RPL = 0x43,
  93. CPL_ACT_ESTABLISH = 0x50,
  94. CPL_PASS_ESTABLISH = 0x51,
  95. CPL_PASS_ACCEPT_REQ = 0x70,
  96. CPL_ASYNC_NOTIF = 0x80, /* fake opcode for async notifications */
  97. CPL_TX_DMA_ACK = 0xA0,
  98. CPL_RDMA_READ_REQ = 0xA1,
  99. CPL_RDMA_TERMINATE = 0xA2,
  100. CPL_TRACE_PKT = 0xA3,
  101. CPL_RDMA_EC_STATUS = 0xA5,
  102. NUM_CPL_CMDS /* must be last and previous entries must be sorted */
  103. };
  104. enum CPL_error {
  105. CPL_ERR_NONE = 0,
  106. CPL_ERR_TCAM_PARITY = 1,
  107. CPL_ERR_TCAM_FULL = 3,
  108. CPL_ERR_CONN_RESET = 20,
  109. CPL_ERR_CONN_EXIST = 22,
  110. CPL_ERR_ARP_MISS = 23,
  111. CPL_ERR_BAD_SYN = 24,
  112. CPL_ERR_CONN_TIMEDOUT = 30,
  113. CPL_ERR_XMIT_TIMEDOUT = 31,
  114. CPL_ERR_PERSIST_TIMEDOUT = 32,
  115. CPL_ERR_FINWAIT2_TIMEDOUT = 33,
  116. CPL_ERR_KEEPALIVE_TIMEDOUT = 34,
  117. CPL_ERR_RTX_NEG_ADVICE = 35,
  118. CPL_ERR_PERSIST_NEG_ADVICE = 36,
  119. CPL_ERR_ABORT_FAILED = 42,
  120. CPL_ERR_GENERAL = 99
  121. };
  122. enum {
  123. CPL_CONN_POLICY_AUTO = 0,
  124. CPL_CONN_POLICY_ASK = 1,
  125. CPL_CONN_POLICY_DENY = 3
  126. };
  127. enum {
  128. ULP_MODE_NONE = 0,
  129. ULP_MODE_ISCSI = 2,
  130. ULP_MODE_RDMA = 4,
  131. ULP_MODE_TCPDDP = 5
  132. };
  133. enum {
  134. ULP_CRC_HEADER = 1 << 0,
  135. ULP_CRC_DATA = 1 << 1
  136. };
  137. enum {
  138. CPL_PASS_OPEN_ACCEPT,
  139. CPL_PASS_OPEN_REJECT
  140. };
  141. enum {
  142. CPL_ABORT_SEND_RST = 0,
  143. CPL_ABORT_NO_RST,
  144. CPL_ABORT_POST_CLOSE_REQ = 2
  145. };
  146. enum { /* TX_PKT_LSO ethernet types */
  147. CPL_ETH_II,
  148. CPL_ETH_II_VLAN,
  149. CPL_ETH_802_3,
  150. CPL_ETH_802_3_VLAN
  151. };
  152. enum { /* TCP congestion control algorithms */
  153. CONG_ALG_RENO,
  154. CONG_ALG_TAHOE,
  155. CONG_ALG_NEWRENO,
  156. CONG_ALG_HIGHSPEED
  157. };
  158. union opcode_tid {
  159. __be32 opcode_tid;
  160. __u8 opcode;
  161. };
  162. #define S_OPCODE 24
  163. #define V_OPCODE(x) ((x) << S_OPCODE)
  164. #define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF)
  165. #define G_TID(x) ((x) & 0xFFFFFF)
  166. /* tid is assumed to be 24-bits */
  167. #define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid))
  168. #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
  169. /* extract the TID from a CPL command */
  170. #define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd))))
  171. struct tcp_options {
  172. __be16 mss;
  173. __u8 wsf;
  174. #if defined(__LITTLE_ENDIAN_BITFIELD)
  175. __u8:5;
  176. __u8 ecn:1;
  177. __u8 sack:1;
  178. __u8 tstamp:1;
  179. #else
  180. __u8 tstamp:1;
  181. __u8 sack:1;
  182. __u8 ecn:1;
  183. __u8:5;
  184. #endif
  185. };
  186. struct rss_header {
  187. __u8 opcode;
  188. #if defined(__LITTLE_ENDIAN_BITFIELD)
  189. __u8 cpu_idx:6;
  190. __u8 hash_type:2;
  191. #else
  192. __u8 hash_type:2;
  193. __u8 cpu_idx:6;
  194. #endif
  195. __be16 cq_idx;
  196. __be32 rss_hash_val;
  197. };
  198. #ifndef CHELSIO_FW
  199. struct work_request_hdr {
  200. __be32 wr_hi;
  201. __be32 wr_lo;
  202. };
  203. /* wr_hi fields */
  204. #define S_WR_SGE_CREDITS 0
  205. #define M_WR_SGE_CREDITS 0xFF
  206. #define V_WR_SGE_CREDITS(x) ((x) << S_WR_SGE_CREDITS)
  207. #define G_WR_SGE_CREDITS(x) (((x) >> S_WR_SGE_CREDITS) & M_WR_SGE_CREDITS)
  208. #define S_WR_SGLSFLT 8
  209. #define M_WR_SGLSFLT 0xFF
  210. #define V_WR_SGLSFLT(x) ((x) << S_WR_SGLSFLT)
  211. #define G_WR_SGLSFLT(x) (((x) >> S_WR_SGLSFLT) & M_WR_SGLSFLT)
  212. #define S_WR_BCNTLFLT 16
  213. #define M_WR_BCNTLFLT 0xF
  214. #define V_WR_BCNTLFLT(x) ((x) << S_WR_BCNTLFLT)
  215. #define G_WR_BCNTLFLT(x) (((x) >> S_WR_BCNTLFLT) & M_WR_BCNTLFLT)
  216. #define S_WR_DATATYPE 20
  217. #define V_WR_DATATYPE(x) ((x) << S_WR_DATATYPE)
  218. #define F_WR_DATATYPE V_WR_DATATYPE(1U)
  219. #define S_WR_COMPL 21
  220. #define V_WR_COMPL(x) ((x) << S_WR_COMPL)
  221. #define F_WR_COMPL V_WR_COMPL(1U)
  222. #define S_WR_EOP 22
  223. #define V_WR_EOP(x) ((x) << S_WR_EOP)
  224. #define F_WR_EOP V_WR_EOP(1U)
  225. #define S_WR_SOP 23
  226. #define V_WR_SOP(x) ((x) << S_WR_SOP)
  227. #define F_WR_SOP V_WR_SOP(1U)
  228. #define S_WR_OP 24
  229. #define M_WR_OP 0xFF
  230. #define V_WR_OP(x) ((x) << S_WR_OP)
  231. #define G_WR_OP(x) (((x) >> S_WR_OP) & M_WR_OP)
  232. /* wr_lo fields */
  233. #define S_WR_LEN 0
  234. #define M_WR_LEN 0xFF
  235. #define V_WR_LEN(x) ((x) << S_WR_LEN)
  236. #define G_WR_LEN(x) (((x) >> S_WR_LEN) & M_WR_LEN)
  237. #define S_WR_TID 8
  238. #define M_WR_TID 0xFFFFF
  239. #define V_WR_TID(x) ((x) << S_WR_TID)
  240. #define G_WR_TID(x) (((x) >> S_WR_TID) & M_WR_TID)
  241. #define S_WR_CR_FLUSH 30
  242. #define V_WR_CR_FLUSH(x) ((x) << S_WR_CR_FLUSH)
  243. #define F_WR_CR_FLUSH V_WR_CR_FLUSH(1U)
  244. #define S_WR_GEN 31
  245. #define V_WR_GEN(x) ((x) << S_WR_GEN)
  246. #define F_WR_GEN V_WR_GEN(1U)
  247. # define WR_HDR struct work_request_hdr wr
  248. # define RSS_HDR
  249. #else
  250. # define WR_HDR
  251. # define RSS_HDR struct rss_header rss_hdr;
  252. #endif
  253. /* option 0 lower-half fields */
  254. #define S_CPL_STATUS 0
  255. #define M_CPL_STATUS 0xFF
  256. #define V_CPL_STATUS(x) ((x) << S_CPL_STATUS)
  257. #define G_CPL_STATUS(x) (((x) >> S_CPL_STATUS) & M_CPL_STATUS)
  258. #define S_INJECT_TIMER 6
  259. #define V_INJECT_TIMER(x) ((x) << S_INJECT_TIMER)
  260. #define F_INJECT_TIMER V_INJECT_TIMER(1U)
  261. #define S_NO_OFFLOAD 7
  262. #define V_NO_OFFLOAD(x) ((x) << S_NO_OFFLOAD)
  263. #define F_NO_OFFLOAD V_NO_OFFLOAD(1U)
  264. #define S_ULP_MODE 8
  265. #define M_ULP_MODE 0xF
  266. #define V_ULP_MODE(x) ((x) << S_ULP_MODE)
  267. #define G_ULP_MODE(x) (((x) >> S_ULP_MODE) & M_ULP_MODE)
  268. #define S_RCV_BUFSIZ 12
  269. #define M_RCV_BUFSIZ 0x3FFF
  270. #define V_RCV_BUFSIZ(x) ((x) << S_RCV_BUFSIZ)
  271. #define G_RCV_BUFSIZ(x) (((x) >> S_RCV_BUFSIZ) & M_RCV_BUFSIZ)
  272. #define S_TOS 26
  273. #define M_TOS 0x3F
  274. #define V_TOS(x) ((x) << S_TOS)
  275. #define G_TOS(x) (((x) >> S_TOS) & M_TOS)
  276. /* option 0 upper-half fields */
  277. #define S_DELACK 0
  278. #define V_DELACK(x) ((x) << S_DELACK)
  279. #define F_DELACK V_DELACK(1U)
  280. #define S_NO_CONG 1
  281. #define V_NO_CONG(x) ((x) << S_NO_CONG)
  282. #define F_NO_CONG V_NO_CONG(1U)
  283. #define S_SRC_MAC_SEL 2
  284. #define M_SRC_MAC_SEL 0x3
  285. #define V_SRC_MAC_SEL(x) ((x) << S_SRC_MAC_SEL)
  286. #define G_SRC_MAC_SEL(x) (((x) >> S_SRC_MAC_SEL) & M_SRC_MAC_SEL)
  287. #define S_L2T_IDX 4
  288. #define M_L2T_IDX 0x7FF
  289. #define V_L2T_IDX(x) ((x) << S_L2T_IDX)
  290. #define G_L2T_IDX(x) (((x) >> S_L2T_IDX) & M_L2T_IDX)
  291. #define S_TX_CHANNEL 15
  292. #define V_TX_CHANNEL(x) ((x) << S_TX_CHANNEL)
  293. #define F_TX_CHANNEL V_TX_CHANNEL(1U)
  294. #define S_TCAM_BYPASS 16
  295. #define V_TCAM_BYPASS(x) ((x) << S_TCAM_BYPASS)
  296. #define F_TCAM_BYPASS V_TCAM_BYPASS(1U)
  297. #define S_NAGLE 17
  298. #define V_NAGLE(x) ((x) << S_NAGLE)
  299. #define F_NAGLE V_NAGLE(1U)
  300. #define S_WND_SCALE 18
  301. #define M_WND_SCALE 0xF
  302. #define V_WND_SCALE(x) ((x) << S_WND_SCALE)
  303. #define G_WND_SCALE(x) (((x) >> S_WND_SCALE) & M_WND_SCALE)
  304. #define S_KEEP_ALIVE 22
  305. #define V_KEEP_ALIVE(x) ((x) << S_KEEP_ALIVE)
  306. #define F_KEEP_ALIVE V_KEEP_ALIVE(1U)
  307. #define S_MAX_RETRANS 23
  308. #define M_MAX_RETRANS 0xF
  309. #define V_MAX_RETRANS(x) ((x) << S_MAX_RETRANS)
  310. #define G_MAX_RETRANS(x) (((x) >> S_MAX_RETRANS) & M_MAX_RETRANS)
  311. #define S_MAX_RETRANS_OVERRIDE 27
  312. #define V_MAX_RETRANS_OVERRIDE(x) ((x) << S_MAX_RETRANS_OVERRIDE)
  313. #define F_MAX_RETRANS_OVERRIDE V_MAX_RETRANS_OVERRIDE(1U)
  314. #define S_MSS_IDX 28
  315. #define M_MSS_IDX 0xF
  316. #define V_MSS_IDX(x) ((x) << S_MSS_IDX)
  317. #define G_MSS_IDX(x) (((x) >> S_MSS_IDX) & M_MSS_IDX)
  318. /* option 1 fields */
  319. #define S_RSS_ENABLE 0
  320. #define V_RSS_ENABLE(x) ((x) << S_RSS_ENABLE)
  321. #define F_RSS_ENABLE V_RSS_ENABLE(1U)
  322. #define S_RSS_MASK_LEN 1
  323. #define M_RSS_MASK_LEN 0x7
  324. #define V_RSS_MASK_LEN(x) ((x) << S_RSS_MASK_LEN)
  325. #define G_RSS_MASK_LEN(x) (((x) >> S_RSS_MASK_LEN) & M_RSS_MASK_LEN)
  326. #define S_CPU_IDX 4
  327. #define M_CPU_IDX 0x3F
  328. #define V_CPU_IDX(x) ((x) << S_CPU_IDX)
  329. #define G_CPU_IDX(x) (((x) >> S_CPU_IDX) & M_CPU_IDX)
  330. #define S_MAC_MATCH_VALID 18
  331. #define V_MAC_MATCH_VALID(x) ((x) << S_MAC_MATCH_VALID)
  332. #define F_MAC_MATCH_VALID V_MAC_MATCH_VALID(1U)
  333. #define S_CONN_POLICY 19
  334. #define M_CONN_POLICY 0x3
  335. #define V_CONN_POLICY(x) ((x) << S_CONN_POLICY)
  336. #define G_CONN_POLICY(x) (((x) >> S_CONN_POLICY) & M_CONN_POLICY)
  337. #define S_SYN_DEFENSE 21
  338. #define V_SYN_DEFENSE(x) ((x) << S_SYN_DEFENSE)
  339. #define F_SYN_DEFENSE V_SYN_DEFENSE(1U)
  340. #define S_VLAN_PRI 22
  341. #define M_VLAN_PRI 0x3
  342. #define V_VLAN_PRI(x) ((x) << S_VLAN_PRI)
  343. #define G_VLAN_PRI(x) (((x) >> S_VLAN_PRI) & M_VLAN_PRI)
  344. #define S_VLAN_PRI_VALID 24
  345. #define V_VLAN_PRI_VALID(x) ((x) << S_VLAN_PRI_VALID)
  346. #define F_VLAN_PRI_VALID V_VLAN_PRI_VALID(1U)
  347. #define S_PKT_TYPE 25
  348. #define M_PKT_TYPE 0x3
  349. #define V_PKT_TYPE(x) ((x) << S_PKT_TYPE)
  350. #define G_PKT_TYPE(x) (((x) >> S_PKT_TYPE) & M_PKT_TYPE)
  351. #define S_MAC_MATCH 27
  352. #define M_MAC_MATCH 0x1F
  353. #define V_MAC_MATCH(x) ((x) << S_MAC_MATCH)
  354. #define G_MAC_MATCH(x) (((x) >> S_MAC_MATCH) & M_MAC_MATCH)
  355. /* option 2 fields */
  356. #define S_CPU_INDEX 0
  357. #define M_CPU_INDEX 0x7F
  358. #define V_CPU_INDEX(x) ((x) << S_CPU_INDEX)
  359. #define G_CPU_INDEX(x) (((x) >> S_CPU_INDEX) & M_CPU_INDEX)
  360. #define S_CPU_INDEX_VALID 7
  361. #define V_CPU_INDEX_VALID(x) ((x) << S_CPU_INDEX_VALID)
  362. #define F_CPU_INDEX_VALID V_CPU_INDEX_VALID(1U)
  363. #define S_RX_COALESCE 8
  364. #define M_RX_COALESCE 0x3
  365. #define V_RX_COALESCE(x) ((x) << S_RX_COALESCE)
  366. #define G_RX_COALESCE(x) (((x) >> S_RX_COALESCE) & M_RX_COALESCE)
  367. #define S_RX_COALESCE_VALID 10
  368. #define V_RX_COALESCE_VALID(x) ((x) << S_RX_COALESCE_VALID)
  369. #define F_RX_COALESCE_VALID V_RX_COALESCE_VALID(1U)
  370. #define S_CONG_CONTROL_FLAVOR 11
  371. #define M_CONG_CONTROL_FLAVOR 0x3
  372. #define V_CONG_CONTROL_FLAVOR(x) ((x) << S_CONG_CONTROL_FLAVOR)
  373. #define G_CONG_CONTROL_FLAVOR(x) (((x) >> S_CONG_CONTROL_FLAVOR) & M_CONG_CONTROL_FLAVOR)
  374. #define S_PACING_FLAVOR 13
  375. #define M_PACING_FLAVOR 0x3
  376. #define V_PACING_FLAVOR(x) ((x) << S_PACING_FLAVOR)
  377. #define G_PACING_FLAVOR(x) (((x) >> S_PACING_FLAVOR) & M_PACING_FLAVOR)
  378. #define S_FLAVORS_VALID 15
  379. #define V_FLAVORS_VALID(x) ((x) << S_FLAVORS_VALID)
  380. #define F_FLAVORS_VALID V_FLAVORS_VALID(1U)
  381. #define S_RX_FC_DISABLE 16
  382. #define V_RX_FC_DISABLE(x) ((x) << S_RX_FC_DISABLE)
  383. #define F_RX_FC_DISABLE V_RX_FC_DISABLE(1U)
  384. #define S_RX_FC_VALID 17
  385. #define V_RX_FC_VALID(x) ((x) << S_RX_FC_VALID)
  386. #define F_RX_FC_VALID V_RX_FC_VALID(1U)
  387. struct cpl_pass_open_req {
  388. WR_HDR;
  389. union opcode_tid ot;
  390. __be16 local_port;
  391. __be16 peer_port;
  392. __be32 local_ip;
  393. __be32 peer_ip;
  394. __be32 opt0h;
  395. __be32 opt0l;
  396. __be32 peer_netmask;
  397. __be32 opt1;
  398. };
  399. struct cpl_pass_open_rpl {
  400. RSS_HDR union opcode_tid ot;
  401. __be16 local_port;
  402. __be16 peer_port;
  403. __be32 local_ip;
  404. __be32 peer_ip;
  405. __u8 resvd[7];
  406. __u8 status;
  407. };
  408. struct cpl_pass_establish {
  409. RSS_HDR union opcode_tid ot;
  410. __be16 local_port;
  411. __be16 peer_port;
  412. __be32 local_ip;
  413. __be32 peer_ip;
  414. __be32 tos_tid;
  415. __be16 l2t_idx;
  416. __be16 tcp_opt;
  417. __be32 snd_isn;
  418. __be32 rcv_isn;
  419. };
  420. /* cpl_pass_establish.tos_tid fields */
  421. #define S_PASS_OPEN_TID 0
  422. #define M_PASS_OPEN_TID 0xFFFFFF
  423. #define V_PASS_OPEN_TID(x) ((x) << S_PASS_OPEN_TID)
  424. #define G_PASS_OPEN_TID(x) (((x) >> S_PASS_OPEN_TID) & M_PASS_OPEN_TID)
  425. #define S_PASS_OPEN_TOS 24
  426. #define M_PASS_OPEN_TOS 0xFF
  427. #define V_PASS_OPEN_TOS(x) ((x) << S_PASS_OPEN_TOS)
  428. #define G_PASS_OPEN_TOS(x) (((x) >> S_PASS_OPEN_TOS) & M_PASS_OPEN_TOS)
  429. /* cpl_pass_establish.l2t_idx fields */
  430. #define S_L2T_IDX16 5
  431. #define M_L2T_IDX16 0x7FF
  432. #define V_L2T_IDX16(x) ((x) << S_L2T_IDX16)
  433. #define G_L2T_IDX16(x) (((x) >> S_L2T_IDX16) & M_L2T_IDX16)
  434. /* cpl_pass_establish.tcp_opt fields (also applies act_open_establish) */
  435. #define G_TCPOPT_WSCALE_OK(x) (((x) >> 5) & 1)
  436. #define G_TCPOPT_SACK(x) (((x) >> 6) & 1)
  437. #define G_TCPOPT_TSTAMP(x) (((x) >> 7) & 1)
  438. #define G_TCPOPT_SND_WSCALE(x) (((x) >> 8) & 0xf)
  439. #define G_TCPOPT_MSS(x) (((x) >> 12) & 0xf)
  440. struct cpl_pass_accept_req {
  441. RSS_HDR union opcode_tid ot;
  442. __be16 local_port;
  443. __be16 peer_port;
  444. __be32 local_ip;
  445. __be32 peer_ip;
  446. __be32 tos_tid;
  447. struct tcp_options tcp_options;
  448. __u8 dst_mac[6];
  449. __be16 vlan_tag;
  450. __u8 src_mac[6];
  451. #if defined(__LITTLE_ENDIAN_BITFIELD)
  452. __u8:3;
  453. __u8 addr_idx:3;
  454. __u8 port_idx:1;
  455. __u8 exact_match:1;
  456. #else
  457. __u8 exact_match:1;
  458. __u8 port_idx:1;
  459. __u8 addr_idx:3;
  460. __u8:3;
  461. #endif
  462. __u8 rsvd;
  463. __be32 rcv_isn;
  464. __be32 rsvd2;
  465. };
  466. struct cpl_pass_accept_rpl {
  467. WR_HDR;
  468. union opcode_tid ot;
  469. __be32 opt2;
  470. __be32 rsvd;
  471. __be32 peer_ip;
  472. __be32 opt0h;
  473. __be32 opt0l_status;
  474. };
  475. struct cpl_act_open_req {
  476. WR_HDR;
  477. union opcode_tid ot;
  478. __be16 local_port;
  479. __be16 peer_port;
  480. __be32 local_ip;
  481. __be32 peer_ip;
  482. __be32 opt0h;
  483. __be32 opt0l;
  484. __be32 params;
  485. __be32 opt2;
  486. };
  487. /* cpl_act_open_req.params fields */
  488. #define S_AOPEN_VLAN_PRI 9
  489. #define M_AOPEN_VLAN_PRI 0x3
  490. #define V_AOPEN_VLAN_PRI(x) ((x) << S_AOPEN_VLAN_PRI)
  491. #define G_AOPEN_VLAN_PRI(x) (((x) >> S_AOPEN_VLAN_PRI) & M_AOPEN_VLAN_PRI)
  492. #define S_AOPEN_VLAN_PRI_VALID 11
  493. #define V_AOPEN_VLAN_PRI_VALID(x) ((x) << S_AOPEN_VLAN_PRI_VALID)
  494. #define F_AOPEN_VLAN_PRI_VALID V_AOPEN_VLAN_PRI_VALID(1U)
  495. #define S_AOPEN_PKT_TYPE 12
  496. #define M_AOPEN_PKT_TYPE 0x3
  497. #define V_AOPEN_PKT_TYPE(x) ((x) << S_AOPEN_PKT_TYPE)
  498. #define G_AOPEN_PKT_TYPE(x) (((x) >> S_AOPEN_PKT_TYPE) & M_AOPEN_PKT_TYPE)
  499. #define S_AOPEN_MAC_MATCH 14
  500. #define M_AOPEN_MAC_MATCH 0x1F
  501. #define V_AOPEN_MAC_MATCH(x) ((x) << S_AOPEN_MAC_MATCH)
  502. #define G_AOPEN_MAC_MATCH(x) (((x) >> S_AOPEN_MAC_MATCH) & M_AOPEN_MAC_MATCH)
  503. #define S_AOPEN_MAC_MATCH_VALID 19
  504. #define V_AOPEN_MAC_MATCH_VALID(x) ((x) << S_AOPEN_MAC_MATCH_VALID)
  505. #define F_AOPEN_MAC_MATCH_VALID V_AOPEN_MAC_MATCH_VALID(1U)
  506. #define S_AOPEN_IFF_VLAN 20
  507. #define M_AOPEN_IFF_VLAN 0xFFF
  508. #define V_AOPEN_IFF_VLAN(x) ((x) << S_AOPEN_IFF_VLAN)
  509. #define G_AOPEN_IFF_VLAN(x) (((x) >> S_AOPEN_IFF_VLAN) & M_AOPEN_IFF_VLAN)
  510. struct cpl_act_open_rpl {
  511. RSS_HDR union opcode_tid ot;
  512. __be16 local_port;
  513. __be16 peer_port;
  514. __be32 local_ip;
  515. __be32 peer_ip;
  516. __be32 atid;
  517. __u8 rsvd[3];
  518. __u8 status;
  519. };
  520. struct cpl_act_establish {
  521. RSS_HDR union opcode_tid ot;
  522. __be16 local_port;
  523. __be16 peer_port;
  524. __be32 local_ip;
  525. __be32 peer_ip;
  526. __be32 tos_tid;
  527. __be16 l2t_idx;
  528. __be16 tcp_opt;
  529. __be32 snd_isn;
  530. __be32 rcv_isn;
  531. };
  532. struct cpl_get_tcb {
  533. WR_HDR;
  534. union opcode_tid ot;
  535. __be16 cpuno;
  536. __be16 rsvd;
  537. };
  538. struct cpl_get_tcb_rpl {
  539. RSS_HDR union opcode_tid ot;
  540. __u8 rsvd;
  541. __u8 status;
  542. __be16 len;
  543. };
  544. struct cpl_set_tcb {
  545. WR_HDR;
  546. union opcode_tid ot;
  547. __u8 reply;
  548. __u8 cpu_idx;
  549. __be16 len;
  550. };
  551. /* cpl_set_tcb.reply fields */
  552. #define S_NO_REPLY 7
  553. #define V_NO_REPLY(x) ((x) << S_NO_REPLY)
  554. #define F_NO_REPLY V_NO_REPLY(1U)
  555. struct cpl_set_tcb_field {
  556. WR_HDR;
  557. union opcode_tid ot;
  558. __u8 reply;
  559. __u8 cpu_idx;
  560. __be16 word;
  561. __be64 mask;
  562. __be64 val;
  563. };
  564. struct cpl_set_tcb_rpl {
  565. RSS_HDR union opcode_tid ot;
  566. __u8 rsvd[3];
  567. __u8 status;
  568. };
  569. struct cpl_pcmd {
  570. WR_HDR;
  571. union opcode_tid ot;
  572. __u8 rsvd[3];
  573. #if defined(__LITTLE_ENDIAN_BITFIELD)
  574. __u8 src:1;
  575. __u8 bundle:1;
  576. __u8 channel:1;
  577. __u8:5;
  578. #else
  579. __u8:5;
  580. __u8 channel:1;
  581. __u8 bundle:1;
  582. __u8 src:1;
  583. #endif
  584. __be32 pcmd_parm[2];
  585. };
  586. struct cpl_pcmd_reply {
  587. RSS_HDR union opcode_tid ot;
  588. __u8 status;
  589. __u8 rsvd;
  590. __be16 len;
  591. };
  592. struct cpl_close_con_req {
  593. WR_HDR;
  594. union opcode_tid ot;
  595. __be32 rsvd;
  596. };
  597. struct cpl_close_con_rpl {
  598. RSS_HDR union opcode_tid ot;
  599. __u8 rsvd[3];
  600. __u8 status;
  601. __be32 snd_nxt;
  602. __be32 rcv_nxt;
  603. };
  604. struct cpl_close_listserv_req {
  605. WR_HDR;
  606. union opcode_tid ot;
  607. __u8 rsvd0;
  608. __u8 cpu_idx;
  609. __be16 rsvd1;
  610. };
  611. struct cpl_close_listserv_rpl {
  612. RSS_HDR union opcode_tid ot;
  613. __u8 rsvd[3];
  614. __u8 status;
  615. };
  616. struct cpl_abort_req_rss {
  617. RSS_HDR union opcode_tid ot;
  618. __be32 rsvd0;
  619. __u8 rsvd1;
  620. __u8 status;
  621. __u8 rsvd2[6];
  622. };
  623. struct cpl_abort_req {
  624. WR_HDR;
  625. union opcode_tid ot;
  626. __be32 rsvd0;
  627. __u8 rsvd1;
  628. __u8 cmd;
  629. __u8 rsvd2[6];
  630. };
  631. struct cpl_abort_rpl_rss {
  632. RSS_HDR union opcode_tid ot;
  633. __be32 rsvd0;
  634. __u8 rsvd1;
  635. __u8 status;
  636. __u8 rsvd2[6];
  637. };
  638. struct cpl_abort_rpl {
  639. WR_HDR;
  640. union opcode_tid ot;
  641. __be32 rsvd0;
  642. __u8 rsvd1;
  643. __u8 cmd;
  644. __u8 rsvd2[6];
  645. };
  646. struct cpl_peer_close {
  647. RSS_HDR union opcode_tid ot;
  648. __be32 rcv_nxt;
  649. };
  650. struct tx_data_wr {
  651. __be32 wr_hi;
  652. __be32 wr_lo;
  653. __be32 len;
  654. __be32 flags;
  655. __be32 sndseq;
  656. __be32 param;
  657. };
  658. /* tx_data_wr.param fields */
  659. #define S_TX_PORT 0
  660. #define M_TX_PORT 0x7
  661. #define V_TX_PORT(x) ((x) << S_TX_PORT)
  662. #define G_TX_PORT(x) (((x) >> S_TX_PORT) & M_TX_PORT)
  663. #define S_TX_MSS 4
  664. #define M_TX_MSS 0xF
  665. #define V_TX_MSS(x) ((x) << S_TX_MSS)
  666. #define G_TX_MSS(x) (((x) >> S_TX_MSS) & M_TX_MSS)
  667. #define S_TX_QOS 8
  668. #define M_TX_QOS 0xFF
  669. #define V_TX_QOS(x) ((x) << S_TX_QOS)
  670. #define G_TX_QOS(x) (((x) >> S_TX_QOS) & M_TX_QOS)
  671. #define S_TX_SNDBUF 16
  672. #define M_TX_SNDBUF 0xFFFF
  673. #define V_TX_SNDBUF(x) ((x) << S_TX_SNDBUF)
  674. #define G_TX_SNDBUF(x) (((x) >> S_TX_SNDBUF) & M_TX_SNDBUF)
  675. struct cpl_tx_data {
  676. union opcode_tid ot;
  677. __be32 len;
  678. __be32 rsvd;
  679. __be16 urg;
  680. __be16 flags;
  681. };
  682. /* cpl_tx_data.flags fields */
  683. #define S_TX_ULP_SUBMODE 6
  684. #define M_TX_ULP_SUBMODE 0xF
  685. #define V_TX_ULP_SUBMODE(x) ((x) << S_TX_ULP_SUBMODE)
  686. #define G_TX_ULP_SUBMODE(x) (((x) >> S_TX_ULP_SUBMODE) & M_TX_ULP_SUBMODE)
  687. #define S_TX_ULP_MODE 10
  688. #define M_TX_ULP_MODE 0xF
  689. #define V_TX_ULP_MODE(x) ((x) << S_TX_ULP_MODE)
  690. #define G_TX_ULP_MODE(x) (((x) >> S_TX_ULP_MODE) & M_TX_ULP_MODE)
  691. #define S_TX_SHOVE 14
  692. #define V_TX_SHOVE(x) ((x) << S_TX_SHOVE)
  693. #define F_TX_SHOVE V_TX_SHOVE(1U)
  694. #define S_TX_MORE 15
  695. #define V_TX_MORE(x) ((x) << S_TX_MORE)
  696. #define F_TX_MORE V_TX_MORE(1U)
  697. /* additional tx_data_wr.flags fields */
  698. #define S_TX_CPU_IDX 0
  699. #define M_TX_CPU_IDX 0x3F
  700. #define V_TX_CPU_IDX(x) ((x) << S_TX_CPU_IDX)
  701. #define G_TX_CPU_IDX(x) (((x) >> S_TX_CPU_IDX) & M_TX_CPU_IDX)
  702. #define S_TX_URG 16
  703. #define V_TX_URG(x) ((x) << S_TX_URG)
  704. #define F_TX_URG V_TX_URG(1U)
  705. #define S_TX_CLOSE 17
  706. #define V_TX_CLOSE(x) ((x) << S_TX_CLOSE)
  707. #define F_TX_CLOSE V_TX_CLOSE(1U)
  708. #define S_TX_INIT 18
  709. #define V_TX_INIT(x) ((x) << S_TX_INIT)
  710. #define F_TX_INIT V_TX_INIT(1U)
  711. #define S_TX_IMM_ACK 19
  712. #define V_TX_IMM_ACK(x) ((x) << S_TX_IMM_ACK)
  713. #define F_TX_IMM_ACK V_TX_IMM_ACK(1U)
  714. #define S_TX_IMM_DMA 20
  715. #define V_TX_IMM_DMA(x) ((x) << S_TX_IMM_DMA)
  716. #define F_TX_IMM_DMA V_TX_IMM_DMA(1U)
  717. struct cpl_tx_data_ack {
  718. RSS_HDR union opcode_tid ot;
  719. __be32 ack_seq;
  720. };
  721. struct cpl_wr_ack {
  722. RSS_HDR union opcode_tid ot;
  723. __be16 credits;
  724. __be16 rsvd;
  725. __be32 snd_nxt;
  726. __be32 snd_una;
  727. };
  728. struct cpl_rdma_ec_status {
  729. RSS_HDR union opcode_tid ot;
  730. __u8 rsvd[3];
  731. __u8 status;
  732. };
  733. struct mngt_pktsched_wr {
  734. __be32 wr_hi;
  735. __be32 wr_lo;
  736. __u8 mngt_opcode;
  737. __u8 rsvd[7];
  738. __u8 sched;
  739. __u8 idx;
  740. __u8 min;
  741. __u8 max;
  742. __u8 binding;
  743. __u8 rsvd1[3];
  744. };
  745. struct cpl_iscsi_hdr {
  746. RSS_HDR union opcode_tid ot;
  747. __be16 pdu_len_ddp;
  748. __be16 len;
  749. __be32 seq;
  750. __be16 urg;
  751. __u8 rsvd;
  752. __u8 status;
  753. };
  754. /* cpl_iscsi_hdr.pdu_len_ddp fields */
  755. #define S_ISCSI_PDU_LEN 0
  756. #define M_ISCSI_PDU_LEN 0x7FFF
  757. #define V_ISCSI_PDU_LEN(x) ((x) << S_ISCSI_PDU_LEN)
  758. #define G_ISCSI_PDU_LEN(x) (((x) >> S_ISCSI_PDU_LEN) & M_ISCSI_PDU_LEN)
  759. #define S_ISCSI_DDP 15
  760. #define V_ISCSI_DDP(x) ((x) << S_ISCSI_DDP)
  761. #define F_ISCSI_DDP V_ISCSI_DDP(1U)
  762. struct cpl_rx_data {
  763. RSS_HDR union opcode_tid ot;
  764. __be16 rsvd;
  765. __be16 len;
  766. __be32 seq;
  767. __be16 urg;
  768. #if defined(__LITTLE_ENDIAN_BITFIELD)
  769. __u8 dack_mode:2;
  770. __u8 psh:1;
  771. __u8 heartbeat:1;
  772. __u8:4;
  773. #else
  774. __u8:4;
  775. __u8 heartbeat:1;
  776. __u8 psh:1;
  777. __u8 dack_mode:2;
  778. #endif
  779. __u8 status;
  780. };
  781. struct cpl_rx_data_ack {
  782. WR_HDR;
  783. union opcode_tid ot;
  784. __be32 credit_dack;
  785. };
  786. /* cpl_rx_data_ack.ack_seq fields */
  787. #define S_RX_CREDITS 0
  788. #define M_RX_CREDITS 0x7FFFFFF
  789. #define V_RX_CREDITS(x) ((x) << S_RX_CREDITS)
  790. #define G_RX_CREDITS(x) (((x) >> S_RX_CREDITS) & M_RX_CREDITS)
  791. #define S_RX_MODULATE 27
  792. #define V_RX_MODULATE(x) ((x) << S_RX_MODULATE)
  793. #define F_RX_MODULATE V_RX_MODULATE(1U)
  794. #define S_RX_FORCE_ACK 28
  795. #define V_RX_FORCE_ACK(x) ((x) << S_RX_FORCE_ACK)
  796. #define F_RX_FORCE_ACK V_RX_FORCE_ACK(1U)
  797. #define S_RX_DACK_MODE 29
  798. #define M_RX_DACK_MODE 0x3
  799. #define V_RX_DACK_MODE(x) ((x) << S_RX_DACK_MODE)
  800. #define G_RX_DACK_MODE(x) (((x) >> S_RX_DACK_MODE) & M_RX_DACK_MODE)
  801. #define S_RX_DACK_CHANGE 31
  802. #define V_RX_DACK_CHANGE(x) ((x) << S_RX_DACK_CHANGE)
  803. #define F_RX_DACK_CHANGE V_RX_DACK_CHANGE(1U)
  804. struct cpl_rx_urg_notify {
  805. RSS_HDR union opcode_tid ot;
  806. __be32 seq;
  807. };
  808. struct cpl_rx_ddp_complete {
  809. RSS_HDR union opcode_tid ot;
  810. __be32 ddp_report;
  811. };
  812. struct cpl_rx_data_ddp {
  813. RSS_HDR union opcode_tid ot;
  814. __be16 urg;
  815. __be16 len;
  816. __be32 seq;
  817. union {
  818. __be32 nxt_seq;
  819. __be32 ddp_report;
  820. };
  821. __be32 ulp_crc;
  822. __be32 ddpvld_status;
  823. };
  824. /* cpl_rx_data_ddp.ddpvld_status fields */
  825. #define S_DDP_STATUS 0
  826. #define M_DDP_STATUS 0xFF
  827. #define V_DDP_STATUS(x) ((x) << S_DDP_STATUS)
  828. #define G_DDP_STATUS(x) (((x) >> S_DDP_STATUS) & M_DDP_STATUS)
  829. #define S_DDP_VALID 15
  830. #define M_DDP_VALID 0x1FFFF
  831. #define V_DDP_VALID(x) ((x) << S_DDP_VALID)
  832. #define G_DDP_VALID(x) (((x) >> S_DDP_VALID) & M_DDP_VALID)
  833. #define S_DDP_PPOD_MISMATCH 15
  834. #define V_DDP_PPOD_MISMATCH(x) ((x) << S_DDP_PPOD_MISMATCH)
  835. #define F_DDP_PPOD_MISMATCH V_DDP_PPOD_MISMATCH(1U)
  836. #define S_DDP_PDU 16
  837. #define V_DDP_PDU(x) ((x) << S_DDP_PDU)
  838. #define F_DDP_PDU V_DDP_PDU(1U)
  839. #define S_DDP_LLIMIT_ERR 17
  840. #define V_DDP_LLIMIT_ERR(x) ((x) << S_DDP_LLIMIT_ERR)
  841. #define F_DDP_LLIMIT_ERR V_DDP_LLIMIT_ERR(1U)
  842. #define S_DDP_PPOD_PARITY_ERR 18
  843. #define V_DDP_PPOD_PARITY_ERR(x) ((x) << S_DDP_PPOD_PARITY_ERR)
  844. #define F_DDP_PPOD_PARITY_ERR V_DDP_PPOD_PARITY_ERR(1U)
  845. #define S_DDP_PADDING_ERR 19
  846. #define V_DDP_PADDING_ERR(x) ((x) << S_DDP_PADDING_ERR)
  847. #define F_DDP_PADDING_ERR V_DDP_PADDING_ERR(1U)
  848. #define S_DDP_HDRCRC_ERR 20
  849. #define V_DDP_HDRCRC_ERR(x) ((x) << S_DDP_HDRCRC_ERR)
  850. #define F_DDP_HDRCRC_ERR V_DDP_HDRCRC_ERR(1U)
  851. #define S_DDP_DATACRC_ERR 21
  852. #define V_DDP_DATACRC_ERR(x) ((x) << S_DDP_DATACRC_ERR)
  853. #define F_DDP_DATACRC_ERR V_DDP_DATACRC_ERR(1U)
  854. #define S_DDP_INVALID_TAG 22
  855. #define V_DDP_INVALID_TAG(x) ((x) << S_DDP_INVALID_TAG)
  856. #define F_DDP_INVALID_TAG V_DDP_INVALID_TAG(1U)
  857. #define S_DDP_ULIMIT_ERR 23
  858. #define V_DDP_ULIMIT_ERR(x) ((x) << S_DDP_ULIMIT_ERR)
  859. #define F_DDP_ULIMIT_ERR V_DDP_ULIMIT_ERR(1U)
  860. #define S_DDP_OFFSET_ERR 24
  861. #define V_DDP_OFFSET_ERR(x) ((x) << S_DDP_OFFSET_ERR)
  862. #define F_DDP_OFFSET_ERR V_DDP_OFFSET_ERR(1U)
  863. #define S_DDP_COLOR_ERR 25
  864. #define V_DDP_COLOR_ERR(x) ((x) << S_DDP_COLOR_ERR)
  865. #define F_DDP_COLOR_ERR V_DDP_COLOR_ERR(1U)
  866. #define S_DDP_TID_MISMATCH 26
  867. #define V_DDP_TID_MISMATCH(x) ((x) << S_DDP_TID_MISMATCH)
  868. #define F_DDP_TID_MISMATCH V_DDP_TID_MISMATCH(1U)
  869. #define S_DDP_INVALID_PPOD 27
  870. #define V_DDP_INVALID_PPOD(x) ((x) << S_DDP_INVALID_PPOD)
  871. #define F_DDP_INVALID_PPOD V_DDP_INVALID_PPOD(1U)
  872. #define S_DDP_ULP_MODE 28
  873. #define M_DDP_ULP_MODE 0xF
  874. #define V_DDP_ULP_MODE(x) ((x) << S_DDP_ULP_MODE)
  875. #define G_DDP_ULP_MODE(x) (((x) >> S_DDP_ULP_MODE) & M_DDP_ULP_MODE)
  876. /* cpl_rx_data_ddp.ddp_report fields */
  877. #define S_DDP_OFFSET 0
  878. #define M_DDP_OFFSET 0x3FFFFF
  879. #define V_DDP_OFFSET(x) ((x) << S_DDP_OFFSET)
  880. #define G_DDP_OFFSET(x) (((x) >> S_DDP_OFFSET) & M_DDP_OFFSET)
  881. #define S_DDP_URG 24
  882. #define V_DDP_URG(x) ((x) << S_DDP_URG)
  883. #define F_DDP_URG V_DDP_URG(1U)
  884. #define S_DDP_PSH 25
  885. #define V_DDP_PSH(x) ((x) << S_DDP_PSH)
  886. #define F_DDP_PSH V_DDP_PSH(1U)
  887. #define S_DDP_BUF_COMPLETE 26
  888. #define V_DDP_BUF_COMPLETE(x) ((x) << S_DDP_BUF_COMPLETE)
  889. #define F_DDP_BUF_COMPLETE V_DDP_BUF_COMPLETE(1U)
  890. #define S_DDP_BUF_TIMED_OUT 27
  891. #define V_DDP_BUF_TIMED_OUT(x) ((x) << S_DDP_BUF_TIMED_OUT)
  892. #define F_DDP_BUF_TIMED_OUT V_DDP_BUF_TIMED_OUT(1U)
  893. #define S_DDP_BUF_IDX 28
  894. #define V_DDP_BUF_IDX(x) ((x) << S_DDP_BUF_IDX)
  895. #define F_DDP_BUF_IDX V_DDP_BUF_IDX(1U)
  896. struct cpl_tx_pkt {
  897. WR_HDR;
  898. __be32 cntrl;
  899. __be32 len;
  900. };
  901. struct cpl_tx_pkt_lso {
  902. WR_HDR;
  903. __be32 cntrl;
  904. __be32 len;
  905. __be32 rsvd;
  906. __be32 lso_info;
  907. };
  908. /* cpl_tx_pkt*.cntrl fields */
  909. #define S_TXPKT_VLAN 0
  910. #define M_TXPKT_VLAN 0xFFFF
  911. #define V_TXPKT_VLAN(x) ((x) << S_TXPKT_VLAN)
  912. #define G_TXPKT_VLAN(x) (((x) >> S_TXPKT_VLAN) & M_TXPKT_VLAN)
  913. #define S_TXPKT_INTF 16
  914. #define M_TXPKT_INTF 0xF
  915. #define V_TXPKT_INTF(x) ((x) << S_TXPKT_INTF)
  916. #define G_TXPKT_INTF(x) (((x) >> S_TXPKT_INTF) & M_TXPKT_INTF)
  917. #define S_TXPKT_IPCSUM_DIS 20
  918. #define V_TXPKT_IPCSUM_DIS(x) ((x) << S_TXPKT_IPCSUM_DIS)
  919. #define F_TXPKT_IPCSUM_DIS V_TXPKT_IPCSUM_DIS(1U)
  920. #define S_TXPKT_L4CSUM_DIS 21
  921. #define V_TXPKT_L4CSUM_DIS(x) ((x) << S_TXPKT_L4CSUM_DIS)
  922. #define F_TXPKT_L4CSUM_DIS V_TXPKT_L4CSUM_DIS(1U)
  923. #define S_TXPKT_VLAN_VLD 22
  924. #define V_TXPKT_VLAN_VLD(x) ((x) << S_TXPKT_VLAN_VLD)
  925. #define F_TXPKT_VLAN_VLD V_TXPKT_VLAN_VLD(1U)
  926. #define S_TXPKT_LOOPBACK 23
  927. #define V_TXPKT_LOOPBACK(x) ((x) << S_TXPKT_LOOPBACK)
  928. #define F_TXPKT_LOOPBACK V_TXPKT_LOOPBACK(1U)
  929. #define S_TXPKT_OPCODE 24
  930. #define M_TXPKT_OPCODE 0xFF
  931. #define V_TXPKT_OPCODE(x) ((x) << S_TXPKT_OPCODE)
  932. #define G_TXPKT_OPCODE(x) (((x) >> S_TXPKT_OPCODE) & M_TXPKT_OPCODE)
  933. /* cpl_tx_pkt_lso.lso_info fields */
  934. #define S_LSO_MSS 0
  935. #define M_LSO_MSS 0x3FFF
  936. #define V_LSO_MSS(x) ((x) << S_LSO_MSS)
  937. #define G_LSO_MSS(x) (((x) >> S_LSO_MSS) & M_LSO_MSS)
  938. #define S_LSO_ETH_TYPE 14
  939. #define M_LSO_ETH_TYPE 0x3
  940. #define V_LSO_ETH_TYPE(x) ((x) << S_LSO_ETH_TYPE)
  941. #define G_LSO_ETH_TYPE(x) (((x) >> S_LSO_ETH_TYPE) & M_LSO_ETH_TYPE)
  942. #define S_LSO_TCPHDR_WORDS 16
  943. #define M_LSO_TCPHDR_WORDS 0xF
  944. #define V_LSO_TCPHDR_WORDS(x) ((x) << S_LSO_TCPHDR_WORDS)
  945. #define G_LSO_TCPHDR_WORDS(x) (((x) >> S_LSO_TCPHDR_WORDS) & M_LSO_TCPHDR_WORDS)
  946. #define S_LSO_IPHDR_WORDS 20
  947. #define M_LSO_IPHDR_WORDS 0xF
  948. #define V_LSO_IPHDR_WORDS(x) ((x) << S_LSO_IPHDR_WORDS)
  949. #define G_LSO_IPHDR_WORDS(x) (((x) >> S_LSO_IPHDR_WORDS) & M_LSO_IPHDR_WORDS)
  950. #define S_LSO_IPV6 24
  951. #define V_LSO_IPV6(x) ((x) << S_LSO_IPV6)
  952. #define F_LSO_IPV6 V_LSO_IPV6(1U)
  953. struct cpl_trace_pkt {
  954. #ifdef CHELSIO_FW
  955. __u8 rss_opcode;
  956. #if defined(__LITTLE_ENDIAN_BITFIELD)
  957. __u8 err:1;
  958. __u8:7;
  959. #else
  960. __u8:7;
  961. __u8 err:1;
  962. #endif
  963. __u8 rsvd0;
  964. #if defined(__LITTLE_ENDIAN_BITFIELD)
  965. __u8 qid:4;
  966. __u8:4;
  967. #else
  968. __u8:4;
  969. __u8 qid:4;
  970. #endif
  971. __be32 tstamp;
  972. #endif /* CHELSIO_FW */
  973. __u8 opcode;
  974. #if defined(__LITTLE_ENDIAN_BITFIELD)
  975. __u8 iff:4;
  976. __u8:4;
  977. #else
  978. __u8:4;
  979. __u8 iff:4;
  980. #endif
  981. __u8 rsvd[4];
  982. __be16 len;
  983. };
  984. struct cpl_rx_pkt {
  985. RSS_HDR __u8 opcode;
  986. #if defined(__LITTLE_ENDIAN_BITFIELD)
  987. __u8 iff:4;
  988. __u8 csum_valid:1;
  989. __u8 ipmi_pkt:1;
  990. __u8 vlan_valid:1;
  991. __u8 fragment:1;
  992. #else
  993. __u8 fragment:1;
  994. __u8 vlan_valid:1;
  995. __u8 ipmi_pkt:1;
  996. __u8 csum_valid:1;
  997. __u8 iff:4;
  998. #endif
  999. __be16 csum;
  1000. __be16 vlan;
  1001. __be16 len;
  1002. };
  1003. struct cpl_l2t_write_req {
  1004. WR_HDR;
  1005. union opcode_tid ot;
  1006. __be32 params;
  1007. __u8 rsvd[2];
  1008. __u8 dst_mac[6];
  1009. };
  1010. /* cpl_l2t_write_req.params fields */
  1011. #define S_L2T_W_IDX 0
  1012. #define M_L2T_W_IDX 0x7FF
  1013. #define V_L2T_W_IDX(x) ((x) << S_L2T_W_IDX)
  1014. #define G_L2T_W_IDX(x) (((x) >> S_L2T_W_IDX) & M_L2T_W_IDX)
  1015. #define S_L2T_W_VLAN 11
  1016. #define M_L2T_W_VLAN 0xFFF
  1017. #define V_L2T_W_VLAN(x) ((x) << S_L2T_W_VLAN)
  1018. #define G_L2T_W_VLAN(x) (((x) >> S_L2T_W_VLAN) & M_L2T_W_VLAN)
  1019. #define S_L2T_W_IFF 23
  1020. #define M_L2T_W_IFF 0xF
  1021. #define V_L2T_W_IFF(x) ((x) << S_L2T_W_IFF)
  1022. #define G_L2T_W_IFF(x) (((x) >> S_L2T_W_IFF) & M_L2T_W_IFF)
  1023. #define S_L2T_W_PRIO 27
  1024. #define M_L2T_W_PRIO 0x7
  1025. #define V_L2T_W_PRIO(x) ((x) << S_L2T_W_PRIO)
  1026. #define G_L2T_W_PRIO(x) (((x) >> S_L2T_W_PRIO) & M_L2T_W_PRIO)
  1027. struct cpl_l2t_write_rpl {
  1028. RSS_HDR union opcode_tid ot;
  1029. __u8 status;
  1030. __u8 rsvd[3];
  1031. };
  1032. struct cpl_l2t_read_req {
  1033. WR_HDR;
  1034. union opcode_tid ot;
  1035. __be16 rsvd;
  1036. __be16 l2t_idx;
  1037. };
  1038. struct cpl_l2t_read_rpl {
  1039. RSS_HDR union opcode_tid ot;
  1040. __be32 params;
  1041. __u8 rsvd[2];
  1042. __u8 dst_mac[6];
  1043. };
  1044. /* cpl_l2t_read_rpl.params fields */
  1045. #define S_L2T_R_PRIO 0
  1046. #define M_L2T_R_PRIO 0x7
  1047. #define V_L2T_R_PRIO(x) ((x) << S_L2T_R_PRIO)
  1048. #define G_L2T_R_PRIO(x) (((x) >> S_L2T_R_PRIO) & M_L2T_R_PRIO)
  1049. #define S_L2T_R_VLAN 8
  1050. #define M_L2T_R_VLAN 0xFFF
  1051. #define V_L2T_R_VLAN(x) ((x) << S_L2T_R_VLAN)
  1052. #define G_L2T_R_VLAN(x) (((x) >> S_L2T_R_VLAN) & M_L2T_R_VLAN)
  1053. #define S_L2T_R_IFF 20
  1054. #define M_L2T_R_IFF 0xF
  1055. #define V_L2T_R_IFF(x) ((x) << S_L2T_R_IFF)
  1056. #define G_L2T_R_IFF(x) (((x) >> S_L2T_R_IFF) & M_L2T_R_IFF)
  1057. #define S_L2T_STATUS 24
  1058. #define M_L2T_STATUS 0xFF
  1059. #define V_L2T_STATUS(x) ((x) << S_L2T_STATUS)
  1060. #define G_L2T_STATUS(x) (((x) >> S_L2T_STATUS) & M_L2T_STATUS)
  1061. struct cpl_smt_write_req {
  1062. WR_HDR;
  1063. union opcode_tid ot;
  1064. __u8 rsvd0;
  1065. #if defined(__LITTLE_ENDIAN_BITFIELD)
  1066. __u8 mtu_idx:4;
  1067. __u8 iff:4;
  1068. #else
  1069. __u8 iff:4;
  1070. __u8 mtu_idx:4;
  1071. #endif
  1072. __be16 rsvd2;
  1073. __be16 rsvd3;
  1074. __u8 src_mac1[6];
  1075. __be16 rsvd4;
  1076. __u8 src_mac0[6];
  1077. };
  1078. struct cpl_smt_write_rpl {
  1079. RSS_HDR union opcode_tid ot;
  1080. __u8 status;
  1081. __u8 rsvd[3];
  1082. };
  1083. struct cpl_smt_read_req {
  1084. WR_HDR;
  1085. union opcode_tid ot;
  1086. __u8 rsvd0;
  1087. #if defined(__LITTLE_ENDIAN_BITFIELD)
  1088. __u8:4;
  1089. __u8 iff:4;
  1090. #else
  1091. __u8 iff:4;
  1092. __u8:4;
  1093. #endif
  1094. __be16 rsvd2;
  1095. };
  1096. struct cpl_smt_read_rpl {
  1097. RSS_HDR union opcode_tid ot;
  1098. __u8 status;
  1099. #if defined(__LITTLE_ENDIAN_BITFIELD)
  1100. __u8 mtu_idx:4;
  1101. __u8:4;
  1102. #else
  1103. __u8:4;
  1104. __u8 mtu_idx:4;
  1105. #endif
  1106. __be16 rsvd2;
  1107. __be16 rsvd3;
  1108. __u8 src_mac1[6];
  1109. __be16 rsvd4;
  1110. __u8 src_mac0[6];
  1111. };
  1112. struct cpl_rte_delete_req {
  1113. WR_HDR;
  1114. union opcode_tid ot;
  1115. __be32 params;
  1116. };
  1117. /* { cpl_rte_delete_req, cpl_rte_read_req }.params fields */
  1118. #define S_RTE_REQ_LUT_IX 8
  1119. #define M_RTE_REQ_LUT_IX 0x7FF
  1120. #define V_RTE_REQ_LUT_IX(x) ((x) << S_RTE_REQ_LUT_IX)
  1121. #define G_RTE_REQ_LUT_IX(x) (((x) >> S_RTE_REQ_LUT_IX) & M_RTE_REQ_LUT_IX)
  1122. #define S_RTE_REQ_LUT_BASE 19
  1123. #define M_RTE_REQ_LUT_BASE 0x7FF
  1124. #define V_RTE_REQ_LUT_BASE(x) ((x) << S_RTE_REQ_LUT_BASE)
  1125. #define G_RTE_REQ_LUT_BASE(x) (((x) >> S_RTE_REQ_LUT_BASE) & M_RTE_REQ_LUT_BASE)
  1126. #define S_RTE_READ_REQ_SELECT 31
  1127. #define V_RTE_READ_REQ_SELECT(x) ((x) << S_RTE_READ_REQ_SELECT)
  1128. #define F_RTE_READ_REQ_SELECT V_RTE_READ_REQ_SELECT(1U)
  1129. struct cpl_rte_delete_rpl {
  1130. RSS_HDR union opcode_tid ot;
  1131. __u8 status;
  1132. __u8 rsvd[3];
  1133. };
  1134. struct cpl_rte_write_req {
  1135. WR_HDR;
  1136. union opcode_tid ot;
  1137. #if defined(__LITTLE_ENDIAN_BITFIELD)
  1138. __u8:6;
  1139. __u8 write_tcam:1;
  1140. __u8 write_l2t_lut:1;
  1141. #else
  1142. __u8 write_l2t_lut:1;
  1143. __u8 write_tcam:1;
  1144. __u8:6;
  1145. #endif
  1146. __u8 rsvd[3];
  1147. __be32 lut_params;
  1148. __be16 rsvd2;
  1149. __be16 l2t_idx;
  1150. __be32 netmask;
  1151. __be32 faddr;
  1152. };
  1153. /* cpl_rte_write_req.lut_params fields */
  1154. #define S_RTE_WRITE_REQ_LUT_IX 10
  1155. #define M_RTE_WRITE_REQ_LUT_IX 0x7FF
  1156. #define V_RTE_WRITE_REQ_LUT_IX(x) ((x) << S_RTE_WRITE_REQ_LUT_IX)
  1157. #define G_RTE_WRITE_REQ_LUT_IX(x) (((x) >> S_RTE_WRITE_REQ_LUT_IX) & M_RTE_WRITE_REQ_LUT_IX)
  1158. #define S_RTE_WRITE_REQ_LUT_BASE 21
  1159. #define M_RTE_WRITE_REQ_LUT_BASE 0x7FF
  1160. #define V_RTE_WRITE_REQ_LUT_BASE(x) ((x) << S_RTE_WRITE_REQ_LUT_BASE)
  1161. #define G_RTE_WRITE_REQ_LUT_BASE(x) (((x) >> S_RTE_WRITE_REQ_LUT_BASE) & M_RTE_WRITE_REQ_LUT_BASE)
  1162. struct cpl_rte_write_rpl {
  1163. RSS_HDR union opcode_tid ot;
  1164. __u8 status;
  1165. __u8 rsvd[3];
  1166. };
  1167. struct cpl_rte_read_req {
  1168. WR_HDR;
  1169. union opcode_tid ot;
  1170. __be32 params;
  1171. };
  1172. struct cpl_rte_read_rpl {
  1173. RSS_HDR union opcode_tid ot;
  1174. __u8 status;
  1175. __u8 rsvd0;
  1176. __be16 l2t_idx;
  1177. #if defined(__LITTLE_ENDIAN_BITFIELD)
  1178. __u8:7;
  1179. __u8 select:1;
  1180. #else
  1181. __u8 select:1;
  1182. __u8:7;
  1183. #endif
  1184. __u8 rsvd2[3];
  1185. __be32 addr;
  1186. };
  1187. struct cpl_tid_release {
  1188. WR_HDR;
  1189. union opcode_tid ot;
  1190. __be32 rsvd;
  1191. };
  1192. struct cpl_barrier {
  1193. WR_HDR;
  1194. __u8 opcode;
  1195. __u8 rsvd[7];
  1196. };
  1197. struct cpl_rdma_read_req {
  1198. __u8 opcode;
  1199. __u8 rsvd[15];
  1200. };
  1201. struct cpl_rdma_terminate {
  1202. #ifdef CHELSIO_FW
  1203. __u8 opcode;
  1204. __u8 rsvd[2];
  1205. #if defined(__LITTLE_ENDIAN_BITFIELD)
  1206. __u8 rspq:3;
  1207. __u8:5;
  1208. #else
  1209. __u8:5;
  1210. __u8 rspq:3;
  1211. #endif
  1212. __be32 tid_len;
  1213. #endif
  1214. __be32 msn;
  1215. __be32 mo;
  1216. __u8 data[0];
  1217. };
  1218. /* cpl_rdma_terminate.tid_len fields */
  1219. #define S_FLIT_CNT 0
  1220. #define M_FLIT_CNT 0xFF
  1221. #define V_FLIT_CNT(x) ((x) << S_FLIT_CNT)
  1222. #define G_FLIT_CNT(x) (((x) >> S_FLIT_CNT) & M_FLIT_CNT)
  1223. #define S_TERM_TID 8
  1224. #define M_TERM_TID 0xFFFFF
  1225. #define V_TERM_TID(x) ((x) << S_TERM_TID)
  1226. #define G_TERM_TID(x) (((x) >> S_TERM_TID) & M_TERM_TID)
  1227. #endif /* T3_CPL_H */