cnic_defs.h 81 KB

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