t3_cpl.h 34 KB

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