t3_cpl.h 33 KB

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