cnic_defs.h 82 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497
  1. /* cnic.c: Broadcom CNIC core network driver.
  2. *
  3. * Copyright (c) 2006-2010 Broadcom Corporation
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation.
  8. *
  9. */
  10. #ifndef CNIC_DEFS_H
  11. #define CNIC_DEFS_H
  12. /* KWQ (kernel work queue) request op codes */
  13. #define L2_KWQE_OPCODE_VALUE_FLUSH (4)
  14. #define L4_KWQE_OPCODE_VALUE_CONNECT1 (50)
  15. #define L4_KWQE_OPCODE_VALUE_CONNECT2 (51)
  16. #define L4_KWQE_OPCODE_VALUE_CONNECT3 (52)
  17. #define L4_KWQE_OPCODE_VALUE_RESET (53)
  18. #define L4_KWQE_OPCODE_VALUE_CLOSE (54)
  19. #define L4_KWQE_OPCODE_VALUE_UPDATE_SECRET (60)
  20. #define L4_KWQE_OPCODE_VALUE_INIT_ULP (61)
  21. #define L4_KWQE_OPCODE_VALUE_OFFLOAD_PG (1)
  22. #define L4_KWQE_OPCODE_VALUE_UPDATE_PG (9)
  23. #define L4_KWQE_OPCODE_VALUE_UPLOAD_PG (14)
  24. #define L5CM_RAMROD_CMD_ID_BASE (0x80)
  25. #define L5CM_RAMROD_CMD_ID_TCP_CONNECT (L5CM_RAMROD_CMD_ID_BASE + 3)
  26. #define L5CM_RAMROD_CMD_ID_CLOSE (L5CM_RAMROD_CMD_ID_BASE + 12)
  27. #define L5CM_RAMROD_CMD_ID_ABORT (L5CM_RAMROD_CMD_ID_BASE + 13)
  28. #define L5CM_RAMROD_CMD_ID_SEARCHER_DELETE (L5CM_RAMROD_CMD_ID_BASE + 14)
  29. #define L5CM_RAMROD_CMD_ID_TERMINATE_OFFLOAD (L5CM_RAMROD_CMD_ID_BASE + 15)
  30. /* KCQ (kernel completion queue) response op codes */
  31. #define L4_KCQE_OPCODE_VALUE_CLOSE_COMP (53)
  32. #define L4_KCQE_OPCODE_VALUE_RESET_COMP (54)
  33. #define L4_KCQE_OPCODE_VALUE_FW_TCP_UPDATE (55)
  34. #define L4_KCQE_OPCODE_VALUE_CONNECT_COMPLETE (56)
  35. #define L4_KCQE_OPCODE_VALUE_RESET_RECEIVED (57)
  36. #define L4_KCQE_OPCODE_VALUE_CLOSE_RECEIVED (58)
  37. #define L4_KCQE_OPCODE_VALUE_INIT_ULP (61)
  38. #define L4_KCQE_OPCODE_VALUE_OFFLOAD_PG (1)
  39. #define L4_KCQE_OPCODE_VALUE_UPDATE_PG (9)
  40. #define L4_KCQE_OPCODE_VALUE_UPLOAD_PG (14)
  41. /* KCQ (kernel completion queue) completion status */
  42. #define L4_KCQE_COMPLETION_STATUS_SUCCESS (0)
  43. #define L4_KCQE_COMPLETION_STATUS_TIMEOUT (0x93)
  44. #define L4_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAIL (0x83)
  45. #define L4_KCQE_COMPLETION_STATUS_OFFLOADED_PG (0x89)
  46. #define L4_LAYER_CODE (4)
  47. #define L2_LAYER_CODE (2)
  48. /*
  49. * L4 KCQ CQE
  50. */
  51. struct l4_kcq {
  52. u32 cid;
  53. u32 pg_cid;
  54. u32 conn_id;
  55. u32 pg_host_opaque;
  56. #if defined(__BIG_ENDIAN)
  57. u16 status;
  58. u16 reserved1;
  59. #elif defined(__LITTLE_ENDIAN)
  60. u16 reserved1;
  61. u16 status;
  62. #endif
  63. u32 reserved2[2];
  64. #if defined(__BIG_ENDIAN)
  65. u8 flags;
  66. #define L4_KCQ_RESERVED3 (0x7<<0)
  67. #define L4_KCQ_RESERVED3_SHIFT 0
  68. #define L4_KCQ_RAMROD_COMPLETION (0x1<<3) /* Everest only */
  69. #define L4_KCQ_RAMROD_COMPLETION_SHIFT 3
  70. #define L4_KCQ_LAYER_CODE (0x7<<4)
  71. #define L4_KCQ_LAYER_CODE_SHIFT 4
  72. #define L4_KCQ_RESERVED4 (0x1<<7)
  73. #define L4_KCQ_RESERVED4_SHIFT 7
  74. u8 op_code;
  75. u16 qe_self_seq;
  76. #elif defined(__LITTLE_ENDIAN)
  77. u16 qe_self_seq;
  78. u8 op_code;
  79. u8 flags;
  80. #define L4_KCQ_RESERVED3 (0xF<<0)
  81. #define L4_KCQ_RESERVED3_SHIFT 0
  82. #define L4_KCQ_RAMROD_COMPLETION (0x1<<3) /* Everest only */
  83. #define L4_KCQ_RAMROD_COMPLETION_SHIFT 3
  84. #define L4_KCQ_LAYER_CODE (0x7<<4)
  85. #define L4_KCQ_LAYER_CODE_SHIFT 4
  86. #define L4_KCQ_RESERVED4 (0x1<<7)
  87. #define L4_KCQ_RESERVED4_SHIFT 7
  88. #endif
  89. };
  90. /*
  91. * L4 KCQ CQE PG upload
  92. */
  93. struct l4_kcq_upload_pg {
  94. u32 pg_cid;
  95. #if defined(__BIG_ENDIAN)
  96. u16 pg_status;
  97. u16 pg_ipid_count;
  98. #elif defined(__LITTLE_ENDIAN)
  99. u16 pg_ipid_count;
  100. u16 pg_status;
  101. #endif
  102. u32 reserved1[5];
  103. #if defined(__BIG_ENDIAN)
  104. u8 flags;
  105. #define L4_KCQ_UPLOAD_PG_RESERVED3 (0xF<<0)
  106. #define L4_KCQ_UPLOAD_PG_RESERVED3_SHIFT 0
  107. #define L4_KCQ_UPLOAD_PG_LAYER_CODE (0x7<<4)
  108. #define L4_KCQ_UPLOAD_PG_LAYER_CODE_SHIFT 4
  109. #define L4_KCQ_UPLOAD_PG_RESERVED4 (0x1<<7)
  110. #define L4_KCQ_UPLOAD_PG_RESERVED4_SHIFT 7
  111. u8 op_code;
  112. u16 qe_self_seq;
  113. #elif defined(__LITTLE_ENDIAN)
  114. u16 qe_self_seq;
  115. u8 op_code;
  116. u8 flags;
  117. #define L4_KCQ_UPLOAD_PG_RESERVED3 (0xF<<0)
  118. #define L4_KCQ_UPLOAD_PG_RESERVED3_SHIFT 0
  119. #define L4_KCQ_UPLOAD_PG_LAYER_CODE (0x7<<4)
  120. #define L4_KCQ_UPLOAD_PG_LAYER_CODE_SHIFT 4
  121. #define L4_KCQ_UPLOAD_PG_RESERVED4 (0x1<<7)
  122. #define L4_KCQ_UPLOAD_PG_RESERVED4_SHIFT 7
  123. #endif
  124. };
  125. /*
  126. * Gracefully close the connection request
  127. */
  128. struct l4_kwq_close_req {
  129. #if defined(__BIG_ENDIAN)
  130. u8 flags;
  131. #define L4_KWQ_CLOSE_REQ_RESERVED1 (0xF<<0)
  132. #define L4_KWQ_CLOSE_REQ_RESERVED1_SHIFT 0
  133. #define L4_KWQ_CLOSE_REQ_LAYER_CODE (0x7<<4)
  134. #define L4_KWQ_CLOSE_REQ_LAYER_CODE_SHIFT 4
  135. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT (0x1<<7)
  136. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT_SHIFT 7
  137. u8 op_code;
  138. u16 reserved0;
  139. #elif defined(__LITTLE_ENDIAN)
  140. u16 reserved0;
  141. u8 op_code;
  142. u8 flags;
  143. #define L4_KWQ_CLOSE_REQ_RESERVED1 (0xF<<0)
  144. #define L4_KWQ_CLOSE_REQ_RESERVED1_SHIFT 0
  145. #define L4_KWQ_CLOSE_REQ_LAYER_CODE (0x7<<4)
  146. #define L4_KWQ_CLOSE_REQ_LAYER_CODE_SHIFT 4
  147. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT (0x1<<7)
  148. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT_SHIFT 7
  149. #endif
  150. u32 cid;
  151. u32 reserved2[6];
  152. };
  153. /*
  154. * The first request to be passed in order to establish connection in option2
  155. */
  156. struct l4_kwq_connect_req1 {
  157. #if defined(__BIG_ENDIAN)
  158. u8 flags;
  159. #define L4_KWQ_CONNECT_REQ1_RESERVED1 (0xF<<0)
  160. #define L4_KWQ_CONNECT_REQ1_RESERVED1_SHIFT 0
  161. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE (0x7<<4)
  162. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE_SHIFT 4
  163. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT (0x1<<7)
  164. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT_SHIFT 7
  165. u8 op_code;
  166. u8 reserved0;
  167. u8 conn_flags;
  168. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE (0x1<<0)
  169. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE_SHIFT 0
  170. #define L4_KWQ_CONNECT_REQ1_IP_V6 (0x1<<1)
  171. #define L4_KWQ_CONNECT_REQ1_IP_V6_SHIFT 1
  172. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG (0x1<<2)
  173. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG_SHIFT 2
  174. #define L4_KWQ_CONNECT_REQ1_RSRV (0x1F<<3)
  175. #define L4_KWQ_CONNECT_REQ1_RSRV_SHIFT 3
  176. #elif defined(__LITTLE_ENDIAN)
  177. u8 conn_flags;
  178. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE (0x1<<0)
  179. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE_SHIFT 0
  180. #define L4_KWQ_CONNECT_REQ1_IP_V6 (0x1<<1)
  181. #define L4_KWQ_CONNECT_REQ1_IP_V6_SHIFT 1
  182. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG (0x1<<2)
  183. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG_SHIFT 2
  184. #define L4_KWQ_CONNECT_REQ1_RSRV (0x1F<<3)
  185. #define L4_KWQ_CONNECT_REQ1_RSRV_SHIFT 3
  186. u8 reserved0;
  187. u8 op_code;
  188. u8 flags;
  189. #define L4_KWQ_CONNECT_REQ1_RESERVED1 (0xF<<0)
  190. #define L4_KWQ_CONNECT_REQ1_RESERVED1_SHIFT 0
  191. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE (0x7<<4)
  192. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE_SHIFT 4
  193. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT (0x1<<7)
  194. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT_SHIFT 7
  195. #endif
  196. u32 cid;
  197. u32 pg_cid;
  198. u32 src_ip;
  199. u32 dst_ip;
  200. #if defined(__BIG_ENDIAN)
  201. u16 dst_port;
  202. u16 src_port;
  203. #elif defined(__LITTLE_ENDIAN)
  204. u16 src_port;
  205. u16 dst_port;
  206. #endif
  207. #if defined(__BIG_ENDIAN)
  208. u8 rsrv1[3];
  209. u8 tcp_flags;
  210. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK (0x1<<0)
  211. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK_SHIFT 0
  212. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE (0x1<<1)
  213. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE_SHIFT 1
  214. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE (0x1<<2)
  215. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE_SHIFT 2
  216. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP (0x1<<3)
  217. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP_SHIFT 3
  218. #define L4_KWQ_CONNECT_REQ1_SACK (0x1<<4)
  219. #define L4_KWQ_CONNECT_REQ1_SACK_SHIFT 4
  220. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING (0x1<<5)
  221. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING_SHIFT 5
  222. #define L4_KWQ_CONNECT_REQ1_RESERVED2 (0x3<<6)
  223. #define L4_KWQ_CONNECT_REQ1_RESERVED2_SHIFT 6
  224. #elif defined(__LITTLE_ENDIAN)
  225. u8 tcp_flags;
  226. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK (0x1<<0)
  227. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK_SHIFT 0
  228. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE (0x1<<1)
  229. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE_SHIFT 1
  230. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE (0x1<<2)
  231. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE_SHIFT 2
  232. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP (0x1<<3)
  233. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP_SHIFT 3
  234. #define L4_KWQ_CONNECT_REQ1_SACK (0x1<<4)
  235. #define L4_KWQ_CONNECT_REQ1_SACK_SHIFT 4
  236. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING (0x1<<5)
  237. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING_SHIFT 5
  238. #define L4_KWQ_CONNECT_REQ1_RESERVED2 (0x3<<6)
  239. #define L4_KWQ_CONNECT_REQ1_RESERVED2_SHIFT 6
  240. u8 rsrv1[3];
  241. #endif
  242. u32 rsrv2;
  243. };
  244. /*
  245. * The second ( optional )request to be passed in order to establish
  246. * connection in option2 - for IPv6 only
  247. */
  248. struct l4_kwq_connect_req2 {
  249. #if defined(__BIG_ENDIAN)
  250. u8 flags;
  251. #define L4_KWQ_CONNECT_REQ2_RESERVED1 (0xF<<0)
  252. #define L4_KWQ_CONNECT_REQ2_RESERVED1_SHIFT 0
  253. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE (0x7<<4)
  254. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE_SHIFT 4
  255. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT (0x1<<7)
  256. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT_SHIFT 7
  257. u8 op_code;
  258. u8 reserved0;
  259. u8 rsrv;
  260. #elif defined(__LITTLE_ENDIAN)
  261. u8 rsrv;
  262. u8 reserved0;
  263. u8 op_code;
  264. u8 flags;
  265. #define L4_KWQ_CONNECT_REQ2_RESERVED1 (0xF<<0)
  266. #define L4_KWQ_CONNECT_REQ2_RESERVED1_SHIFT 0
  267. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE (0x7<<4)
  268. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE_SHIFT 4
  269. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT (0x1<<7)
  270. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT_SHIFT 7
  271. #endif
  272. u32 reserved2;
  273. u32 src_ip_v6_2;
  274. u32 src_ip_v6_3;
  275. u32 src_ip_v6_4;
  276. u32 dst_ip_v6_2;
  277. u32 dst_ip_v6_3;
  278. u32 dst_ip_v6_4;
  279. };
  280. /*
  281. * The third ( and last )request to be passed in order to establish
  282. * connection in option2
  283. */
  284. struct l4_kwq_connect_req3 {
  285. #if defined(__BIG_ENDIAN)
  286. u8 flags;
  287. #define L4_KWQ_CONNECT_REQ3_RESERVED1 (0xF<<0)
  288. #define L4_KWQ_CONNECT_REQ3_RESERVED1_SHIFT 0
  289. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE (0x7<<4)
  290. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE_SHIFT 4
  291. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT (0x1<<7)
  292. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT_SHIFT 7
  293. u8 op_code;
  294. u16 reserved0;
  295. #elif defined(__LITTLE_ENDIAN)
  296. u16 reserved0;
  297. u8 op_code;
  298. u8 flags;
  299. #define L4_KWQ_CONNECT_REQ3_RESERVED1 (0xF<<0)
  300. #define L4_KWQ_CONNECT_REQ3_RESERVED1_SHIFT 0
  301. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE (0x7<<4)
  302. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE_SHIFT 4
  303. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT (0x1<<7)
  304. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT_SHIFT 7
  305. #endif
  306. u32 ka_timeout;
  307. u32 ka_interval ;
  308. #if defined(__BIG_ENDIAN)
  309. u8 snd_seq_scale;
  310. u8 ttl;
  311. u8 tos;
  312. u8 ka_max_probe_count;
  313. #elif defined(__LITTLE_ENDIAN)
  314. u8 ka_max_probe_count;
  315. u8 tos;
  316. u8 ttl;
  317. u8 snd_seq_scale;
  318. #endif
  319. #if defined(__BIG_ENDIAN)
  320. u16 pmtu;
  321. u16 mss;
  322. #elif defined(__LITTLE_ENDIAN)
  323. u16 mss;
  324. u16 pmtu;
  325. #endif
  326. u32 rcv_buf;
  327. u32 snd_buf;
  328. u32 seed;
  329. };
  330. /*
  331. * a KWQE request to offload a PG connection
  332. */
  333. struct l4_kwq_offload_pg {
  334. #if defined(__BIG_ENDIAN)
  335. u8 flags;
  336. #define L4_KWQ_OFFLOAD_PG_RESERVED1 (0xF<<0)
  337. #define L4_KWQ_OFFLOAD_PG_RESERVED1_SHIFT 0
  338. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE (0x7<<4)
  339. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE_SHIFT 4
  340. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT (0x1<<7)
  341. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT_SHIFT 7
  342. u8 op_code;
  343. u16 reserved0;
  344. #elif defined(__LITTLE_ENDIAN)
  345. u16 reserved0;
  346. u8 op_code;
  347. u8 flags;
  348. #define L4_KWQ_OFFLOAD_PG_RESERVED1 (0xF<<0)
  349. #define L4_KWQ_OFFLOAD_PG_RESERVED1_SHIFT 0
  350. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE (0x7<<4)
  351. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE_SHIFT 4
  352. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT (0x1<<7)
  353. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT_SHIFT 7
  354. #endif
  355. #if defined(__BIG_ENDIAN)
  356. u8 l2hdr_nbytes;
  357. u8 pg_flags;
  358. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP (0x1<<0)
  359. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP_SHIFT 0
  360. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING (0x1<<1)
  361. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING_SHIFT 1
  362. #define L4_KWQ_OFFLOAD_PG_RESERVED2 (0x3F<<2)
  363. #define L4_KWQ_OFFLOAD_PG_RESERVED2_SHIFT 2
  364. u8 da0;
  365. u8 da1;
  366. #elif defined(__LITTLE_ENDIAN)
  367. u8 da1;
  368. u8 da0;
  369. u8 pg_flags;
  370. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP (0x1<<0)
  371. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP_SHIFT 0
  372. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING (0x1<<1)
  373. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING_SHIFT 1
  374. #define L4_KWQ_OFFLOAD_PG_RESERVED2 (0x3F<<2)
  375. #define L4_KWQ_OFFLOAD_PG_RESERVED2_SHIFT 2
  376. u8 l2hdr_nbytes;
  377. #endif
  378. #if defined(__BIG_ENDIAN)
  379. u8 da2;
  380. u8 da3;
  381. u8 da4;
  382. u8 da5;
  383. #elif defined(__LITTLE_ENDIAN)
  384. u8 da5;
  385. u8 da4;
  386. u8 da3;
  387. u8 da2;
  388. #endif
  389. #if defined(__BIG_ENDIAN)
  390. u8 sa0;
  391. u8 sa1;
  392. u8 sa2;
  393. u8 sa3;
  394. #elif defined(__LITTLE_ENDIAN)
  395. u8 sa3;
  396. u8 sa2;
  397. u8 sa1;
  398. u8 sa0;
  399. #endif
  400. #if defined(__BIG_ENDIAN)
  401. u8 sa4;
  402. u8 sa5;
  403. u16 etype;
  404. #elif defined(__LITTLE_ENDIAN)
  405. u16 etype;
  406. u8 sa5;
  407. u8 sa4;
  408. #endif
  409. #if defined(__BIG_ENDIAN)
  410. u16 vlan_tag;
  411. u16 ipid_start;
  412. #elif defined(__LITTLE_ENDIAN)
  413. u16 ipid_start;
  414. u16 vlan_tag;
  415. #endif
  416. #if defined(__BIG_ENDIAN)
  417. u16 ipid_count;
  418. u16 reserved3;
  419. #elif defined(__LITTLE_ENDIAN)
  420. u16 reserved3;
  421. u16 ipid_count;
  422. #endif
  423. u32 host_opaque;
  424. };
  425. /*
  426. * Abortively close the connection request
  427. */
  428. struct l4_kwq_reset_req {
  429. #if defined(__BIG_ENDIAN)
  430. u8 flags;
  431. #define L4_KWQ_RESET_REQ_RESERVED1 (0xF<<0)
  432. #define L4_KWQ_RESET_REQ_RESERVED1_SHIFT 0
  433. #define L4_KWQ_RESET_REQ_LAYER_CODE (0x7<<4)
  434. #define L4_KWQ_RESET_REQ_LAYER_CODE_SHIFT 4
  435. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT (0x1<<7)
  436. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT_SHIFT 7
  437. u8 op_code;
  438. u16 reserved0;
  439. #elif defined(__LITTLE_ENDIAN)
  440. u16 reserved0;
  441. u8 op_code;
  442. u8 flags;
  443. #define L4_KWQ_RESET_REQ_RESERVED1 (0xF<<0)
  444. #define L4_KWQ_RESET_REQ_RESERVED1_SHIFT 0
  445. #define L4_KWQ_RESET_REQ_LAYER_CODE (0x7<<4)
  446. #define L4_KWQ_RESET_REQ_LAYER_CODE_SHIFT 4
  447. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT (0x1<<7)
  448. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT_SHIFT 7
  449. #endif
  450. u32 cid;
  451. u32 reserved2[6];
  452. };
  453. /*
  454. * a KWQE request to update a PG connection
  455. */
  456. struct l4_kwq_update_pg {
  457. #if defined(__BIG_ENDIAN)
  458. u8 flags;
  459. #define L4_KWQ_UPDATE_PG_RESERVED1 (0xF<<0)
  460. #define L4_KWQ_UPDATE_PG_RESERVED1_SHIFT 0
  461. #define L4_KWQ_UPDATE_PG_LAYER_CODE (0x7<<4)
  462. #define L4_KWQ_UPDATE_PG_LAYER_CODE_SHIFT 4
  463. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT (0x1<<7)
  464. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT_SHIFT 7
  465. u8 opcode;
  466. u16 oper16;
  467. #elif defined(__LITTLE_ENDIAN)
  468. u16 oper16;
  469. u8 opcode;
  470. u8 flags;
  471. #define L4_KWQ_UPDATE_PG_RESERVED1 (0xF<<0)
  472. #define L4_KWQ_UPDATE_PG_RESERVED1_SHIFT 0
  473. #define L4_KWQ_UPDATE_PG_LAYER_CODE (0x7<<4)
  474. #define L4_KWQ_UPDATE_PG_LAYER_CODE_SHIFT 4
  475. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT (0x1<<7)
  476. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT_SHIFT 7
  477. #endif
  478. u32 pg_cid;
  479. u32 pg_host_opaque;
  480. #if defined(__BIG_ENDIAN)
  481. u8 pg_valids;
  482. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT (0x1<<0)
  483. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT_SHIFT 0
  484. #define L4_KWQ_UPDATE_PG_VALIDS_DA (0x1<<1)
  485. #define L4_KWQ_UPDATE_PG_VALIDS_DA_SHIFT 1
  486. #define L4_KWQ_UPDATE_PG_RESERVERD2 (0x3F<<2)
  487. #define L4_KWQ_UPDATE_PG_RESERVERD2_SHIFT 2
  488. u8 pg_unused_a;
  489. u16 pg_ipid_count;
  490. #elif defined(__LITTLE_ENDIAN)
  491. u16 pg_ipid_count;
  492. u8 pg_unused_a;
  493. u8 pg_valids;
  494. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT (0x1<<0)
  495. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT_SHIFT 0
  496. #define L4_KWQ_UPDATE_PG_VALIDS_DA (0x1<<1)
  497. #define L4_KWQ_UPDATE_PG_VALIDS_DA_SHIFT 1
  498. #define L4_KWQ_UPDATE_PG_RESERVERD2 (0x3F<<2)
  499. #define L4_KWQ_UPDATE_PG_RESERVERD2_SHIFT 2
  500. #endif
  501. #if defined(__BIG_ENDIAN)
  502. u16 reserverd3;
  503. u8 da0;
  504. u8 da1;
  505. #elif defined(__LITTLE_ENDIAN)
  506. u8 da1;
  507. u8 da0;
  508. u16 reserverd3;
  509. #endif
  510. #if defined(__BIG_ENDIAN)
  511. u8 da2;
  512. u8 da3;
  513. u8 da4;
  514. u8 da5;
  515. #elif defined(__LITTLE_ENDIAN)
  516. u8 da5;
  517. u8 da4;
  518. u8 da3;
  519. u8 da2;
  520. #endif
  521. u32 reserved4;
  522. u32 reserved5;
  523. };
  524. /*
  525. * a KWQE request to upload a PG or L4 context
  526. */
  527. struct l4_kwq_upload {
  528. #if defined(__BIG_ENDIAN)
  529. u8 flags;
  530. #define L4_KWQ_UPLOAD_RESERVED1 (0xF<<0)
  531. #define L4_KWQ_UPLOAD_RESERVED1_SHIFT 0
  532. #define L4_KWQ_UPLOAD_LAYER_CODE (0x7<<4)
  533. #define L4_KWQ_UPLOAD_LAYER_CODE_SHIFT 4
  534. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT (0x1<<7)
  535. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT_SHIFT 7
  536. u8 opcode;
  537. u16 oper16;
  538. #elif defined(__LITTLE_ENDIAN)
  539. u16 oper16;
  540. u8 opcode;
  541. u8 flags;
  542. #define L4_KWQ_UPLOAD_RESERVED1 (0xF<<0)
  543. #define L4_KWQ_UPLOAD_RESERVED1_SHIFT 0
  544. #define L4_KWQ_UPLOAD_LAYER_CODE (0x7<<4)
  545. #define L4_KWQ_UPLOAD_LAYER_CODE_SHIFT 4
  546. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT (0x1<<7)
  547. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT_SHIFT 7
  548. #endif
  549. u32 cid;
  550. u32 reserved2[6];
  551. };
  552. /*
  553. * bnx2x structures
  554. */
  555. /*
  556. * iSCSI context region, used only in iSCSI
  557. */
  558. struct ustorm_iscsi_rq_db {
  559. struct regpair pbl_base;
  560. struct regpair curr_pbe;
  561. };
  562. /*
  563. * iSCSI context region, used only in iSCSI
  564. */
  565. struct ustorm_iscsi_r2tq_db {
  566. struct regpair pbl_base;
  567. struct regpair curr_pbe;
  568. };
  569. /*
  570. * iSCSI context region, used only in iSCSI
  571. */
  572. struct ustorm_iscsi_cq_db {
  573. #if defined(__BIG_ENDIAN)
  574. u16 cq_sn;
  575. u16 prod;
  576. #elif defined(__LITTLE_ENDIAN)
  577. u16 prod;
  578. u16 cq_sn;
  579. #endif
  580. struct regpair curr_pbe;
  581. };
  582. /*
  583. * iSCSI context region, used only in iSCSI
  584. */
  585. struct rings_db {
  586. struct ustorm_iscsi_rq_db rq;
  587. struct ustorm_iscsi_r2tq_db r2tq;
  588. struct ustorm_iscsi_cq_db cq[8];
  589. #if defined(__BIG_ENDIAN)
  590. u16 rq_prod;
  591. u16 r2tq_prod;
  592. #elif defined(__LITTLE_ENDIAN)
  593. u16 r2tq_prod;
  594. u16 rq_prod;
  595. #endif
  596. struct regpair cq_pbl_base;
  597. };
  598. /*
  599. * iSCSI context region, used only in iSCSI
  600. */
  601. struct ustorm_iscsi_placement_db {
  602. u32 sgl_base_lo;
  603. u32 sgl_base_hi;
  604. u32 local_sge_0_address_hi;
  605. u32 local_sge_0_address_lo;
  606. #if defined(__BIG_ENDIAN)
  607. u16 curr_sge_offset;
  608. u16 local_sge_0_size;
  609. #elif defined(__LITTLE_ENDIAN)
  610. u16 local_sge_0_size;
  611. u16 curr_sge_offset;
  612. #endif
  613. u32 local_sge_1_address_hi;
  614. u32 local_sge_1_address_lo;
  615. #if defined(__BIG_ENDIAN)
  616. u16 reserved6;
  617. u16 local_sge_1_size;
  618. #elif defined(__LITTLE_ENDIAN)
  619. u16 local_sge_1_size;
  620. u16 reserved6;
  621. #endif
  622. #if defined(__BIG_ENDIAN)
  623. u8 sgl_size;
  624. u8 local_sge_index_2b;
  625. u16 reserved7;
  626. #elif defined(__LITTLE_ENDIAN)
  627. u16 reserved7;
  628. u8 local_sge_index_2b;
  629. u8 sgl_size;
  630. #endif
  631. u32 rem_pdu;
  632. u32 place_db_bitfield_1;
  633. #define USTORM_ISCSI_PLACEMENT_DB_REM_PDU_PAYLOAD (0xFFFFFF<<0)
  634. #define USTORM_ISCSI_PLACEMENT_DB_REM_PDU_PAYLOAD_SHIFT 0
  635. #define USTORM_ISCSI_PLACEMENT_DB_CQ_ID (0xFF<<24)
  636. #define USTORM_ISCSI_PLACEMENT_DB_CQ_ID_SHIFT 24
  637. u32 place_db_bitfield_2;
  638. #define USTORM_ISCSI_PLACEMENT_DB_BYTES_2_TRUNCATE (0xFFFFFF<<0)
  639. #define USTORM_ISCSI_PLACEMENT_DB_BYTES_2_TRUNCATE_SHIFT 0
  640. #define USTORM_ISCSI_PLACEMENT_DB_HOST_SGE_INDEX (0xFF<<24)
  641. #define USTORM_ISCSI_PLACEMENT_DB_HOST_SGE_INDEX_SHIFT 24
  642. u32 nal;
  643. #define USTORM_ISCSI_PLACEMENT_DB_REM_SGE_SIZE (0xFFFFFF<<0)
  644. #define USTORM_ISCSI_PLACEMENT_DB_REM_SGE_SIZE_SHIFT 0
  645. #define USTORM_ISCSI_PLACEMENT_DB_EXP_PADDING_2B (0x3<<24)
  646. #define USTORM_ISCSI_PLACEMENT_DB_EXP_PADDING_2B_SHIFT 24
  647. #define USTORM_ISCSI_PLACEMENT_DB_EXP_DIGEST_3B (0x7<<26)
  648. #define USTORM_ISCSI_PLACEMENT_DB_EXP_DIGEST_3B_SHIFT 26
  649. #define USTORM_ISCSI_PLACEMENT_DB_NAL_LEN_3B (0x7<<29)
  650. #define USTORM_ISCSI_PLACEMENT_DB_NAL_LEN_3B_SHIFT 29
  651. };
  652. /*
  653. * Ustorm iSCSI Storm Context
  654. */
  655. struct ustorm_iscsi_st_context {
  656. u32 exp_stat_sn;
  657. u32 exp_data_sn;
  658. struct rings_db ring;
  659. struct regpair task_pbl_base;
  660. struct regpair tce_phy_addr;
  661. struct ustorm_iscsi_placement_db place_db;
  662. u32 data_rcv_seq;
  663. u32 rem_rcv_len;
  664. #if defined(__BIG_ENDIAN)
  665. u16 hdr_itt;
  666. u16 iscsi_conn_id;
  667. #elif defined(__LITTLE_ENDIAN)
  668. u16 iscsi_conn_id;
  669. u16 hdr_itt;
  670. #endif
  671. u32 nal_bytes;
  672. #if defined(__BIG_ENDIAN)
  673. u8 hdr_second_byte_union;
  674. u8 bitfield_0;
  675. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU (0x1<<0)
  676. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU_SHIFT 0
  677. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE (0x1<<1)
  678. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE_SHIFT 1
  679. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1 (0x3F<<2)
  680. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1_SHIFT 2
  681. u8 task_pdu_cache_index;
  682. u8 task_pbe_cache_index;
  683. #elif defined(__LITTLE_ENDIAN)
  684. u8 task_pbe_cache_index;
  685. u8 task_pdu_cache_index;
  686. u8 bitfield_0;
  687. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU (0x1<<0)
  688. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU_SHIFT 0
  689. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE (0x1<<1)
  690. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE_SHIFT 1
  691. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1 (0x3F<<2)
  692. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1_SHIFT 2
  693. u8 hdr_second_byte_union;
  694. #endif
  695. #if defined(__BIG_ENDIAN)
  696. u16 reserved3;
  697. u8 reserved2;
  698. u8 acDecrement;
  699. #elif defined(__LITTLE_ENDIAN)
  700. u8 acDecrement;
  701. u8 reserved2;
  702. u16 reserved3;
  703. #endif
  704. u32 task_stat;
  705. #if defined(__BIG_ENDIAN)
  706. u8 hdr_opcode;
  707. u8 num_cqs;
  708. u16 reserved5;
  709. #elif defined(__LITTLE_ENDIAN)
  710. u16 reserved5;
  711. u8 num_cqs;
  712. u8 hdr_opcode;
  713. #endif
  714. u32 negotiated_rx;
  715. #define USTORM_ISCSI_ST_CONTEXT_MAX_RECV_PDU_LENGTH (0xFFFFFF<<0)
  716. #define USTORM_ISCSI_ST_CONTEXT_MAX_RECV_PDU_LENGTH_SHIFT 0
  717. #define USTORM_ISCSI_ST_CONTEXT_MAX_OUTSTANDING_R2TS (0xFF<<24)
  718. #define USTORM_ISCSI_ST_CONTEXT_MAX_OUTSTANDING_R2TS_SHIFT 24
  719. u32 negotiated_rx_and_flags;
  720. #define USTORM_ISCSI_ST_CONTEXT_MAX_BURST_LENGTH (0xFFFFFF<<0)
  721. #define USTORM_ISCSI_ST_CONTEXT_MAX_BURST_LENGTH_SHIFT 0
  722. #define USTORM_ISCSI_ST_CONTEXT_B_CQE_POSTED_OR_HEADER_CACHED (0x1<<24)
  723. #define USTORM_ISCSI_ST_CONTEXT_B_CQE_POSTED_OR_HEADER_CACHED_SHIFT 24
  724. #define USTORM_ISCSI_ST_CONTEXT_B_HDR_DIGEST_EN (0x1<<25)
  725. #define USTORM_ISCSI_ST_CONTEXT_B_HDR_DIGEST_EN_SHIFT 25
  726. #define USTORM_ISCSI_ST_CONTEXT_B_DATA_DIGEST_EN (0x1<<26)
  727. #define USTORM_ISCSI_ST_CONTEXT_B_DATA_DIGEST_EN_SHIFT 26
  728. #define USTORM_ISCSI_ST_CONTEXT_B_PROTOCOL_ERROR (0x1<<27)
  729. #define USTORM_ISCSI_ST_CONTEXT_B_PROTOCOL_ERROR_SHIFT 27
  730. #define USTORM_ISCSI_ST_CONTEXT_B_TASK_VALID (0x1<<28)
  731. #define USTORM_ISCSI_ST_CONTEXT_B_TASK_VALID_SHIFT 28
  732. #define USTORM_ISCSI_ST_CONTEXT_TASK_TYPE (0x3<<29)
  733. #define USTORM_ISCSI_ST_CONTEXT_TASK_TYPE_SHIFT 29
  734. #define USTORM_ISCSI_ST_CONTEXT_B_ALL_DATA_ACKED (0x1<<31)
  735. #define USTORM_ISCSI_ST_CONTEXT_B_ALL_DATA_ACKED_SHIFT 31
  736. };
  737. /*
  738. * TCP context region, shared in TOE, RDMA and ISCSI
  739. */
  740. struct tstorm_tcp_st_context_section {
  741. u32 flags1;
  742. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_SRTT_20B (0xFFFFFF<<0)
  743. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_SRTT_20B_SHIFT 0
  744. #define TSTORM_TCP_ST_CONTEXT_SECTION_PAWS_INVALID (0x1<<24)
  745. #define TSTORM_TCP_ST_CONTEXT_SECTION_PAWS_INVALID_SHIFT 24
  746. #define TSTORM_TCP_ST_CONTEXT_SECTION_TIMESTAMP_EXISTS (0x1<<25)
  747. #define TSTORM_TCP_ST_CONTEXT_SECTION_TIMESTAMP_EXISTS_SHIFT 25
  748. #define TSTORM_TCP_ST_CONTEXT_SECTION_ISLE_EXISTS (0x1<<26)
  749. #define TSTORM_TCP_ST_CONTEXT_SECTION_ISLE_EXISTS_SHIFT 26
  750. #define TSTORM_TCP_ST_CONTEXT_SECTION_STOP_RX_PAYLOAD (0x1<<27)
  751. #define TSTORM_TCP_ST_CONTEXT_SECTION_STOP_RX_PAYLOAD_SHIFT 27
  752. #define TSTORM_TCP_ST_CONTEXT_SECTION_KA_ENABLED (0x1<<28)
  753. #define TSTORM_TCP_ST_CONTEXT_SECTION_KA_ENABLED_SHIFT 28
  754. #define TSTORM_TCP_ST_CONTEXT_SECTION_FIRST_RTO_ESTIMATE (0x1<<29)
  755. #define TSTORM_TCP_ST_CONTEXT_SECTION_FIRST_RTO_ESTIMATE_SHIFT 29
  756. #define TSTORM_TCP_ST_CONTEXT_SECTION_MAX_SEG_RETRANSMIT_EN (0x1<<30)
  757. #define TSTORM_TCP_ST_CONTEXT_SECTION_MAX_SEG_RETRANSMIT_EN_SHIFT 30
  758. #define TSTORM_TCP_ST_CONTEXT_SECTION_RESERVED3 (0x1<<31)
  759. #define TSTORM_TCP_ST_CONTEXT_SECTION_RESERVED3_SHIFT 31
  760. u32 flags2;
  761. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_VARIATION_20B (0xFFFFFF<<0)
  762. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_VARIATION_20B_SHIFT 0
  763. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_EN (0x1<<24)
  764. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_EN_SHIFT 24
  765. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_COUNTER_EN (0x1<<25)
  766. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_COUNTER_EN_SHIFT 25
  767. #define __TSTORM_TCP_ST_CONTEXT_SECTION_KA_PROBE_SENT (0x1<<26)
  768. #define __TSTORM_TCP_ST_CONTEXT_SECTION_KA_PROBE_SENT_SHIFT 26
  769. #define __TSTORM_TCP_ST_CONTEXT_SECTION_PERSIST_PROBE_SENT (0x1<<27)
  770. #define __TSTORM_TCP_ST_CONTEXT_SECTION_PERSIST_PROBE_SENT_SHIFT 27
  771. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<28)
  772. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 28
  773. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<29)
  774. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 29
  775. #define __TSTORM_TCP_ST_CONTEXT_SECTION_SECOND_ISLE_DROPPED (0x1<<30)
  776. #define __TSTORM_TCP_ST_CONTEXT_SECTION_SECOND_ISLE_DROPPED_SHIFT 30
  777. #define __TSTORM_TCP_ST_CONTEXT_SECTION_DONT_SUPPORT_OOO (0x1<<31)
  778. #define __TSTORM_TCP_ST_CONTEXT_SECTION_DONT_SUPPORT_OOO_SHIFT 31
  779. #if defined(__BIG_ENDIAN)
  780. u16 reserved_slowpath;
  781. u8 tcp_sm_state_3b;
  782. u8 rto_exp_3b;
  783. #elif defined(__LITTLE_ENDIAN)
  784. u8 rto_exp_3b;
  785. u8 tcp_sm_state_3b;
  786. u16 reserved_slowpath;
  787. #endif
  788. u32 rcv_nxt;
  789. u32 timestamp_recent;
  790. u32 timestamp_recent_time;
  791. u32 cwnd;
  792. u32 ss_thresh;
  793. u32 cwnd_accum;
  794. u32 prev_seg_seq;
  795. u32 expected_rel_seq;
  796. u32 recover;
  797. #if defined(__BIG_ENDIAN)
  798. u8 retransmit_count;
  799. u8 ka_max_probe_count;
  800. u8 persist_probe_count;
  801. u8 ka_probe_count;
  802. #elif defined(__LITTLE_ENDIAN)
  803. u8 ka_probe_count;
  804. u8 persist_probe_count;
  805. u8 ka_max_probe_count;
  806. u8 retransmit_count;
  807. #endif
  808. #if defined(__BIG_ENDIAN)
  809. u8 statistics_counter_id;
  810. u8 ooo_support_mode;
  811. u8 snd_wnd_scale_4b;
  812. u8 dup_ack_count;
  813. #elif defined(__LITTLE_ENDIAN)
  814. u8 dup_ack_count;
  815. u8 snd_wnd_scale_4b;
  816. u8 ooo_support_mode;
  817. u8 statistics_counter_id;
  818. #endif
  819. u32 retransmit_start_time;
  820. u32 ka_timeout;
  821. u32 ka_interval;
  822. u32 isle_start_seq;
  823. u32 isle_end_seq;
  824. #if defined(__BIG_ENDIAN)
  825. u16 mss;
  826. u16 recent_seg_wnd;
  827. #elif defined(__LITTLE_ENDIAN)
  828. u16 recent_seg_wnd;
  829. u16 mss;
  830. #endif
  831. u32 reserved4;
  832. u32 max_rt_time;
  833. #if defined(__BIG_ENDIAN)
  834. u16 lsb_mac_address;
  835. u16 vlan_id;
  836. #elif defined(__LITTLE_ENDIAN)
  837. u16 vlan_id;
  838. u16 lsb_mac_address;
  839. #endif
  840. u32 msb_mac_address;
  841. u32 reserved2;
  842. };
  843. /*
  844. * Termination variables
  845. */
  846. struct iscsi_term_vars {
  847. u8 BitMap;
  848. #define ISCSI_TERM_VARS_TCP_STATE (0xF<<0)
  849. #define ISCSI_TERM_VARS_TCP_STATE_SHIFT 0
  850. #define ISCSI_TERM_VARS_FIN_RECEIVED_SBIT (0x1<<4)
  851. #define ISCSI_TERM_VARS_FIN_RECEIVED_SBIT_SHIFT 4
  852. #define ISCSI_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT (0x1<<5)
  853. #define ISCSI_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT_SHIFT 5
  854. #define ISCSI_TERM_VARS_TERM_ON_CHIP (0x1<<6)
  855. #define ISCSI_TERM_VARS_TERM_ON_CHIP_SHIFT 6
  856. #define ISCSI_TERM_VARS_RSRV (0x1<<7)
  857. #define ISCSI_TERM_VARS_RSRV_SHIFT 7
  858. };
  859. /*
  860. * iSCSI context region, used only in iSCSI
  861. */
  862. struct tstorm_iscsi_st_context_section {
  863. #if defined(__BIG_ENDIAN)
  864. u16 rem_tcp_data_len;
  865. u16 brb_offset;
  866. #elif defined(__LITTLE_ENDIAN)
  867. u16 brb_offset;
  868. u16 rem_tcp_data_len;
  869. #endif
  870. u32 b2nh;
  871. #if defined(__BIG_ENDIAN)
  872. u16 rq_cons;
  873. u8 flags;
  874. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN (0x1<<0)
  875. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN_SHIFT 0
  876. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN (0x1<<1)
  877. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN_SHIFT 1
  878. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER (0x1<<2)
  879. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER_SHIFT 2
  880. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE (0x1<<3)
  881. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE_SHIFT 3
  882. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS (0x1<<4)
  883. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS_SHIFT 4
  884. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_FLAGS_RSRV (0x7<<5)
  885. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_FLAGS_RSRV_SHIFT 5
  886. u8 hdr_bytes_2_fetch;
  887. #elif defined(__LITTLE_ENDIAN)
  888. u8 hdr_bytes_2_fetch;
  889. u8 flags;
  890. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN (0x1<<0)
  891. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN_SHIFT 0
  892. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN (0x1<<1)
  893. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN_SHIFT 1
  894. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER (0x1<<2)
  895. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER_SHIFT 2
  896. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE (0x1<<3)
  897. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE_SHIFT 3
  898. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS (0x1<<4)
  899. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS_SHIFT 4
  900. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_FLAGS_RSRV (0x7<<5)
  901. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_FLAGS_RSRV_SHIFT 5
  902. u16 rq_cons;
  903. #endif
  904. struct regpair rq_db_phy_addr;
  905. #if defined(__BIG_ENDIAN)
  906. struct iscsi_term_vars term_vars;
  907. u8 scratchpad_idx;
  908. u16 iscsi_conn_id;
  909. #elif defined(__LITTLE_ENDIAN)
  910. u16 iscsi_conn_id;
  911. u8 scratchpad_idx;
  912. struct iscsi_term_vars term_vars;
  913. #endif
  914. u32 reserved2;
  915. };
  916. /*
  917. * The iSCSI non-aggregative context of Tstorm
  918. */
  919. struct tstorm_iscsi_st_context {
  920. struct tstorm_tcp_st_context_section tcp;
  921. struct tstorm_iscsi_st_context_section iscsi;
  922. };
  923. /*
  924. * The tcp aggregative context section of Xstorm
  925. */
  926. struct xstorm_tcp_tcp_ag_context_section {
  927. #if defined(__BIG_ENDIAN)
  928. u8 __tcp_agg_vars1;
  929. u8 __da_cnt;
  930. u16 mss;
  931. #elif defined(__LITTLE_ENDIAN)
  932. u16 mss;
  933. u8 __da_cnt;
  934. u8 __tcp_agg_vars1;
  935. #endif
  936. u32 snd_nxt;
  937. u32 tx_wnd;
  938. u32 snd_una;
  939. u32 local_adv_wnd;
  940. #if defined(__BIG_ENDIAN)
  941. u8 __agg_val8_th;
  942. u8 __agg_val8;
  943. u16 tcp_agg_vars2;
  944. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG (0x1<<0)
  945. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_SHIFT 0
  946. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED (0x1<<1)
  947. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED_SHIFT 1
  948. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE (0x1<<2)
  949. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE_SHIFT 2
  950. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
  951. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
  952. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
  953. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
  954. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE (0x1<<5)
  955. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE_SHIFT 5
  956. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN (0x1<<6)
  957. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN_SHIFT 6
  958. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_CF_EN (0x1<<7)
  959. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_CF_EN_SHIFT 7
  960. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN (0x1<<8)
  961. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN_SHIFT 8
  962. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
  963. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
  964. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
  965. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
  966. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
  967. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
  968. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX8_CF (0x3<<14)
  969. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX8_CF_SHIFT 14
  970. #elif defined(__LITTLE_ENDIAN)
  971. u16 tcp_agg_vars2;
  972. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG (0x1<<0)
  973. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_SHIFT 0
  974. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED (0x1<<1)
  975. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED_SHIFT 1
  976. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE (0x1<<2)
  977. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE_SHIFT 2
  978. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
  979. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
  980. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
  981. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
  982. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE (0x1<<5)
  983. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE_SHIFT 5
  984. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN (0x1<<6)
  985. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN_SHIFT 6
  986. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_CF_EN (0x1<<7)
  987. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_CF_EN_SHIFT 7
  988. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN (0x1<<8)
  989. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN_SHIFT 8
  990. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
  991. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
  992. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
  993. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
  994. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
  995. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
  996. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX8_CF (0x3<<14)
  997. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX8_CF_SHIFT 14
  998. u8 __agg_val8;
  999. u8 __agg_val8_th;
  1000. #endif
  1001. u32 ack_to_far_end;
  1002. u32 rto_timer;
  1003. u32 ka_timer;
  1004. u32 ts_to_echo;
  1005. #if defined(__BIG_ENDIAN)
  1006. u16 __agg_val7_th;
  1007. u16 __agg_val7;
  1008. #elif defined(__LITTLE_ENDIAN)
  1009. u16 __agg_val7;
  1010. u16 __agg_val7_th;
  1011. #endif
  1012. #if defined(__BIG_ENDIAN)
  1013. u8 __tcp_agg_vars5;
  1014. u8 __tcp_agg_vars4;
  1015. u8 __tcp_agg_vars3;
  1016. u8 __force_pure_ack_cnt;
  1017. #elif defined(__LITTLE_ENDIAN)
  1018. u8 __force_pure_ack_cnt;
  1019. u8 __tcp_agg_vars3;
  1020. u8 __tcp_agg_vars4;
  1021. u8 __tcp_agg_vars5;
  1022. #endif
  1023. u32 tcp_agg_vars6;
  1024. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_CF_EN (0x1<<0)
  1025. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_CF_EN_SHIFT 0
  1026. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX8_CF_EN (0x1<<1)
  1027. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX8_CF_EN_SHIFT 1
  1028. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_EN (0x1<<2)
  1029. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_EN_SHIFT 2
  1030. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<3)
  1031. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 3
  1032. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX6_FLAG (0x1<<4)
  1033. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX6_FLAG_SHIFT 4
  1034. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX7_FLAG (0x1<<5)
  1035. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX7_FLAG_SHIFT 5
  1036. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX5_CF (0x3<<6)
  1037. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX5_CF_SHIFT 6
  1038. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF (0x3<<8)
  1039. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_SHIFT 8
  1040. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF (0x3<<10)
  1041. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_SHIFT 10
  1042. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF (0x3<<12)
  1043. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_SHIFT 12
  1044. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF (0x3<<14)
  1045. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_SHIFT 14
  1046. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX13_CF (0x3<<16)
  1047. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX13_CF_SHIFT 16
  1048. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX14_CF (0x3<<18)
  1049. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX14_CF_SHIFT 18
  1050. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX15_CF (0x3<<20)
  1051. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX15_CF_SHIFT 20
  1052. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX16_CF (0x3<<22)
  1053. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX16_CF_SHIFT 22
  1054. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX17_CF (0x3<<24)
  1055. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX17_CF_SHIFT 24
  1056. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ECE_FLAG (0x1<<26)
  1057. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ECE_FLAG_SHIFT 26
  1058. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED71 (0x1<<27)
  1059. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED71_SHIFT 27
  1060. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_FORCE_PURE_ACK_CNT_DIRTY (0x1<<28)
  1061. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_FORCE_PURE_ACK_CNT_DIRTY_SHIFT 28
  1062. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TCP_AUTO_STOP_FLAG (0x1<<29)
  1063. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TCP_AUTO_STOP_FLAG_SHIFT 29
  1064. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DO_TS_UPDATE_FLAG (0x1<<30)
  1065. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DO_TS_UPDATE_FLAG_SHIFT 30
  1066. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CANCEL_RETRANSMIT_FLAG (0x1<<31)
  1067. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CANCEL_RETRANSMIT_FLAG_SHIFT 31
  1068. #if defined(__BIG_ENDIAN)
  1069. u16 __agg_misc6;
  1070. u16 __tcp_agg_vars7;
  1071. #elif defined(__LITTLE_ENDIAN)
  1072. u16 __tcp_agg_vars7;
  1073. u16 __agg_misc6;
  1074. #endif
  1075. u32 __agg_val10;
  1076. u32 __agg_val10_th;
  1077. #if defined(__BIG_ENDIAN)
  1078. u16 __reserved3;
  1079. u8 __reserved2;
  1080. u8 __da_only_cnt;
  1081. #elif defined(__LITTLE_ENDIAN)
  1082. u8 __da_only_cnt;
  1083. u8 __reserved2;
  1084. u16 __reserved3;
  1085. #endif
  1086. };
  1087. /*
  1088. * The iscsi aggregative context of Xstorm
  1089. */
  1090. struct xstorm_iscsi_ag_context {
  1091. #if defined(__BIG_ENDIAN)
  1092. u16 agg_val1;
  1093. u8 agg_vars1;
  1094. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1095. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1096. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1097. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1098. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1099. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1100. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1101. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1102. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  1103. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  1104. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN (0x1<<5)
  1105. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN_SHIFT 5
  1106. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  1107. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  1108. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
  1109. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
  1110. u8 state;
  1111. #elif defined(__LITTLE_ENDIAN)
  1112. u8 state;
  1113. u8 agg_vars1;
  1114. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1115. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1116. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1117. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1118. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1119. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1120. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1121. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1122. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  1123. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  1124. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN (0x1<<5)
  1125. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN_SHIFT 5
  1126. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  1127. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  1128. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
  1129. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
  1130. u16 agg_val1;
  1131. #endif
  1132. #if defined(__BIG_ENDIAN)
  1133. u8 cdu_reserved;
  1134. u8 agg_vars4;
  1135. #define XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF (0x3<<0)
  1136. #define XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF_SHIFT 0
  1137. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF (0x3<<2)
  1138. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF_SHIFT 2
  1139. #define __XSTORM_ISCSI_AG_CONTEXT_AUX18_CF_EN (0x1<<4)
  1140. #define __XSTORM_ISCSI_AG_CONTEXT_AUX18_CF_EN_SHIFT 4
  1141. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF_EN (0x1<<5)
  1142. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF_EN_SHIFT 5
  1143. #define __XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF_EN (0x1<<6)
  1144. #define __XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF_EN_SHIFT 6
  1145. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF_EN (0x1<<7)
  1146. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF_EN_SHIFT 7
  1147. u8 agg_vars3;
  1148. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  1149. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  1150. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF (0x3<<6)
  1151. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF_SHIFT 6
  1152. u8 agg_vars2;
  1153. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF (0x3<<0)
  1154. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_SHIFT 0
  1155. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  1156. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  1157. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  1158. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  1159. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  1160. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  1161. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  1162. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  1163. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1164. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1165. #elif defined(__LITTLE_ENDIAN)
  1166. u8 agg_vars2;
  1167. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF (0x3<<0)
  1168. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_SHIFT 0
  1169. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  1170. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  1171. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  1172. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  1173. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  1174. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  1175. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  1176. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  1177. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1178. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1179. u8 agg_vars3;
  1180. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  1181. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  1182. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF (0x3<<6)
  1183. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF_SHIFT 6
  1184. u8 agg_vars4;
  1185. #define XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF (0x3<<0)
  1186. #define XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF_SHIFT 0
  1187. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF (0x3<<2)
  1188. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF_SHIFT 2
  1189. #define __XSTORM_ISCSI_AG_CONTEXT_AUX18_CF_EN (0x1<<4)
  1190. #define __XSTORM_ISCSI_AG_CONTEXT_AUX18_CF_EN_SHIFT 4
  1191. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF_EN (0x1<<5)
  1192. #define __XSTORM_ISCSI_AG_CONTEXT_AUX19_CF_EN_SHIFT 5
  1193. #define __XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF_EN (0x1<<6)
  1194. #define __XSTORM_ISCSI_AG_CONTEXT_R2TQ_PROD_CF_EN_SHIFT 6
  1195. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF_EN (0x1<<7)
  1196. #define __XSTORM_ISCSI_AG_CONTEXT_AUX21_CF_EN_SHIFT 7
  1197. u8 cdu_reserved;
  1198. #endif
  1199. u32 more_to_send;
  1200. #if defined(__BIG_ENDIAN)
  1201. u16 agg_vars5;
  1202. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  1203. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  1204. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  1205. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  1206. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  1207. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  1208. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
  1209. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2_SHIFT 14
  1210. u16 sq_cons;
  1211. #elif defined(__LITTLE_ENDIAN)
  1212. u16 sq_cons;
  1213. u16 agg_vars5;
  1214. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  1215. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  1216. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  1217. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  1218. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  1219. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  1220. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
  1221. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2_SHIFT 14
  1222. #endif
  1223. struct xstorm_tcp_tcp_ag_context_section tcp;
  1224. #if defined(__BIG_ENDIAN)
  1225. u16 agg_vars7;
  1226. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  1227. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  1228. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  1229. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  1230. #define XSTORM_ISCSI_AG_CONTEXT_AUX18_CF (0x3<<4)
  1231. #define XSTORM_ISCSI_AG_CONTEXT_AUX18_CF_SHIFT 4
  1232. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  1233. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  1234. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF (0x3<<8)
  1235. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_SHIFT 8
  1236. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
  1237. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
  1238. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  1239. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  1240. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  1241. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  1242. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  1243. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  1244. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  1245. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  1246. #define __XSTORM_ISCSI_AG_CONTEXT_AUX2_FLAG (0x1<<15)
  1247. #define __XSTORM_ISCSI_AG_CONTEXT_AUX2_FLAG_SHIFT 15
  1248. u8 agg_val3_th;
  1249. u8 agg_vars6;
  1250. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  1251. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  1252. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
  1253. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7_SHIFT 3
  1254. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
  1255. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4_SHIFT 6
  1256. #elif defined(__LITTLE_ENDIAN)
  1257. u8 agg_vars6;
  1258. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  1259. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  1260. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
  1261. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7_SHIFT 3
  1262. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
  1263. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4_SHIFT 6
  1264. u8 agg_val3_th;
  1265. u16 agg_vars7;
  1266. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  1267. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  1268. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  1269. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  1270. #define XSTORM_ISCSI_AG_CONTEXT_AUX18_CF (0x3<<4)
  1271. #define XSTORM_ISCSI_AG_CONTEXT_AUX18_CF_SHIFT 4
  1272. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  1273. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  1274. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF (0x3<<8)
  1275. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_SHIFT 8
  1276. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
  1277. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
  1278. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  1279. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  1280. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  1281. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  1282. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  1283. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  1284. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  1285. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  1286. #define __XSTORM_ISCSI_AG_CONTEXT_AUX2_FLAG (0x1<<15)
  1287. #define __XSTORM_ISCSI_AG_CONTEXT_AUX2_FLAG_SHIFT 15
  1288. #endif
  1289. #if defined(__BIG_ENDIAN)
  1290. u16 __agg_val11_th;
  1291. u16 __agg_val11;
  1292. #elif defined(__LITTLE_ENDIAN)
  1293. u16 __agg_val11;
  1294. u16 __agg_val11_th;
  1295. #endif
  1296. #if defined(__BIG_ENDIAN)
  1297. u8 __reserved1;
  1298. u8 __agg_val6_th;
  1299. u16 __agg_val9;
  1300. #elif defined(__LITTLE_ENDIAN)
  1301. u16 __agg_val9;
  1302. u8 __agg_val6_th;
  1303. u8 __reserved1;
  1304. #endif
  1305. #if defined(__BIG_ENDIAN)
  1306. u16 hq_prod;
  1307. u16 hq_cons;
  1308. #elif defined(__LITTLE_ENDIAN)
  1309. u16 hq_cons;
  1310. u16 hq_prod;
  1311. #endif
  1312. u32 agg_vars8;
  1313. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC2 (0xFFFFFF<<0)
  1314. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC2_SHIFT 0
  1315. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC3 (0xFF<<24)
  1316. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC3_SHIFT 24
  1317. #if defined(__BIG_ENDIAN)
  1318. u16 r2tq_prod;
  1319. u16 sq_prod;
  1320. #elif defined(__LITTLE_ENDIAN)
  1321. u16 sq_prod;
  1322. u16 r2tq_prod;
  1323. #endif
  1324. #if defined(__BIG_ENDIAN)
  1325. u8 agg_val3;
  1326. u8 agg_val6;
  1327. u8 agg_val5_th;
  1328. u8 agg_val5;
  1329. #elif defined(__LITTLE_ENDIAN)
  1330. u8 agg_val5;
  1331. u8 agg_val5_th;
  1332. u8 agg_val6;
  1333. u8 agg_val3;
  1334. #endif
  1335. #if defined(__BIG_ENDIAN)
  1336. u16 __agg_misc1;
  1337. u16 agg_limit1;
  1338. #elif defined(__LITTLE_ENDIAN)
  1339. u16 agg_limit1;
  1340. u16 __agg_misc1;
  1341. #endif
  1342. u32 hq_cons_tcp_seq;
  1343. u32 exp_stat_sn;
  1344. u32 agg_misc5;
  1345. };
  1346. /*
  1347. * The tcp aggregative context section of Tstorm
  1348. */
  1349. struct tstorm_tcp_tcp_ag_context_section {
  1350. u32 __agg_val1;
  1351. #if defined(__BIG_ENDIAN)
  1352. u8 __tcp_agg_vars2;
  1353. u8 __agg_val3;
  1354. u16 __agg_val2;
  1355. #elif defined(__LITTLE_ENDIAN)
  1356. u16 __agg_val2;
  1357. u8 __agg_val3;
  1358. u8 __tcp_agg_vars2;
  1359. #endif
  1360. #if defined(__BIG_ENDIAN)
  1361. u16 __agg_val5;
  1362. u8 __agg_val6;
  1363. u8 __tcp_agg_vars3;
  1364. #elif defined(__LITTLE_ENDIAN)
  1365. u8 __tcp_agg_vars3;
  1366. u8 __agg_val6;
  1367. u16 __agg_val5;
  1368. #endif
  1369. u32 snd_nxt;
  1370. u32 rtt_seq;
  1371. u32 rtt_time;
  1372. u32 __reserved66;
  1373. u32 wnd_right_edge;
  1374. u32 tcp_agg_vars1;
  1375. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<0)
  1376. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 0
  1377. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG (0x1<<1)
  1378. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG_SHIFT 1
  1379. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF (0x3<<2)
  1380. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_SHIFT 2
  1381. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF (0x3<<4)
  1382. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_SHIFT 4
  1383. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_EN (0x1<<6)
  1384. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_EN_SHIFT 6
  1385. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_EN (0x1<<7)
  1386. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_EN_SHIFT 7
  1387. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN (0x1<<8)
  1388. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN_SHIFT 8
  1389. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_SND_NXT_EN (0x1<<9)
  1390. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_SND_NXT_EN_SHIFT 9
  1391. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<10)
  1392. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 10
  1393. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_FLAG (0x1<<11)
  1394. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_FLAG_SHIFT 11
  1395. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_EN (0x1<<12)
  1396. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_EN_SHIFT 12
  1397. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_EN (0x1<<13)
  1398. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_EN_SHIFT 13
  1399. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF (0x3<<14)
  1400. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_SHIFT 14
  1401. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF (0x3<<16)
  1402. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_SHIFT 16
  1403. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_BLOCKED (0x1<<18)
  1404. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_BLOCKED_SHIFT 18
  1405. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<19)
  1406. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 19
  1407. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_EN (0x1<<20)
  1408. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_EN_SHIFT 20
  1409. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_EN (0x1<<21)
  1410. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_EN_SHIFT 21
  1411. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED1 (0x3<<22)
  1412. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED1_SHIFT 22
  1413. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ (0xF<<24)
  1414. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ_SHIFT 24
  1415. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ (0xF<<28)
  1416. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ_SHIFT 28
  1417. u32 snd_max;
  1418. u32 snd_una;
  1419. u32 __reserved2;
  1420. };
  1421. /*
  1422. * The iscsi aggregative context of Tstorm
  1423. */
  1424. struct tstorm_iscsi_ag_context {
  1425. #if defined(__BIG_ENDIAN)
  1426. u16 ulp_credit;
  1427. u8 agg_vars1;
  1428. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1429. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1430. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1431. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1432. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1433. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1434. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1435. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1436. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_CF (0x3<<4)
  1437. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_CF_SHIFT 4
  1438. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG (0x1<<6)
  1439. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG_SHIFT 6
  1440. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_FLAG (0x1<<7)
  1441. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_FLAG_SHIFT 7
  1442. u8 state;
  1443. #elif defined(__LITTLE_ENDIAN)
  1444. u8 state;
  1445. u8 agg_vars1;
  1446. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1447. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1448. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1449. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1450. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1451. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1452. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1453. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1454. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_CF (0x3<<4)
  1455. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_CF_SHIFT 4
  1456. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG (0x1<<6)
  1457. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG_SHIFT 6
  1458. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_FLAG (0x1<<7)
  1459. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_FLAG_SHIFT 7
  1460. u16 ulp_credit;
  1461. #endif
  1462. #if defined(__BIG_ENDIAN)
  1463. u16 __agg_val4;
  1464. u16 agg_vars2;
  1465. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_FLAG (0x1<<0)
  1466. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_FLAG_SHIFT 0
  1467. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_FLAG (0x1<<1)
  1468. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_FLAG_SHIFT 1
  1469. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_CF (0x3<<2)
  1470. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_CF_SHIFT 2
  1471. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_CF (0x3<<4)
  1472. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_CF_SHIFT 4
  1473. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF (0x3<<6)
  1474. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_SHIFT 6
  1475. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF (0x3<<8)
  1476. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_SHIFT 8
  1477. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG (0x1<<10)
  1478. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG_SHIFT 10
  1479. #define TSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<11)
  1480. #define TSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 11
  1481. #define TSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN (0x1<<12)
  1482. #define TSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN_SHIFT 12
  1483. #define TSTORM_ISCSI_AG_CONTEXT_AUX5_CF_EN (0x1<<13)
  1484. #define TSTORM_ISCSI_AG_CONTEXT_AUX5_CF_EN_SHIFT 13
  1485. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
  1486. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
  1487. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
  1488. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
  1489. #elif defined(__LITTLE_ENDIAN)
  1490. u16 agg_vars2;
  1491. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_FLAG (0x1<<0)
  1492. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_FLAG_SHIFT 0
  1493. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_FLAG (0x1<<1)
  1494. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_FLAG_SHIFT 1
  1495. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_CF (0x3<<2)
  1496. #define __TSTORM_ISCSI_AG_CONTEXT_AUX4_CF_SHIFT 2
  1497. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_CF (0x3<<4)
  1498. #define __TSTORM_ISCSI_AG_CONTEXT_AUX5_CF_SHIFT 4
  1499. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF (0x3<<6)
  1500. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_SHIFT 6
  1501. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF (0x3<<8)
  1502. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_SHIFT 8
  1503. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG (0x1<<10)
  1504. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG_SHIFT 10
  1505. #define TSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<11)
  1506. #define TSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 11
  1507. #define TSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN (0x1<<12)
  1508. #define TSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN_SHIFT 12
  1509. #define TSTORM_ISCSI_AG_CONTEXT_AUX5_CF_EN (0x1<<13)
  1510. #define TSTORM_ISCSI_AG_CONTEXT_AUX5_CF_EN_SHIFT 13
  1511. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
  1512. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
  1513. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
  1514. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
  1515. u16 __agg_val4;
  1516. #endif
  1517. struct tstorm_tcp_tcp_ag_context_section tcp;
  1518. };
  1519. /*
  1520. * The iscsi aggregative context of Cstorm
  1521. */
  1522. struct cstorm_iscsi_ag_context {
  1523. u32 agg_vars1;
  1524. #define CSTORM_ISCSI_AG_CONTEXT_STATE (0xFF<<0)
  1525. #define CSTORM_ISCSI_AG_CONTEXT_STATE_SHIFT 0
  1526. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<8)
  1527. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 8
  1528. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<9)
  1529. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 9
  1530. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<10)
  1531. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 10
  1532. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<11)
  1533. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 11
  1534. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_SE_CF_EN (0x1<<12)
  1535. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_SE_CF_EN_SHIFT 12
  1536. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_INV_CF_EN (0x1<<13)
  1537. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_INV_CF_EN_SHIFT 13
  1538. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION3_CF (0x3<<14)
  1539. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION3_CF_SHIFT 14
  1540. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED66 (0x3<<16)
  1541. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED66_SHIFT 16
  1542. #define __CSTORM_ISCSI_AG_CONTEXT_FIN_RECEIVED_CF_EN (0x1<<18)
  1543. #define __CSTORM_ISCSI_AG_CONTEXT_FIN_RECEIVED_CF_EN_SHIFT 18
  1544. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION0_CF_EN (0x1<<19)
  1545. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION0_CF_EN_SHIFT 19
  1546. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION1_CF_EN (0x1<<20)
  1547. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION1_CF_EN_SHIFT 20
  1548. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION2_CF_EN (0x1<<21)
  1549. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION2_CF_EN_SHIFT 21
  1550. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION3_CF_EN (0x1<<22)
  1551. #define __CSTORM_ISCSI_AG_CONTEXT_PENDING_COMPLETION3_CF_EN_SHIFT 22
  1552. #define __CSTORM_ISCSI_AG_CONTEXT_REL_SEQ_RULE (0x7<<23)
  1553. #define __CSTORM_ISCSI_AG_CONTEXT_REL_SEQ_RULE_SHIFT 23
  1554. #define CSTORM_ISCSI_AG_CONTEXT_HQ_PROD_RULE (0x3<<26)
  1555. #define CSTORM_ISCSI_AG_CONTEXT_HQ_PROD_RULE_SHIFT 26
  1556. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED52 (0x3<<28)
  1557. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED52_SHIFT 28
  1558. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED53 (0x3<<30)
  1559. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED53_SHIFT 30
  1560. #if defined(__BIG_ENDIAN)
  1561. u8 __aux1_th;
  1562. u8 __aux1_val;
  1563. u16 __agg_vars2;
  1564. #elif defined(__LITTLE_ENDIAN)
  1565. u16 __agg_vars2;
  1566. u8 __aux1_val;
  1567. u8 __aux1_th;
  1568. #endif
  1569. u32 rel_seq;
  1570. u32 rel_seq_th;
  1571. #if defined(__BIG_ENDIAN)
  1572. u16 hq_cons;
  1573. u16 hq_prod;
  1574. #elif defined(__LITTLE_ENDIAN)
  1575. u16 hq_prod;
  1576. u16 hq_cons;
  1577. #endif
  1578. #if defined(__BIG_ENDIAN)
  1579. u8 __reserved62;
  1580. u8 __reserved61;
  1581. u8 __reserved60;
  1582. u8 __reserved59;
  1583. #elif defined(__LITTLE_ENDIAN)
  1584. u8 __reserved59;
  1585. u8 __reserved60;
  1586. u8 __reserved61;
  1587. u8 __reserved62;
  1588. #endif
  1589. #if defined(__BIG_ENDIAN)
  1590. u16 __reserved64;
  1591. u16 __cq_u_prod0;
  1592. #elif defined(__LITTLE_ENDIAN)
  1593. u16 __cq_u_prod0;
  1594. u16 __reserved64;
  1595. #endif
  1596. u32 __cq_u_prod1;
  1597. #if defined(__BIG_ENDIAN)
  1598. u16 __agg_vars3;
  1599. u16 __cq_u_prod2;
  1600. #elif defined(__LITTLE_ENDIAN)
  1601. u16 __cq_u_prod2;
  1602. u16 __agg_vars3;
  1603. #endif
  1604. #if defined(__BIG_ENDIAN)
  1605. u16 __aux2_th;
  1606. u16 __cq_u_prod3;
  1607. #elif defined(__LITTLE_ENDIAN)
  1608. u16 __cq_u_prod3;
  1609. u16 __aux2_th;
  1610. #endif
  1611. };
  1612. /*
  1613. * The iscsi aggregative context of Ustorm
  1614. */
  1615. struct ustorm_iscsi_ag_context {
  1616. #if defined(__BIG_ENDIAN)
  1617. u8 __aux_counter_flags;
  1618. u8 agg_vars2;
  1619. #define USTORM_ISCSI_AG_CONTEXT_TX_CF (0x3<<0)
  1620. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_SHIFT 0
  1621. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF (0x3<<2)
  1622. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_SHIFT 2
  1623. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
  1624. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
  1625. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
  1626. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
  1627. u8 agg_vars1;
  1628. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1629. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1630. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1631. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1632. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1633. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1634. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1635. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1636. #define USTORM_ISCSI_AG_CONTEXT_INV_CF (0x3<<4)
  1637. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_SHIFT 4
  1638. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF (0x3<<6)
  1639. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_SHIFT 6
  1640. u8 state;
  1641. #elif defined(__LITTLE_ENDIAN)
  1642. u8 state;
  1643. u8 agg_vars1;
  1644. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1645. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1646. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1647. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1648. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1649. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1650. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1651. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1652. #define USTORM_ISCSI_AG_CONTEXT_INV_CF (0x3<<4)
  1653. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_SHIFT 4
  1654. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF (0x3<<6)
  1655. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_SHIFT 6
  1656. u8 agg_vars2;
  1657. #define USTORM_ISCSI_AG_CONTEXT_TX_CF (0x3<<0)
  1658. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_SHIFT 0
  1659. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF (0x3<<2)
  1660. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_SHIFT 2
  1661. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
  1662. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
  1663. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
  1664. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
  1665. u8 __aux_counter_flags;
  1666. #endif
  1667. #if defined(__BIG_ENDIAN)
  1668. u8 cdu_usage;
  1669. u8 agg_misc2;
  1670. u16 __cq_local_comp_itt_val;
  1671. #elif defined(__LITTLE_ENDIAN)
  1672. u16 __cq_local_comp_itt_val;
  1673. u8 agg_misc2;
  1674. u8 cdu_usage;
  1675. #endif
  1676. u32 agg_misc4;
  1677. #if defined(__BIG_ENDIAN)
  1678. u8 agg_val3_th;
  1679. u8 agg_val3;
  1680. u16 agg_misc3;
  1681. #elif defined(__LITTLE_ENDIAN)
  1682. u16 agg_misc3;
  1683. u8 agg_val3;
  1684. u8 agg_val3_th;
  1685. #endif
  1686. u32 agg_val1;
  1687. u32 agg_misc4_th;
  1688. #if defined(__BIG_ENDIAN)
  1689. u16 agg_val2_th;
  1690. u16 agg_val2;
  1691. #elif defined(__LITTLE_ENDIAN)
  1692. u16 agg_val2;
  1693. u16 agg_val2_th;
  1694. #endif
  1695. #if defined(__BIG_ENDIAN)
  1696. u16 __reserved2;
  1697. u8 decision_rules;
  1698. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE (0x7<<0)
  1699. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE_SHIFT 0
  1700. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
  1701. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
  1702. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG (0x1<<6)
  1703. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG_SHIFT 6
  1704. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1 (0x1<<7)
  1705. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1_SHIFT 7
  1706. u8 decision_rule_enable_bits;
  1707. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN (0x1<<0)
  1708. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN_SHIFT 0
  1709. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
  1710. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
  1711. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN (0x1<<2)
  1712. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN_SHIFT 2
  1713. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
  1714. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
  1715. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN (0x1<<4)
  1716. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN_SHIFT 4
  1717. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<5)
  1718. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 5
  1719. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
  1720. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
  1721. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1722. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1723. #elif defined(__LITTLE_ENDIAN)
  1724. u8 decision_rule_enable_bits;
  1725. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN (0x1<<0)
  1726. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN_SHIFT 0
  1727. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
  1728. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
  1729. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN (0x1<<2)
  1730. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN_SHIFT 2
  1731. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
  1732. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
  1733. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN (0x1<<4)
  1734. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN_SHIFT 4
  1735. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<5)
  1736. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 5
  1737. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
  1738. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
  1739. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1740. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1741. u8 decision_rules;
  1742. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE (0x7<<0)
  1743. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE_SHIFT 0
  1744. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
  1745. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
  1746. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG (0x1<<6)
  1747. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG_SHIFT 6
  1748. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1 (0x1<<7)
  1749. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1_SHIFT 7
  1750. u16 __reserved2;
  1751. #endif
  1752. };
  1753. /*
  1754. * Timers connection context
  1755. */
  1756. struct iscsi_timers_block_context {
  1757. u32 __reserved_0;
  1758. u32 __reserved_1;
  1759. u32 __reserved_2;
  1760. u32 flags;
  1761. #define __ISCSI_TIMERS_BLOCK_CONTEXT_NUM_OF_ACTIVE_TIMERS (0x3<<0)
  1762. #define __ISCSI_TIMERS_BLOCK_CONTEXT_NUM_OF_ACTIVE_TIMERS_SHIFT 0
  1763. #define ISCSI_TIMERS_BLOCK_CONTEXT_CONN_VALID_FLG (0x1<<2)
  1764. #define ISCSI_TIMERS_BLOCK_CONTEXT_CONN_VALID_FLG_SHIFT 2
  1765. #define __ISCSI_TIMERS_BLOCK_CONTEXT_RESERVED0 (0x1FFFFFFF<<3)
  1766. #define __ISCSI_TIMERS_BLOCK_CONTEXT_RESERVED0_SHIFT 3
  1767. };
  1768. /*
  1769. * Ethernet context section, shared in TOE, RDMA and ISCSI
  1770. */
  1771. struct xstorm_eth_context_section {
  1772. #if defined(__BIG_ENDIAN)
  1773. u8 remote_addr_4;
  1774. u8 remote_addr_5;
  1775. u8 local_addr_0;
  1776. u8 local_addr_1;
  1777. #elif defined(__LITTLE_ENDIAN)
  1778. u8 local_addr_1;
  1779. u8 local_addr_0;
  1780. u8 remote_addr_5;
  1781. u8 remote_addr_4;
  1782. #endif
  1783. #if defined(__BIG_ENDIAN)
  1784. u8 remote_addr_0;
  1785. u8 remote_addr_1;
  1786. u8 remote_addr_2;
  1787. u8 remote_addr_3;
  1788. #elif defined(__LITTLE_ENDIAN)
  1789. u8 remote_addr_3;
  1790. u8 remote_addr_2;
  1791. u8 remote_addr_1;
  1792. u8 remote_addr_0;
  1793. #endif
  1794. #if defined(__BIG_ENDIAN)
  1795. u16 reserved_vlan_type;
  1796. u16 params;
  1797. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
  1798. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
  1799. #define XSTORM_ETH_CONTEXT_SECTION_CFI (0x1<<12)
  1800. #define XSTORM_ETH_CONTEXT_SECTION_CFI_SHIFT 12
  1801. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
  1802. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
  1803. #elif defined(__LITTLE_ENDIAN)
  1804. u16 params;
  1805. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
  1806. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
  1807. #define XSTORM_ETH_CONTEXT_SECTION_CFI (0x1<<12)
  1808. #define XSTORM_ETH_CONTEXT_SECTION_CFI_SHIFT 12
  1809. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
  1810. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
  1811. u16 reserved_vlan_type;
  1812. #endif
  1813. #if defined(__BIG_ENDIAN)
  1814. u8 local_addr_2;
  1815. u8 local_addr_3;
  1816. u8 local_addr_4;
  1817. u8 local_addr_5;
  1818. #elif defined(__LITTLE_ENDIAN)
  1819. u8 local_addr_5;
  1820. u8 local_addr_4;
  1821. u8 local_addr_3;
  1822. u8 local_addr_2;
  1823. #endif
  1824. };
  1825. /*
  1826. * IpV4 context section, shared in TOE, RDMA and ISCSI
  1827. */
  1828. struct xstorm_ip_v4_context_section {
  1829. #if defined(__BIG_ENDIAN)
  1830. u16 __pbf_hdr_cmd_rsvd_id;
  1831. u16 __pbf_hdr_cmd_rsvd_flags_offset;
  1832. #elif defined(__LITTLE_ENDIAN)
  1833. u16 __pbf_hdr_cmd_rsvd_flags_offset;
  1834. u16 __pbf_hdr_cmd_rsvd_id;
  1835. #endif
  1836. #if defined(__BIG_ENDIAN)
  1837. u8 __pbf_hdr_cmd_rsvd_ver_ihl;
  1838. u8 tos;
  1839. u16 __pbf_hdr_cmd_rsvd_length;
  1840. #elif defined(__LITTLE_ENDIAN)
  1841. u16 __pbf_hdr_cmd_rsvd_length;
  1842. u8 tos;
  1843. u8 __pbf_hdr_cmd_rsvd_ver_ihl;
  1844. #endif
  1845. u32 ip_local_addr;
  1846. #if defined(__BIG_ENDIAN)
  1847. u8 ttl;
  1848. u8 __pbf_hdr_cmd_rsvd_protocol;
  1849. u16 __pbf_hdr_cmd_rsvd_csum;
  1850. #elif defined(__LITTLE_ENDIAN)
  1851. u16 __pbf_hdr_cmd_rsvd_csum;
  1852. u8 __pbf_hdr_cmd_rsvd_protocol;
  1853. u8 ttl;
  1854. #endif
  1855. u32 __pbf_hdr_cmd_rsvd_1;
  1856. u32 ip_remote_addr;
  1857. };
  1858. /*
  1859. * context section, shared in TOE, RDMA and ISCSI
  1860. */
  1861. struct xstorm_padded_ip_v4_context_section {
  1862. struct xstorm_ip_v4_context_section ip_v4;
  1863. u32 reserved1[4];
  1864. };
  1865. /*
  1866. * IpV6 context section, shared in TOE, RDMA and ISCSI
  1867. */
  1868. struct xstorm_ip_v6_context_section {
  1869. #if defined(__BIG_ENDIAN)
  1870. u16 pbf_hdr_cmd_rsvd_payload_len;
  1871. u8 pbf_hdr_cmd_rsvd_nxt_hdr;
  1872. u8 hop_limit;
  1873. #elif defined(__LITTLE_ENDIAN)
  1874. u8 hop_limit;
  1875. u8 pbf_hdr_cmd_rsvd_nxt_hdr;
  1876. u16 pbf_hdr_cmd_rsvd_payload_len;
  1877. #endif
  1878. u32 priority_flow_label;
  1879. #define XSTORM_IP_V6_CONTEXT_SECTION_FLOW_LABEL (0xFFFFF<<0)
  1880. #define XSTORM_IP_V6_CONTEXT_SECTION_FLOW_LABEL_SHIFT 0
  1881. #define XSTORM_IP_V6_CONTEXT_SECTION_TRAFFIC_CLASS (0xFF<<20)
  1882. #define XSTORM_IP_V6_CONTEXT_SECTION_TRAFFIC_CLASS_SHIFT 20
  1883. #define XSTORM_IP_V6_CONTEXT_SECTION_PBF_HDR_CMD_RSVD_VER (0xF<<28)
  1884. #define XSTORM_IP_V6_CONTEXT_SECTION_PBF_HDR_CMD_RSVD_VER_SHIFT 28
  1885. u32 ip_local_addr_lo_hi;
  1886. u32 ip_local_addr_lo_lo;
  1887. u32 ip_local_addr_hi_hi;
  1888. u32 ip_local_addr_hi_lo;
  1889. u32 ip_remote_addr_lo_hi;
  1890. u32 ip_remote_addr_lo_lo;
  1891. u32 ip_remote_addr_hi_hi;
  1892. u32 ip_remote_addr_hi_lo;
  1893. };
  1894. union xstorm_ip_context_section_types {
  1895. struct xstorm_padded_ip_v4_context_section padded_ip_v4;
  1896. struct xstorm_ip_v6_context_section ip_v6;
  1897. };
  1898. /*
  1899. * TCP context section, shared in TOE, RDMA and ISCSI
  1900. */
  1901. struct xstorm_tcp_context_section {
  1902. u32 snd_max;
  1903. #if defined(__BIG_ENDIAN)
  1904. u16 remote_port;
  1905. u16 local_port;
  1906. #elif defined(__LITTLE_ENDIAN)
  1907. u16 local_port;
  1908. u16 remote_port;
  1909. #endif
  1910. #if defined(__BIG_ENDIAN)
  1911. u8 original_nagle_1b;
  1912. u8 ts_enabled_1b;
  1913. u16 tcp_params;
  1914. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE (0xFF<<0)
  1915. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE_SHIFT 0
  1916. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT (0x1<<8)
  1917. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT_SHIFT 8
  1918. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED (0x1<<9)
  1919. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED_SHIFT 9
  1920. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED (0x1<<10)
  1921. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED_SHIFT 10
  1922. #define XSTORM_TCP_CONTEXT_SECTION_KA_STATE (0x1<<11)
  1923. #define XSTORM_TCP_CONTEXT_SECTION_KA_STATE_SHIFT 11
  1924. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<12)
  1925. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 12
  1926. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED (0x1<<13)
  1927. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED_SHIFT 13
  1928. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER (0x3<<14)
  1929. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER_SHIFT 14
  1930. #elif defined(__LITTLE_ENDIAN)
  1931. u16 tcp_params;
  1932. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE (0xFF<<0)
  1933. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE_SHIFT 0
  1934. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT (0x1<<8)
  1935. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT_SHIFT 8
  1936. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED (0x1<<9)
  1937. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED_SHIFT 9
  1938. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED (0x1<<10)
  1939. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED_SHIFT 10
  1940. #define XSTORM_TCP_CONTEXT_SECTION_KA_STATE (0x1<<11)
  1941. #define XSTORM_TCP_CONTEXT_SECTION_KA_STATE_SHIFT 11
  1942. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<12)
  1943. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 12
  1944. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED (0x1<<13)
  1945. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED_SHIFT 13
  1946. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER (0x3<<14)
  1947. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER_SHIFT 14
  1948. u8 ts_enabled_1b;
  1949. u8 original_nagle_1b;
  1950. #endif
  1951. #if defined(__BIG_ENDIAN)
  1952. u16 pseudo_csum;
  1953. u16 window_scaling_factor;
  1954. #elif defined(__LITTLE_ENDIAN)
  1955. u16 window_scaling_factor;
  1956. u16 pseudo_csum;
  1957. #endif
  1958. u32 reserved2;
  1959. u32 ts_time_diff;
  1960. u32 __next_timer_expir;
  1961. };
  1962. /*
  1963. * Common context section, shared in TOE, RDMA and ISCSI
  1964. */
  1965. struct xstorm_common_context_section {
  1966. struct xstorm_eth_context_section ethernet;
  1967. union xstorm_ip_context_section_types ip_union;
  1968. struct xstorm_tcp_context_section tcp;
  1969. #if defined(__BIG_ENDIAN)
  1970. u16 reserved;
  1971. u8 statistics_params;
  1972. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<0)
  1973. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 0
  1974. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<1)
  1975. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 1
  1976. #define XSTORM_COMMON_CONTEXT_SECTION_STATISTICS_COUNTER_ID (0x1F<<2)
  1977. #define XSTORM_COMMON_CONTEXT_SECTION_STATISTICS_COUNTER_ID_SHIFT 2
  1978. #define XSTORM_COMMON_CONTEXT_SECTION_RESERVED0 (0x1<<7)
  1979. #define XSTORM_COMMON_CONTEXT_SECTION_RESERVED0_SHIFT 7
  1980. u8 ip_version_1b;
  1981. #elif defined(__LITTLE_ENDIAN)
  1982. u8 ip_version_1b;
  1983. u8 statistics_params;
  1984. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<0)
  1985. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 0
  1986. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<1)
  1987. #define XSTORM_COMMON_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 1
  1988. #define XSTORM_COMMON_CONTEXT_SECTION_STATISTICS_COUNTER_ID (0x1F<<2)
  1989. #define XSTORM_COMMON_CONTEXT_SECTION_STATISTICS_COUNTER_ID_SHIFT 2
  1990. #define XSTORM_COMMON_CONTEXT_SECTION_RESERVED0 (0x1<<7)
  1991. #define XSTORM_COMMON_CONTEXT_SECTION_RESERVED0_SHIFT 7
  1992. u16 reserved;
  1993. #endif
  1994. };
  1995. /*
  1996. * Flags used in ISCSI context section
  1997. */
  1998. struct xstorm_iscsi_context_flags {
  1999. u8 flags;
  2000. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_IMMEDIATE_DATA (0x1<<0)
  2001. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_IMMEDIATE_DATA_SHIFT 0
  2002. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_INITIAL_R2T (0x1<<1)
  2003. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_INITIAL_R2T_SHIFT 1
  2004. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_HEADER_DIGEST (0x1<<2)
  2005. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_HEADER_DIGEST_SHIFT 2
  2006. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_DATA_DIGEST (0x1<<3)
  2007. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_DATA_DIGEST_SHIFT 3
  2008. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_HQ_BD_WRITTEN (0x1<<4)
  2009. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_HQ_BD_WRITTEN_SHIFT 4
  2010. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_LAST_OP_SQ (0x1<<5)
  2011. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_LAST_OP_SQ_SHIFT 5
  2012. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_UPDATE_SND_NXT (0x1<<6)
  2013. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_UPDATE_SND_NXT_SHIFT 6
  2014. #define XSTORM_ISCSI_CONTEXT_FLAGS_RESERVED4 (0x1<<7)
  2015. #define XSTORM_ISCSI_CONTEXT_FLAGS_RESERVED4_SHIFT 7
  2016. };
  2017. struct iscsi_task_context_entry_x {
  2018. u32 data_out_buffer_offset;
  2019. u32 itt;
  2020. u32 data_sn;
  2021. };
  2022. struct iscsi_task_context_entry_xuc_x_write_only {
  2023. u32 tx_r2t_sn;
  2024. };
  2025. struct iscsi_task_context_entry_xuc_xu_write_both {
  2026. u32 sgl_base_lo;
  2027. u32 sgl_base_hi;
  2028. #if defined(__BIG_ENDIAN)
  2029. u8 sgl_size;
  2030. u8 sge_index;
  2031. u16 sge_offset;
  2032. #elif defined(__LITTLE_ENDIAN)
  2033. u16 sge_offset;
  2034. u8 sge_index;
  2035. u8 sgl_size;
  2036. #endif
  2037. };
  2038. /*
  2039. * iSCSI context section
  2040. */
  2041. struct xstorm_iscsi_context_section {
  2042. u32 first_burst_length;
  2043. u32 max_send_pdu_length;
  2044. struct regpair sq_pbl_base;
  2045. struct regpair sq_curr_pbe;
  2046. struct regpair hq_pbl_base;
  2047. struct regpair hq_curr_pbe_base;
  2048. struct regpair r2tq_pbl_base;
  2049. struct regpair r2tq_curr_pbe_base;
  2050. struct regpair task_pbl_base;
  2051. #if defined(__BIG_ENDIAN)
  2052. u16 data_out_count;
  2053. struct xstorm_iscsi_context_flags flags;
  2054. u8 task_pbl_cache_idx;
  2055. #elif defined(__LITTLE_ENDIAN)
  2056. u8 task_pbl_cache_idx;
  2057. struct xstorm_iscsi_context_flags flags;
  2058. u16 data_out_count;
  2059. #endif
  2060. u32 seq_more_2_send;
  2061. u32 pdu_more_2_send;
  2062. struct iscsi_task_context_entry_x temp_tce_x;
  2063. struct iscsi_task_context_entry_xuc_x_write_only temp_tce_x_wr;
  2064. struct iscsi_task_context_entry_xuc_xu_write_both temp_tce_xu_wr;
  2065. struct regpair lun;
  2066. u32 exp_data_transfer_len_ttt;
  2067. u32 pdu_data_2_rxmit;
  2068. u32 rxmit_bytes_2_dr;
  2069. #if defined(__BIG_ENDIAN)
  2070. u16 rxmit_sge_offset;
  2071. u16 hq_rxmit_cons;
  2072. #elif defined(__LITTLE_ENDIAN)
  2073. u16 hq_rxmit_cons;
  2074. u16 rxmit_sge_offset;
  2075. #endif
  2076. #if defined(__BIG_ENDIAN)
  2077. u16 r2tq_cons;
  2078. u8 rxmit_flags;
  2079. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD (0x1<<0)
  2080. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD_SHIFT 0
  2081. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR (0x1<<1)
  2082. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR_SHIFT 1
  2083. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU (0x1<<2)
  2084. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU_SHIFT 2
  2085. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR (0x1<<3)
  2086. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR_SHIFT 3
  2087. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR (0x1<<4)
  2088. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR_SHIFT 4
  2089. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING (0x3<<5)
  2090. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING_SHIFT 5
  2091. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT (0x1<<7)
  2092. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT_SHIFT 7
  2093. u8 rxmit_sge_idx;
  2094. #elif defined(__LITTLE_ENDIAN)
  2095. u8 rxmit_sge_idx;
  2096. u8 rxmit_flags;
  2097. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD (0x1<<0)
  2098. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD_SHIFT 0
  2099. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR (0x1<<1)
  2100. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR_SHIFT 1
  2101. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU (0x1<<2)
  2102. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU_SHIFT 2
  2103. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR (0x1<<3)
  2104. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR_SHIFT 3
  2105. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR (0x1<<4)
  2106. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR_SHIFT 4
  2107. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING (0x3<<5)
  2108. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING_SHIFT 5
  2109. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT (0x1<<7)
  2110. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT_SHIFT 7
  2111. u16 r2tq_cons;
  2112. #endif
  2113. u32 hq_rxmit_tcp_seq;
  2114. };
  2115. /*
  2116. * Xstorm iSCSI Storm Context
  2117. */
  2118. struct xstorm_iscsi_st_context {
  2119. struct xstorm_common_context_section common;
  2120. struct xstorm_iscsi_context_section iscsi;
  2121. };
  2122. /*
  2123. * CQ DB CQ producer and pending completion counter
  2124. */
  2125. struct iscsi_cq_db_prod_pnd_cmpltn_cnt {
  2126. #if defined(__BIG_ENDIAN)
  2127. u16 cntr;
  2128. u16 prod;
  2129. #elif defined(__LITTLE_ENDIAN)
  2130. u16 prod;
  2131. u16 cntr;
  2132. #endif
  2133. };
  2134. /*
  2135. * CQ DB pending completion ITT array
  2136. */
  2137. struct iscsi_cq_db_prod_pnd_cmpltn_cnt_arr {
  2138. struct iscsi_cq_db_prod_pnd_cmpltn_cnt prod_pend_comp[8];
  2139. };
  2140. /*
  2141. * Cstorm CQ sequence to notify array, updated by driver
  2142. */
  2143. struct iscsi_cq_db_sqn_2_notify_arr {
  2144. u16 sqn[8];
  2145. };
  2146. /*
  2147. * Cstorm iSCSI Storm Context
  2148. */
  2149. struct cstorm_iscsi_st_context {
  2150. struct iscsi_cq_db_prod_pnd_cmpltn_cnt_arr cq_c_prod_pend_comp_ctr_arr;
  2151. struct iscsi_cq_db_sqn_2_notify_arr cq_c_prod_sqn_arr;
  2152. struct iscsi_cq_db_sqn_2_notify_arr cq_c_sqn_2_notify_arr;
  2153. struct regpair hq_pbl_base;
  2154. struct regpair hq_curr_pbe;
  2155. struct regpair task_pbl_base;
  2156. struct regpair cq_db_base;
  2157. #if defined(__BIG_ENDIAN)
  2158. u16 hq_bd_itt;
  2159. u16 iscsi_conn_id;
  2160. #elif defined(__LITTLE_ENDIAN)
  2161. u16 iscsi_conn_id;
  2162. u16 hq_bd_itt;
  2163. #endif
  2164. u32 hq_bd_data_segment_len;
  2165. u32 hq_bd_buffer_offset;
  2166. #if defined(__BIG_ENDIAN)
  2167. u8 timer_entry_idx;
  2168. u8 cq_proc_en_bit_map;
  2169. u8 cq_pend_comp_itt_valid_bit_map;
  2170. u8 hq_bd_opcode;
  2171. #elif defined(__LITTLE_ENDIAN)
  2172. u8 hq_bd_opcode;
  2173. u8 cq_pend_comp_itt_valid_bit_map;
  2174. u8 cq_proc_en_bit_map;
  2175. u8 timer_entry_idx;
  2176. #endif
  2177. u32 hq_tcp_seq;
  2178. #if defined(__BIG_ENDIAN)
  2179. u16 flags;
  2180. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN (0x1<<0)
  2181. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN_SHIFT 0
  2182. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN (0x1<<1)
  2183. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN_SHIFT 1
  2184. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID (0x1<<2)
  2185. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID_SHIFT 2
  2186. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG (0x1<<3)
  2187. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG_SHIFT 3
  2188. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK (0x1<<4)
  2189. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK_SHIFT 4
  2190. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV (0x7FF<<5)
  2191. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV_SHIFT 5
  2192. u16 hq_cons;
  2193. #elif defined(__LITTLE_ENDIAN)
  2194. u16 hq_cons;
  2195. u16 flags;
  2196. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN (0x1<<0)
  2197. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN_SHIFT 0
  2198. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN (0x1<<1)
  2199. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN_SHIFT 1
  2200. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID (0x1<<2)
  2201. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID_SHIFT 2
  2202. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG (0x1<<3)
  2203. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG_SHIFT 3
  2204. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK (0x1<<4)
  2205. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK_SHIFT 4
  2206. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV (0x7FF<<5)
  2207. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV_SHIFT 5
  2208. #endif
  2209. struct regpair rsrv1;
  2210. };
  2211. /*
  2212. * Iscsi connection context
  2213. */
  2214. struct iscsi_context {
  2215. struct ustorm_iscsi_st_context ustorm_st_context;
  2216. struct tstorm_iscsi_st_context tstorm_st_context;
  2217. struct xstorm_iscsi_ag_context xstorm_ag_context;
  2218. struct tstorm_iscsi_ag_context tstorm_ag_context;
  2219. struct cstorm_iscsi_ag_context cstorm_ag_context;
  2220. struct ustorm_iscsi_ag_context ustorm_ag_context;
  2221. struct iscsi_timers_block_context timers_context;
  2222. struct regpair upb_context;
  2223. struct xstorm_iscsi_st_context xstorm_st_context;
  2224. struct regpair xpb_context;
  2225. struct cstorm_iscsi_st_context cstorm_st_context;
  2226. };
  2227. /*
  2228. * Buffer per connection, used in Tstorm
  2229. */
  2230. struct iscsi_conn_buf {
  2231. struct regpair reserved[8];
  2232. };
  2233. /*
  2234. * ipv6 structure
  2235. */
  2236. struct ip_v6_addr {
  2237. u32 ip_addr_lo_lo;
  2238. u32 ip_addr_lo_hi;
  2239. u32 ip_addr_hi_lo;
  2240. u32 ip_addr_hi_hi;
  2241. };
  2242. /*
  2243. * l5cm- connection identification params
  2244. */
  2245. struct l5cm_conn_addr_params {
  2246. u32 pmtu;
  2247. #if defined(__BIG_ENDIAN)
  2248. u8 remote_addr_3;
  2249. u8 remote_addr_2;
  2250. u8 remote_addr_1;
  2251. u8 remote_addr_0;
  2252. #elif defined(__LITTLE_ENDIAN)
  2253. u8 remote_addr_0;
  2254. u8 remote_addr_1;
  2255. u8 remote_addr_2;
  2256. u8 remote_addr_3;
  2257. #endif
  2258. #if defined(__BIG_ENDIAN)
  2259. u16 params;
  2260. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION (0x1<<0)
  2261. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION_SHIFT 0
  2262. #define L5CM_CONN_ADDR_PARAMS_RSRV (0x7FFF<<1)
  2263. #define L5CM_CONN_ADDR_PARAMS_RSRV_SHIFT 1
  2264. u8 remote_addr_5;
  2265. u8 remote_addr_4;
  2266. #elif defined(__LITTLE_ENDIAN)
  2267. u8 remote_addr_4;
  2268. u8 remote_addr_5;
  2269. u16 params;
  2270. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION (0x1<<0)
  2271. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION_SHIFT 0
  2272. #define L5CM_CONN_ADDR_PARAMS_RSRV (0x7FFF<<1)
  2273. #define L5CM_CONN_ADDR_PARAMS_RSRV_SHIFT 1
  2274. #endif
  2275. struct ip_v6_addr local_ip_addr;
  2276. struct ip_v6_addr remote_ip_addr;
  2277. u32 ipv6_flow_label_20b;
  2278. u32 reserved1;
  2279. #if defined(__BIG_ENDIAN)
  2280. u16 remote_tcp_port;
  2281. u16 local_tcp_port;
  2282. #elif defined(__LITTLE_ENDIAN)
  2283. u16 local_tcp_port;
  2284. u16 remote_tcp_port;
  2285. #endif
  2286. };
  2287. /*
  2288. * l5cm-xstorm connection buffer
  2289. */
  2290. struct l5cm_xstorm_conn_buffer {
  2291. #if defined(__BIG_ENDIAN)
  2292. u16 rsrv1;
  2293. u16 params;
  2294. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE (0x1<<0)
  2295. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE_SHIFT 0
  2296. #define L5CM_XSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  2297. #define L5CM_XSTORM_CONN_BUFFER_RSRV_SHIFT 1
  2298. #elif defined(__LITTLE_ENDIAN)
  2299. u16 params;
  2300. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE (0x1<<0)
  2301. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE_SHIFT 0
  2302. #define L5CM_XSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  2303. #define L5CM_XSTORM_CONN_BUFFER_RSRV_SHIFT 1
  2304. u16 rsrv1;
  2305. #endif
  2306. #if defined(__BIG_ENDIAN)
  2307. u16 mss;
  2308. u16 pseudo_header_checksum;
  2309. #elif defined(__LITTLE_ENDIAN)
  2310. u16 pseudo_header_checksum;
  2311. u16 mss;
  2312. #endif
  2313. u32 rcv_buf;
  2314. u32 rsrv2;
  2315. struct regpair context_addr;
  2316. };
  2317. /*
  2318. * l5cm-tstorm connection buffer
  2319. */
  2320. struct l5cm_tstorm_conn_buffer {
  2321. u32 snd_buf;
  2322. u32 rcv_buf;
  2323. #if defined(__BIG_ENDIAN)
  2324. u16 params;
  2325. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE (0x1<<0)
  2326. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE_SHIFT 0
  2327. #define L5CM_TSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  2328. #define L5CM_TSTORM_CONN_BUFFER_RSRV_SHIFT 1
  2329. u8 ka_max_probe_count;
  2330. u8 ka_enable;
  2331. #elif defined(__LITTLE_ENDIAN)
  2332. u8 ka_enable;
  2333. u8 ka_max_probe_count;
  2334. u16 params;
  2335. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE (0x1<<0)
  2336. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE_SHIFT 0
  2337. #define L5CM_TSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  2338. #define L5CM_TSTORM_CONN_BUFFER_RSRV_SHIFT 1
  2339. #endif
  2340. u32 ka_timeout;
  2341. u32 ka_interval;
  2342. u32 max_rt_time;
  2343. };
  2344. /*
  2345. * l5cm connection buffer for active side
  2346. */
  2347. struct l5cm_active_conn_buffer {
  2348. struct l5cm_conn_addr_params conn_addr_buf;
  2349. struct l5cm_xstorm_conn_buffer xstorm_conn_buffer;
  2350. struct l5cm_tstorm_conn_buffer tstorm_conn_buffer;
  2351. };
  2352. /*
  2353. * l5cm slow path element
  2354. */
  2355. struct l5cm_packet_size {
  2356. u32 size;
  2357. u32 rsrv;
  2358. };
  2359. /*
  2360. * l5cm connection parameters
  2361. */
  2362. union l5cm_reduce_param_union {
  2363. u32 passive_side_scramble_key;
  2364. u32 pcs_id;
  2365. };
  2366. /*
  2367. * l5cm connection parameters
  2368. */
  2369. struct l5cm_reduce_conn {
  2370. union l5cm_reduce_param_union param;
  2371. u32 isn;
  2372. };
  2373. /*
  2374. * l5cm slow path element
  2375. */
  2376. union l5cm_specific_data {
  2377. u8 protocol_data[8];
  2378. struct regpair phy_address;
  2379. struct l5cm_packet_size packet_size;
  2380. struct l5cm_reduce_conn reduced_conn;
  2381. };
  2382. /*
  2383. * l5 slow path element
  2384. */
  2385. struct l5cm_spe {
  2386. struct spe_hdr hdr;
  2387. union l5cm_specific_data data;
  2388. };
  2389. /*
  2390. * Tstorm Tcp flags
  2391. */
  2392. struct tstorm_l5cm_tcp_flags {
  2393. u16 flags;
  2394. #define TSTORM_L5CM_TCP_FLAGS_VLAN_ID (0xFFF<<0)
  2395. #define TSTORM_L5CM_TCP_FLAGS_VLAN_ID_SHIFT 0
  2396. #define TSTORM_L5CM_TCP_FLAGS_RSRV0 (0x1<<12)
  2397. #define TSTORM_L5CM_TCP_FLAGS_RSRV0_SHIFT 12
  2398. #define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED (0x1<<13)
  2399. #define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED_SHIFT 13
  2400. #define TSTORM_L5CM_TCP_FLAGS_RSRV1 (0x3<<14)
  2401. #define TSTORM_L5CM_TCP_FLAGS_RSRV1_SHIFT 14
  2402. };
  2403. /*
  2404. * Xstorm Tcp flags
  2405. */
  2406. struct xstorm_l5cm_tcp_flags {
  2407. u8 flags;
  2408. #define XSTORM_L5CM_TCP_FLAGS_ENC_ENABLED (0x1<<0)
  2409. #define XSTORM_L5CM_TCP_FLAGS_ENC_ENABLED_SHIFT 0
  2410. #define XSTORM_L5CM_TCP_FLAGS_TS_ENABLED (0x1<<1)
  2411. #define XSTORM_L5CM_TCP_FLAGS_TS_ENABLED_SHIFT 1
  2412. #define XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN (0x1<<2)
  2413. #define XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN_SHIFT 2
  2414. #define XSTORM_L5CM_TCP_FLAGS_RSRV (0x1F<<3)
  2415. #define XSTORM_L5CM_TCP_FLAGS_RSRV_SHIFT 3
  2416. };
  2417. #endif /* CNIC_DEFS_H */