cnic_defs.h 170 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487
  1. /* cnic.c: Broadcom CNIC core network driver.
  2. *
  3. * Copyright (c) 2006-2012 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. #define FCOE_KCQE_OPCODE_INIT_FUNC (0x10)
  32. #define FCOE_KCQE_OPCODE_DESTROY_FUNC (0x11)
  33. #define FCOE_KCQE_OPCODE_STAT_FUNC (0x12)
  34. #define FCOE_KCQE_OPCODE_OFFLOAD_CONN (0x15)
  35. #define FCOE_KCQE_OPCODE_ENABLE_CONN (0x16)
  36. #define FCOE_KCQE_OPCODE_DISABLE_CONN (0x17)
  37. #define FCOE_KCQE_OPCODE_DESTROY_CONN (0x18)
  38. #define FCOE_KCQE_OPCODE_CQ_EVENT_NOTIFICATION (0x20)
  39. #define FCOE_KCQE_OPCODE_FCOE_ERROR (0x21)
  40. #define FCOE_RAMROD_CMD_ID_INIT_FUNC (FCOE_KCQE_OPCODE_INIT_FUNC)
  41. #define FCOE_RAMROD_CMD_ID_DESTROY_FUNC (FCOE_KCQE_OPCODE_DESTROY_FUNC)
  42. #define FCOE_RAMROD_CMD_ID_STAT_FUNC (FCOE_KCQE_OPCODE_STAT_FUNC)
  43. #define FCOE_RAMROD_CMD_ID_OFFLOAD_CONN (FCOE_KCQE_OPCODE_OFFLOAD_CONN)
  44. #define FCOE_RAMROD_CMD_ID_ENABLE_CONN (FCOE_KCQE_OPCODE_ENABLE_CONN)
  45. #define FCOE_RAMROD_CMD_ID_DISABLE_CONN (FCOE_KCQE_OPCODE_DISABLE_CONN)
  46. #define FCOE_RAMROD_CMD_ID_DESTROY_CONN (FCOE_KCQE_OPCODE_DESTROY_CONN)
  47. #define FCOE_RAMROD_CMD_ID_TERMINATE_CONN (0x81)
  48. #define FCOE_KWQE_OPCODE_INIT1 (0)
  49. #define FCOE_KWQE_OPCODE_INIT2 (1)
  50. #define FCOE_KWQE_OPCODE_INIT3 (2)
  51. #define FCOE_KWQE_OPCODE_OFFLOAD_CONN1 (3)
  52. #define FCOE_KWQE_OPCODE_OFFLOAD_CONN2 (4)
  53. #define FCOE_KWQE_OPCODE_OFFLOAD_CONN3 (5)
  54. #define FCOE_KWQE_OPCODE_OFFLOAD_CONN4 (6)
  55. #define FCOE_KWQE_OPCODE_ENABLE_CONN (7)
  56. #define FCOE_KWQE_OPCODE_DISABLE_CONN (8)
  57. #define FCOE_KWQE_OPCODE_DESTROY_CONN (9)
  58. #define FCOE_KWQE_OPCODE_DESTROY (10)
  59. #define FCOE_KWQE_OPCODE_STAT (11)
  60. #define FCOE_KCQE_COMPLETION_STATUS_ERROR (0x1)
  61. #define FCOE_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAILURE (0x3)
  62. #define FCOE_KCQE_COMPLETION_STATUS_NIC_ERROR (0x5)
  63. /* KCQ (kernel completion queue) response op codes */
  64. #define L4_KCQE_OPCODE_VALUE_CLOSE_COMP (53)
  65. #define L4_KCQE_OPCODE_VALUE_RESET_COMP (54)
  66. #define L4_KCQE_OPCODE_VALUE_FW_TCP_UPDATE (55)
  67. #define L4_KCQE_OPCODE_VALUE_CONNECT_COMPLETE (56)
  68. #define L4_KCQE_OPCODE_VALUE_RESET_RECEIVED (57)
  69. #define L4_KCQE_OPCODE_VALUE_CLOSE_RECEIVED (58)
  70. #define L4_KCQE_OPCODE_VALUE_INIT_ULP (61)
  71. #define L4_KCQE_OPCODE_VALUE_OFFLOAD_PG (1)
  72. #define L4_KCQE_OPCODE_VALUE_UPDATE_PG (9)
  73. #define L4_KCQE_OPCODE_VALUE_UPLOAD_PG (14)
  74. /* KCQ (kernel completion queue) completion status */
  75. #define L4_KCQE_COMPLETION_STATUS_SUCCESS (0)
  76. #define L4_KCQE_COMPLETION_STATUS_NIC_ERROR (4)
  77. #define L4_KCQE_COMPLETION_STATUS_TIMEOUT (0x93)
  78. #define L4_KCQE_COMPLETION_STATUS_CTX_ALLOC_FAIL (0x83)
  79. #define L4_KCQE_COMPLETION_STATUS_OFFLOADED_PG (0x89)
  80. #define L4_KCQE_OPCODE_VALUE_OOO_EVENT_NOTIFICATION (0xa0)
  81. #define L4_KCQE_OPCODE_VALUE_OOO_FLUSH (0xa1)
  82. #define L4_LAYER_CODE (4)
  83. #define L2_LAYER_CODE (2)
  84. /*
  85. * L4 KCQ CQE
  86. */
  87. struct l4_kcq {
  88. u32 cid;
  89. u32 pg_cid;
  90. u32 conn_id;
  91. u32 pg_host_opaque;
  92. #if defined(__BIG_ENDIAN)
  93. u16 status;
  94. u16 reserved1;
  95. #elif defined(__LITTLE_ENDIAN)
  96. u16 reserved1;
  97. u16 status;
  98. #endif
  99. u32 reserved2[2];
  100. #if defined(__BIG_ENDIAN)
  101. u8 flags;
  102. #define L4_KCQ_RESERVED3 (0x7<<0)
  103. #define L4_KCQ_RESERVED3_SHIFT 0
  104. #define L4_KCQ_RAMROD_COMPLETION (0x1<<3) /* Everest only */
  105. #define L4_KCQ_RAMROD_COMPLETION_SHIFT 3
  106. #define L4_KCQ_LAYER_CODE (0x7<<4)
  107. #define L4_KCQ_LAYER_CODE_SHIFT 4
  108. #define L4_KCQ_RESERVED4 (0x1<<7)
  109. #define L4_KCQ_RESERVED4_SHIFT 7
  110. u8 op_code;
  111. u16 qe_self_seq;
  112. #elif defined(__LITTLE_ENDIAN)
  113. u16 qe_self_seq;
  114. u8 op_code;
  115. u8 flags;
  116. #define L4_KCQ_RESERVED3 (0xF<<0)
  117. #define L4_KCQ_RESERVED3_SHIFT 0
  118. #define L4_KCQ_RAMROD_COMPLETION (0x1<<3) /* Everest only */
  119. #define L4_KCQ_RAMROD_COMPLETION_SHIFT 3
  120. #define L4_KCQ_LAYER_CODE (0x7<<4)
  121. #define L4_KCQ_LAYER_CODE_SHIFT 4
  122. #define L4_KCQ_RESERVED4 (0x1<<7)
  123. #define L4_KCQ_RESERVED4_SHIFT 7
  124. #endif
  125. };
  126. /*
  127. * L4 KCQ CQE PG upload
  128. */
  129. struct l4_kcq_upload_pg {
  130. u32 pg_cid;
  131. #if defined(__BIG_ENDIAN)
  132. u16 pg_status;
  133. u16 pg_ipid_count;
  134. #elif defined(__LITTLE_ENDIAN)
  135. u16 pg_ipid_count;
  136. u16 pg_status;
  137. #endif
  138. u32 reserved1[5];
  139. #if defined(__BIG_ENDIAN)
  140. u8 flags;
  141. #define L4_KCQ_UPLOAD_PG_RESERVED3 (0xF<<0)
  142. #define L4_KCQ_UPLOAD_PG_RESERVED3_SHIFT 0
  143. #define L4_KCQ_UPLOAD_PG_LAYER_CODE (0x7<<4)
  144. #define L4_KCQ_UPLOAD_PG_LAYER_CODE_SHIFT 4
  145. #define L4_KCQ_UPLOAD_PG_RESERVED4 (0x1<<7)
  146. #define L4_KCQ_UPLOAD_PG_RESERVED4_SHIFT 7
  147. u8 op_code;
  148. u16 qe_self_seq;
  149. #elif defined(__LITTLE_ENDIAN)
  150. u16 qe_self_seq;
  151. u8 op_code;
  152. u8 flags;
  153. #define L4_KCQ_UPLOAD_PG_RESERVED3 (0xF<<0)
  154. #define L4_KCQ_UPLOAD_PG_RESERVED3_SHIFT 0
  155. #define L4_KCQ_UPLOAD_PG_LAYER_CODE (0x7<<4)
  156. #define L4_KCQ_UPLOAD_PG_LAYER_CODE_SHIFT 4
  157. #define L4_KCQ_UPLOAD_PG_RESERVED4 (0x1<<7)
  158. #define L4_KCQ_UPLOAD_PG_RESERVED4_SHIFT 7
  159. #endif
  160. };
  161. /*
  162. * Gracefully close the connection request
  163. */
  164. struct l4_kwq_close_req {
  165. #if defined(__BIG_ENDIAN)
  166. u8 flags;
  167. #define L4_KWQ_CLOSE_REQ_RESERVED1 (0xF<<0)
  168. #define L4_KWQ_CLOSE_REQ_RESERVED1_SHIFT 0
  169. #define L4_KWQ_CLOSE_REQ_LAYER_CODE (0x7<<4)
  170. #define L4_KWQ_CLOSE_REQ_LAYER_CODE_SHIFT 4
  171. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT (0x1<<7)
  172. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT_SHIFT 7
  173. u8 op_code;
  174. u16 reserved0;
  175. #elif defined(__LITTLE_ENDIAN)
  176. u16 reserved0;
  177. u8 op_code;
  178. u8 flags;
  179. #define L4_KWQ_CLOSE_REQ_RESERVED1 (0xF<<0)
  180. #define L4_KWQ_CLOSE_REQ_RESERVED1_SHIFT 0
  181. #define L4_KWQ_CLOSE_REQ_LAYER_CODE (0x7<<4)
  182. #define L4_KWQ_CLOSE_REQ_LAYER_CODE_SHIFT 4
  183. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT (0x1<<7)
  184. #define L4_KWQ_CLOSE_REQ_LINKED_WITH_NEXT_SHIFT 7
  185. #endif
  186. u32 cid;
  187. u32 reserved2[6];
  188. };
  189. /*
  190. * The first request to be passed in order to establish connection in option2
  191. */
  192. struct l4_kwq_connect_req1 {
  193. #if defined(__BIG_ENDIAN)
  194. u8 flags;
  195. #define L4_KWQ_CONNECT_REQ1_RESERVED1 (0xF<<0)
  196. #define L4_KWQ_CONNECT_REQ1_RESERVED1_SHIFT 0
  197. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE (0x7<<4)
  198. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE_SHIFT 4
  199. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT (0x1<<7)
  200. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT_SHIFT 7
  201. u8 op_code;
  202. u8 reserved0;
  203. u8 conn_flags;
  204. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE (0x1<<0)
  205. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE_SHIFT 0
  206. #define L4_KWQ_CONNECT_REQ1_IP_V6 (0x1<<1)
  207. #define L4_KWQ_CONNECT_REQ1_IP_V6_SHIFT 1
  208. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG (0x1<<2)
  209. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG_SHIFT 2
  210. #define L4_KWQ_CONNECT_REQ1_RSRV (0x1F<<3)
  211. #define L4_KWQ_CONNECT_REQ1_RSRV_SHIFT 3
  212. #elif defined(__LITTLE_ENDIAN)
  213. u8 conn_flags;
  214. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE (0x1<<0)
  215. #define L4_KWQ_CONNECT_REQ1_IS_PG_HOST_OPAQUE_SHIFT 0
  216. #define L4_KWQ_CONNECT_REQ1_IP_V6 (0x1<<1)
  217. #define L4_KWQ_CONNECT_REQ1_IP_V6_SHIFT 1
  218. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG (0x1<<2)
  219. #define L4_KWQ_CONNECT_REQ1_PASSIVE_FLAG_SHIFT 2
  220. #define L4_KWQ_CONNECT_REQ1_RSRV (0x1F<<3)
  221. #define L4_KWQ_CONNECT_REQ1_RSRV_SHIFT 3
  222. u8 reserved0;
  223. u8 op_code;
  224. u8 flags;
  225. #define L4_KWQ_CONNECT_REQ1_RESERVED1 (0xF<<0)
  226. #define L4_KWQ_CONNECT_REQ1_RESERVED1_SHIFT 0
  227. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE (0x7<<4)
  228. #define L4_KWQ_CONNECT_REQ1_LAYER_CODE_SHIFT 4
  229. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT (0x1<<7)
  230. #define L4_KWQ_CONNECT_REQ1_LINKED_WITH_NEXT_SHIFT 7
  231. #endif
  232. u32 cid;
  233. u32 pg_cid;
  234. u32 src_ip;
  235. u32 dst_ip;
  236. #if defined(__BIG_ENDIAN)
  237. u16 dst_port;
  238. u16 src_port;
  239. #elif defined(__LITTLE_ENDIAN)
  240. u16 src_port;
  241. u16 dst_port;
  242. #endif
  243. #if defined(__BIG_ENDIAN)
  244. u8 rsrv1[3];
  245. u8 tcp_flags;
  246. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK (0x1<<0)
  247. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK_SHIFT 0
  248. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE (0x1<<1)
  249. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE_SHIFT 1
  250. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE (0x1<<2)
  251. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE_SHIFT 2
  252. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP (0x1<<3)
  253. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP_SHIFT 3
  254. #define L4_KWQ_CONNECT_REQ1_SACK (0x1<<4)
  255. #define L4_KWQ_CONNECT_REQ1_SACK_SHIFT 4
  256. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING (0x1<<5)
  257. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING_SHIFT 5
  258. #define L4_KWQ_CONNECT_REQ1_RESERVED2 (0x3<<6)
  259. #define L4_KWQ_CONNECT_REQ1_RESERVED2_SHIFT 6
  260. #elif defined(__LITTLE_ENDIAN)
  261. u8 tcp_flags;
  262. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK (0x1<<0)
  263. #define L4_KWQ_CONNECT_REQ1_NO_DELAY_ACK_SHIFT 0
  264. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE (0x1<<1)
  265. #define L4_KWQ_CONNECT_REQ1_KEEP_ALIVE_SHIFT 1
  266. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE (0x1<<2)
  267. #define L4_KWQ_CONNECT_REQ1_NAGLE_ENABLE_SHIFT 2
  268. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP (0x1<<3)
  269. #define L4_KWQ_CONNECT_REQ1_TIME_STAMP_SHIFT 3
  270. #define L4_KWQ_CONNECT_REQ1_SACK (0x1<<4)
  271. #define L4_KWQ_CONNECT_REQ1_SACK_SHIFT 4
  272. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING (0x1<<5)
  273. #define L4_KWQ_CONNECT_REQ1_SEG_SCALING_SHIFT 5
  274. #define L4_KWQ_CONNECT_REQ1_RESERVED2 (0x3<<6)
  275. #define L4_KWQ_CONNECT_REQ1_RESERVED2_SHIFT 6
  276. u8 rsrv1[3];
  277. #endif
  278. u32 rsrv2;
  279. };
  280. /*
  281. * The second ( optional )request to be passed in order to establish
  282. * connection in option2 - for IPv6 only
  283. */
  284. struct l4_kwq_connect_req2 {
  285. #if defined(__BIG_ENDIAN)
  286. u8 flags;
  287. #define L4_KWQ_CONNECT_REQ2_RESERVED1 (0xF<<0)
  288. #define L4_KWQ_CONNECT_REQ2_RESERVED1_SHIFT 0
  289. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE (0x7<<4)
  290. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE_SHIFT 4
  291. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT (0x1<<7)
  292. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT_SHIFT 7
  293. u8 op_code;
  294. u8 reserved0;
  295. u8 rsrv;
  296. #elif defined(__LITTLE_ENDIAN)
  297. u8 rsrv;
  298. u8 reserved0;
  299. u8 op_code;
  300. u8 flags;
  301. #define L4_KWQ_CONNECT_REQ2_RESERVED1 (0xF<<0)
  302. #define L4_KWQ_CONNECT_REQ2_RESERVED1_SHIFT 0
  303. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE (0x7<<4)
  304. #define L4_KWQ_CONNECT_REQ2_LAYER_CODE_SHIFT 4
  305. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT (0x1<<7)
  306. #define L4_KWQ_CONNECT_REQ2_LINKED_WITH_NEXT_SHIFT 7
  307. #endif
  308. u32 reserved2;
  309. u32 src_ip_v6_2;
  310. u32 src_ip_v6_3;
  311. u32 src_ip_v6_4;
  312. u32 dst_ip_v6_2;
  313. u32 dst_ip_v6_3;
  314. u32 dst_ip_v6_4;
  315. };
  316. /*
  317. * The third ( and last )request to be passed in order to establish
  318. * connection in option2
  319. */
  320. struct l4_kwq_connect_req3 {
  321. #if defined(__BIG_ENDIAN)
  322. u8 flags;
  323. #define L4_KWQ_CONNECT_REQ3_RESERVED1 (0xF<<0)
  324. #define L4_KWQ_CONNECT_REQ3_RESERVED1_SHIFT 0
  325. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE (0x7<<4)
  326. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE_SHIFT 4
  327. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT (0x1<<7)
  328. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT_SHIFT 7
  329. u8 op_code;
  330. u16 reserved0;
  331. #elif defined(__LITTLE_ENDIAN)
  332. u16 reserved0;
  333. u8 op_code;
  334. u8 flags;
  335. #define L4_KWQ_CONNECT_REQ3_RESERVED1 (0xF<<0)
  336. #define L4_KWQ_CONNECT_REQ3_RESERVED1_SHIFT 0
  337. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE (0x7<<4)
  338. #define L4_KWQ_CONNECT_REQ3_LAYER_CODE_SHIFT 4
  339. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT (0x1<<7)
  340. #define L4_KWQ_CONNECT_REQ3_LINKED_WITH_NEXT_SHIFT 7
  341. #endif
  342. u32 ka_timeout;
  343. u32 ka_interval ;
  344. #if defined(__BIG_ENDIAN)
  345. u8 snd_seq_scale;
  346. u8 ttl;
  347. u8 tos;
  348. u8 ka_max_probe_count;
  349. #elif defined(__LITTLE_ENDIAN)
  350. u8 ka_max_probe_count;
  351. u8 tos;
  352. u8 ttl;
  353. u8 snd_seq_scale;
  354. #endif
  355. #if defined(__BIG_ENDIAN)
  356. u16 pmtu;
  357. u16 mss;
  358. #elif defined(__LITTLE_ENDIAN)
  359. u16 mss;
  360. u16 pmtu;
  361. #endif
  362. u32 rcv_buf;
  363. u32 snd_buf;
  364. u32 seed;
  365. };
  366. /*
  367. * a KWQE request to offload a PG connection
  368. */
  369. struct l4_kwq_offload_pg {
  370. #if defined(__BIG_ENDIAN)
  371. u8 flags;
  372. #define L4_KWQ_OFFLOAD_PG_RESERVED1 (0xF<<0)
  373. #define L4_KWQ_OFFLOAD_PG_RESERVED1_SHIFT 0
  374. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE (0x7<<4)
  375. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE_SHIFT 4
  376. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT (0x1<<7)
  377. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT_SHIFT 7
  378. u8 op_code;
  379. u16 reserved0;
  380. #elif defined(__LITTLE_ENDIAN)
  381. u16 reserved0;
  382. u8 op_code;
  383. u8 flags;
  384. #define L4_KWQ_OFFLOAD_PG_RESERVED1 (0xF<<0)
  385. #define L4_KWQ_OFFLOAD_PG_RESERVED1_SHIFT 0
  386. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE (0x7<<4)
  387. #define L4_KWQ_OFFLOAD_PG_LAYER_CODE_SHIFT 4
  388. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT (0x1<<7)
  389. #define L4_KWQ_OFFLOAD_PG_LINKED_WITH_NEXT_SHIFT 7
  390. #endif
  391. #if defined(__BIG_ENDIAN)
  392. u8 l2hdr_nbytes;
  393. u8 pg_flags;
  394. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP (0x1<<0)
  395. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP_SHIFT 0
  396. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING (0x1<<1)
  397. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING_SHIFT 1
  398. #define L4_KWQ_OFFLOAD_PG_RESERVED2 (0x3F<<2)
  399. #define L4_KWQ_OFFLOAD_PG_RESERVED2_SHIFT 2
  400. u8 da0;
  401. u8 da1;
  402. #elif defined(__LITTLE_ENDIAN)
  403. u8 da1;
  404. u8 da0;
  405. u8 pg_flags;
  406. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP (0x1<<0)
  407. #define L4_KWQ_OFFLOAD_PG_SNAP_ENCAP_SHIFT 0
  408. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING (0x1<<1)
  409. #define L4_KWQ_OFFLOAD_PG_VLAN_TAGGING_SHIFT 1
  410. #define L4_KWQ_OFFLOAD_PG_RESERVED2 (0x3F<<2)
  411. #define L4_KWQ_OFFLOAD_PG_RESERVED2_SHIFT 2
  412. u8 l2hdr_nbytes;
  413. #endif
  414. #if defined(__BIG_ENDIAN)
  415. u8 da2;
  416. u8 da3;
  417. u8 da4;
  418. u8 da5;
  419. #elif defined(__LITTLE_ENDIAN)
  420. u8 da5;
  421. u8 da4;
  422. u8 da3;
  423. u8 da2;
  424. #endif
  425. #if defined(__BIG_ENDIAN)
  426. u8 sa0;
  427. u8 sa1;
  428. u8 sa2;
  429. u8 sa3;
  430. #elif defined(__LITTLE_ENDIAN)
  431. u8 sa3;
  432. u8 sa2;
  433. u8 sa1;
  434. u8 sa0;
  435. #endif
  436. #if defined(__BIG_ENDIAN)
  437. u8 sa4;
  438. u8 sa5;
  439. u16 etype;
  440. #elif defined(__LITTLE_ENDIAN)
  441. u16 etype;
  442. u8 sa5;
  443. u8 sa4;
  444. #endif
  445. #if defined(__BIG_ENDIAN)
  446. u16 vlan_tag;
  447. u16 ipid_start;
  448. #elif defined(__LITTLE_ENDIAN)
  449. u16 ipid_start;
  450. u16 vlan_tag;
  451. #endif
  452. #if defined(__BIG_ENDIAN)
  453. u16 ipid_count;
  454. u16 reserved3;
  455. #elif defined(__LITTLE_ENDIAN)
  456. u16 reserved3;
  457. u16 ipid_count;
  458. #endif
  459. u32 host_opaque;
  460. };
  461. /*
  462. * Abortively close the connection request
  463. */
  464. struct l4_kwq_reset_req {
  465. #if defined(__BIG_ENDIAN)
  466. u8 flags;
  467. #define L4_KWQ_RESET_REQ_RESERVED1 (0xF<<0)
  468. #define L4_KWQ_RESET_REQ_RESERVED1_SHIFT 0
  469. #define L4_KWQ_RESET_REQ_LAYER_CODE (0x7<<4)
  470. #define L4_KWQ_RESET_REQ_LAYER_CODE_SHIFT 4
  471. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT (0x1<<7)
  472. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT_SHIFT 7
  473. u8 op_code;
  474. u16 reserved0;
  475. #elif defined(__LITTLE_ENDIAN)
  476. u16 reserved0;
  477. u8 op_code;
  478. u8 flags;
  479. #define L4_KWQ_RESET_REQ_RESERVED1 (0xF<<0)
  480. #define L4_KWQ_RESET_REQ_RESERVED1_SHIFT 0
  481. #define L4_KWQ_RESET_REQ_LAYER_CODE (0x7<<4)
  482. #define L4_KWQ_RESET_REQ_LAYER_CODE_SHIFT 4
  483. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT (0x1<<7)
  484. #define L4_KWQ_RESET_REQ_LINKED_WITH_NEXT_SHIFT 7
  485. #endif
  486. u32 cid;
  487. u32 reserved2[6];
  488. };
  489. /*
  490. * a KWQE request to update a PG connection
  491. */
  492. struct l4_kwq_update_pg {
  493. #if defined(__BIG_ENDIAN)
  494. u8 flags;
  495. #define L4_KWQ_UPDATE_PG_RESERVED1 (0xF<<0)
  496. #define L4_KWQ_UPDATE_PG_RESERVED1_SHIFT 0
  497. #define L4_KWQ_UPDATE_PG_LAYER_CODE (0x7<<4)
  498. #define L4_KWQ_UPDATE_PG_LAYER_CODE_SHIFT 4
  499. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT (0x1<<7)
  500. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT_SHIFT 7
  501. u8 opcode;
  502. u16 oper16;
  503. #elif defined(__LITTLE_ENDIAN)
  504. u16 oper16;
  505. u8 opcode;
  506. u8 flags;
  507. #define L4_KWQ_UPDATE_PG_RESERVED1 (0xF<<0)
  508. #define L4_KWQ_UPDATE_PG_RESERVED1_SHIFT 0
  509. #define L4_KWQ_UPDATE_PG_LAYER_CODE (0x7<<4)
  510. #define L4_KWQ_UPDATE_PG_LAYER_CODE_SHIFT 4
  511. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT (0x1<<7)
  512. #define L4_KWQ_UPDATE_PG_LINKED_WITH_NEXT_SHIFT 7
  513. #endif
  514. u32 pg_cid;
  515. u32 pg_host_opaque;
  516. #if defined(__BIG_ENDIAN)
  517. u8 pg_valids;
  518. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT (0x1<<0)
  519. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT_SHIFT 0
  520. #define L4_KWQ_UPDATE_PG_VALIDS_DA (0x1<<1)
  521. #define L4_KWQ_UPDATE_PG_VALIDS_DA_SHIFT 1
  522. #define L4_KWQ_UPDATE_PG_RESERVERD2 (0x3F<<2)
  523. #define L4_KWQ_UPDATE_PG_RESERVERD2_SHIFT 2
  524. u8 pg_unused_a;
  525. u16 pg_ipid_count;
  526. #elif defined(__LITTLE_ENDIAN)
  527. u16 pg_ipid_count;
  528. u8 pg_unused_a;
  529. u8 pg_valids;
  530. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT (0x1<<0)
  531. #define L4_KWQ_UPDATE_PG_VALIDS_IPID_COUNT_SHIFT 0
  532. #define L4_KWQ_UPDATE_PG_VALIDS_DA (0x1<<1)
  533. #define L4_KWQ_UPDATE_PG_VALIDS_DA_SHIFT 1
  534. #define L4_KWQ_UPDATE_PG_RESERVERD2 (0x3F<<2)
  535. #define L4_KWQ_UPDATE_PG_RESERVERD2_SHIFT 2
  536. #endif
  537. #if defined(__BIG_ENDIAN)
  538. u16 reserverd3;
  539. u8 da0;
  540. u8 da1;
  541. #elif defined(__LITTLE_ENDIAN)
  542. u8 da1;
  543. u8 da0;
  544. u16 reserverd3;
  545. #endif
  546. #if defined(__BIG_ENDIAN)
  547. u8 da2;
  548. u8 da3;
  549. u8 da4;
  550. u8 da5;
  551. #elif defined(__LITTLE_ENDIAN)
  552. u8 da5;
  553. u8 da4;
  554. u8 da3;
  555. u8 da2;
  556. #endif
  557. u32 reserved4;
  558. u32 reserved5;
  559. };
  560. /*
  561. * a KWQE request to upload a PG or L4 context
  562. */
  563. struct l4_kwq_upload {
  564. #if defined(__BIG_ENDIAN)
  565. u8 flags;
  566. #define L4_KWQ_UPLOAD_RESERVED1 (0xF<<0)
  567. #define L4_KWQ_UPLOAD_RESERVED1_SHIFT 0
  568. #define L4_KWQ_UPLOAD_LAYER_CODE (0x7<<4)
  569. #define L4_KWQ_UPLOAD_LAYER_CODE_SHIFT 4
  570. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT (0x1<<7)
  571. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT_SHIFT 7
  572. u8 opcode;
  573. u16 oper16;
  574. #elif defined(__LITTLE_ENDIAN)
  575. u16 oper16;
  576. u8 opcode;
  577. u8 flags;
  578. #define L4_KWQ_UPLOAD_RESERVED1 (0xF<<0)
  579. #define L4_KWQ_UPLOAD_RESERVED1_SHIFT 0
  580. #define L4_KWQ_UPLOAD_LAYER_CODE (0x7<<4)
  581. #define L4_KWQ_UPLOAD_LAYER_CODE_SHIFT 4
  582. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT (0x1<<7)
  583. #define L4_KWQ_UPLOAD_LINKED_WITH_NEXT_SHIFT 7
  584. #endif
  585. u32 cid;
  586. u32 reserved2[6];
  587. };
  588. /*
  589. * bnx2x structures
  590. */
  591. /*
  592. * The iscsi aggregative context of Cstorm
  593. */
  594. struct cstorm_iscsi_ag_context {
  595. u32 agg_vars1;
  596. #define CSTORM_ISCSI_AG_CONTEXT_STATE (0xFF<<0)
  597. #define CSTORM_ISCSI_AG_CONTEXT_STATE_SHIFT 0
  598. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<8)
  599. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 8
  600. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<9)
  601. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 9
  602. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<10)
  603. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 10
  604. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<11)
  605. #define __CSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 11
  606. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_SE_CF_EN (0x1<<12)
  607. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_SE_CF_EN_SHIFT 12
  608. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_INV_CF_EN (0x1<<13)
  609. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED_ULP_RX_INV_CF_EN_SHIFT 13
  610. #define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF (0x3<<14)
  611. #define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF_SHIFT 14
  612. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED66 (0x3<<16)
  613. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED66_SHIFT 16
  614. #define __CSTORM_ISCSI_AG_CONTEXT_FIN_RECEIVED_CF_EN (0x1<<18)
  615. #define __CSTORM_ISCSI_AG_CONTEXT_FIN_RECEIVED_CF_EN_SHIFT 18
  616. #define __CSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<19)
  617. #define __CSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 19
  618. #define __CSTORM_ISCSI_AG_CONTEXT_AUX2_CF_EN (0x1<<20)
  619. #define __CSTORM_ISCSI_AG_CONTEXT_AUX2_CF_EN_SHIFT 20
  620. #define __CSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<21)
  621. #define __CSTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 21
  622. #define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN (0x1<<22)
  623. #define __CSTORM_ISCSI_AG_CONTEXT_AUX4_CF_EN_SHIFT 22
  624. #define __CSTORM_ISCSI_AG_CONTEXT_REL_SEQ_RULE (0x7<<23)
  625. #define __CSTORM_ISCSI_AG_CONTEXT_REL_SEQ_RULE_SHIFT 23
  626. #define CSTORM_ISCSI_AG_CONTEXT_HQ_PROD_RULE (0x3<<26)
  627. #define CSTORM_ISCSI_AG_CONTEXT_HQ_PROD_RULE_SHIFT 26
  628. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED52 (0x3<<28)
  629. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED52_SHIFT 28
  630. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED53 (0x3<<30)
  631. #define __CSTORM_ISCSI_AG_CONTEXT_RESERVED53_SHIFT 30
  632. #if defined(__BIG_ENDIAN)
  633. u8 __aux1_th;
  634. u8 __aux1_val;
  635. u16 __agg_vars2;
  636. #elif defined(__LITTLE_ENDIAN)
  637. u16 __agg_vars2;
  638. u8 __aux1_val;
  639. u8 __aux1_th;
  640. #endif
  641. u32 rel_seq;
  642. u32 rel_seq_th;
  643. #if defined(__BIG_ENDIAN)
  644. u16 hq_cons;
  645. u16 hq_prod;
  646. #elif defined(__LITTLE_ENDIAN)
  647. u16 hq_prod;
  648. u16 hq_cons;
  649. #endif
  650. #if defined(__BIG_ENDIAN)
  651. u8 __reserved62;
  652. u8 __reserved61;
  653. u8 __reserved60;
  654. u8 __reserved59;
  655. #elif defined(__LITTLE_ENDIAN)
  656. u8 __reserved59;
  657. u8 __reserved60;
  658. u8 __reserved61;
  659. u8 __reserved62;
  660. #endif
  661. #if defined(__BIG_ENDIAN)
  662. u16 __reserved64;
  663. u16 cq_u_prod;
  664. #elif defined(__LITTLE_ENDIAN)
  665. u16 cq_u_prod;
  666. u16 __reserved64;
  667. #endif
  668. u32 __cq_u_prod1;
  669. #if defined(__BIG_ENDIAN)
  670. u16 __agg_vars3;
  671. u16 cq_u_pend;
  672. #elif defined(__LITTLE_ENDIAN)
  673. u16 cq_u_pend;
  674. u16 __agg_vars3;
  675. #endif
  676. #if defined(__BIG_ENDIAN)
  677. u16 __aux2_th;
  678. u16 aux2_val;
  679. #elif defined(__LITTLE_ENDIAN)
  680. u16 aux2_val;
  681. u16 __aux2_th;
  682. #endif
  683. };
  684. /*
  685. * The fcoe extra aggregative context section of Tstorm
  686. */
  687. struct tstorm_fcoe_extra_ag_context_section {
  688. u32 __agg_val1;
  689. #if defined(__BIG_ENDIAN)
  690. u8 __tcp_agg_vars2;
  691. u8 __agg_val3;
  692. u16 __agg_val2;
  693. #elif defined(__LITTLE_ENDIAN)
  694. u16 __agg_val2;
  695. u8 __agg_val3;
  696. u8 __tcp_agg_vars2;
  697. #endif
  698. #if defined(__BIG_ENDIAN)
  699. u16 __agg_val5;
  700. u8 __agg_val6;
  701. u8 __tcp_agg_vars3;
  702. #elif defined(__LITTLE_ENDIAN)
  703. u8 __tcp_agg_vars3;
  704. u8 __agg_val6;
  705. u16 __agg_val5;
  706. #endif
  707. u32 __lcq_prod;
  708. u32 rtt_seq;
  709. u32 rtt_time;
  710. u32 __reserved66;
  711. u32 wnd_right_edge;
  712. u32 tcp_agg_vars1;
  713. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<0)
  714. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 0
  715. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG (0x1<<1)
  716. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG_SHIFT 1
  717. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF (0x3<<2)
  718. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF_SHIFT 2
  719. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF (0x3<<4)
  720. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF_SHIFT 4
  721. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF_EN (0x1<<6)
  722. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_WND_UPD_CF_EN_SHIFT 6
  723. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF_EN (0x1<<7)
  724. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TIMEOUT_CF_EN_SHIFT 7
  725. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN (0x1<<8)
  726. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN_SHIFT 8
  727. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LCQ_SND_EN (0x1<<9)
  728. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_LCQ_SND_EN_SHIFT 9
  729. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<10)
  730. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 10
  731. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_FLAG (0x1<<11)
  732. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_FLAG_SHIFT 11
  733. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF_EN (0x1<<12)
  734. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF_EN_SHIFT 12
  735. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF_EN (0x1<<13)
  736. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF_EN_SHIFT 13
  737. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF (0x3<<14)
  738. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_CF_SHIFT 14
  739. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF (0x3<<16)
  740. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX2_CF_SHIFT 16
  741. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_BLOCKED (0x1<<18)
  742. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_BLOCKED_SHIFT 18
  743. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<19)
  744. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 19
  745. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX11_CF_EN (0x1<<20)
  746. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX11_CF_EN_SHIFT 20
  747. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX12_CF_EN (0x1<<21)
  748. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX12_CF_EN_SHIFT 21
  749. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED1 (0x3<<22)
  750. #define __TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED1_SHIFT 22
  751. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ (0xF<<24)
  752. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ_SHIFT 24
  753. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ (0xF<<28)
  754. #define TSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ_SHIFT 28
  755. u32 snd_max;
  756. u32 __lcq_cons;
  757. u32 __reserved2;
  758. };
  759. /*
  760. * The fcoe aggregative context of Tstorm
  761. */
  762. struct tstorm_fcoe_ag_context {
  763. #if defined(__BIG_ENDIAN)
  764. u16 ulp_credit;
  765. u8 agg_vars1;
  766. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  767. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  768. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  769. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  770. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  771. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  772. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  773. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  774. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF (0x3<<4)
  775. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_SHIFT 4
  776. #define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG (0x1<<6)
  777. #define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG_SHIFT 6
  778. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG (0x1<<7)
  779. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG_SHIFT 7
  780. u8 state;
  781. #elif defined(__LITTLE_ENDIAN)
  782. u8 state;
  783. u8 agg_vars1;
  784. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  785. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  786. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  787. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  788. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  789. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  790. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  791. #define TSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  792. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF (0x3<<4)
  793. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_SHIFT 4
  794. #define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG (0x1<<6)
  795. #define __TSTORM_FCOE_AG_CONTEXT_AUX3_FLAG_SHIFT 6
  796. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG (0x1<<7)
  797. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_FLAG_SHIFT 7
  798. u16 ulp_credit;
  799. #endif
  800. #if defined(__BIG_ENDIAN)
  801. u16 __agg_val4;
  802. u16 agg_vars2;
  803. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG (0x1<<0)
  804. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG_SHIFT 0
  805. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG (0x1<<1)
  806. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG_SHIFT 1
  807. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF (0x3<<2)
  808. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF_SHIFT 2
  809. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF (0x3<<4)
  810. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF_SHIFT 4
  811. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF (0x3<<6)
  812. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF_SHIFT 6
  813. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF (0x3<<8)
  814. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF_SHIFT 8
  815. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG (0x1<<10)
  816. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG_SHIFT 10
  817. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN (0x1<<11)
  818. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN_SHIFT 11
  819. #define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN (0x1<<12)
  820. #define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN_SHIFT 12
  821. #define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN (0x1<<13)
  822. #define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN_SHIFT 13
  823. #define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
  824. #define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
  825. #define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
  826. #define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
  827. #elif defined(__LITTLE_ENDIAN)
  828. u16 agg_vars2;
  829. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG (0x1<<0)
  830. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_FLAG_SHIFT 0
  831. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG (0x1<<1)
  832. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_FLAG_SHIFT 1
  833. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF (0x3<<2)
  834. #define __TSTORM_FCOE_AG_CONTEXT_AUX4_CF_SHIFT 2
  835. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF (0x3<<4)
  836. #define __TSTORM_FCOE_AG_CONTEXT_AUX5_CF_SHIFT 4
  837. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF (0x3<<6)
  838. #define __TSTORM_FCOE_AG_CONTEXT_AUX6_CF_SHIFT 6
  839. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF (0x3<<8)
  840. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_CF_SHIFT 8
  841. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG (0x1<<10)
  842. #define __TSTORM_FCOE_AG_CONTEXT_AUX7_FLAG_SHIFT 10
  843. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN (0x1<<11)
  844. #define __TSTORM_FCOE_AG_CONTEXT_QUEUE0_FLUSH_CF_EN_SHIFT 11
  845. #define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN (0x1<<12)
  846. #define TSTORM_FCOE_AG_CONTEXT_AUX4_CF_EN_SHIFT 12
  847. #define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN (0x1<<13)
  848. #define TSTORM_FCOE_AG_CONTEXT_AUX5_CF_EN_SHIFT 13
  849. #define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
  850. #define TSTORM_FCOE_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
  851. #define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
  852. #define TSTORM_FCOE_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
  853. u16 __agg_val4;
  854. #endif
  855. struct tstorm_fcoe_extra_ag_context_section __extra_section;
  856. };
  857. /*
  858. * The tcp aggregative context section of Tstorm
  859. */
  860. struct tstorm_tcp_tcp_ag_context_section {
  861. u32 __agg_val1;
  862. #if defined(__BIG_ENDIAN)
  863. u8 __tcp_agg_vars2;
  864. u8 __agg_val3;
  865. u16 __agg_val2;
  866. #elif defined(__LITTLE_ENDIAN)
  867. u16 __agg_val2;
  868. u8 __agg_val3;
  869. u8 __tcp_agg_vars2;
  870. #endif
  871. #if defined(__BIG_ENDIAN)
  872. u16 __agg_val5;
  873. u8 __agg_val6;
  874. u8 __tcp_agg_vars3;
  875. #elif defined(__LITTLE_ENDIAN)
  876. u8 __tcp_agg_vars3;
  877. u8 __agg_val6;
  878. u16 __agg_val5;
  879. #endif
  880. u32 snd_nxt;
  881. u32 rtt_seq;
  882. u32 rtt_time;
  883. u32 __reserved66;
  884. u32 wnd_right_edge;
  885. u32 tcp_agg_vars1;
  886. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<0)
  887. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 0
  888. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG (0x1<<1)
  889. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_LAST_PACKET_FIN_FLAG_SHIFT 1
  890. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF (0x3<<2)
  891. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_SHIFT 2
  892. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF (0x3<<4)
  893. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_SHIFT 4
  894. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_EN (0x1<<6)
  895. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_WND_UPD_CF_EN_SHIFT 6
  896. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_EN (0x1<<7)
  897. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TIMEOUT_CF_EN_SHIFT 7
  898. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN (0x1<<8)
  899. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_SEQ_EN_SHIFT 8
  900. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_SND_NXT_EN (0x1<<9)
  901. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_SND_NXT_EN_SHIFT 9
  902. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<10)
  903. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 10
  904. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_FLAG (0x1<<11)
  905. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_FLAG_SHIFT 11
  906. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_EN (0x1<<12)
  907. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_EN_SHIFT 12
  908. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_EN (0x1<<13)
  909. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_EN_SHIFT 13
  910. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF (0x3<<14)
  911. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_CF_SHIFT 14
  912. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF (0x3<<16)
  913. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX2_CF_SHIFT 16
  914. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_BLOCKED (0x1<<18)
  915. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_BLOCKED_SHIFT 18
  916. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<19)
  917. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 19
  918. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_EN (0x1<<20)
  919. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_EN_SHIFT 20
  920. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_EN (0x1<<21)
  921. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_EN_SHIFT 21
  922. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED1 (0x3<<22)
  923. #define __TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED1_SHIFT 22
  924. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ (0xF<<24)
  925. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_PEND_SEQ_SHIFT 24
  926. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ (0xF<<28)
  927. #define TSTORM_TCP_TCP_AG_CONTEXT_SECTION_RETRANSMIT_DONE_SEQ_SHIFT 28
  928. u32 snd_max;
  929. u32 snd_una;
  930. u32 __reserved2;
  931. };
  932. /*
  933. * The iscsi aggregative context of Tstorm
  934. */
  935. struct tstorm_iscsi_ag_context {
  936. #if defined(__BIG_ENDIAN)
  937. u16 ulp_credit;
  938. u8 agg_vars1;
  939. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  940. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  941. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  942. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  943. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  944. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  945. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  946. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  947. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF (0x3<<4)
  948. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_SHIFT 4
  949. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG (0x1<<6)
  950. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG_SHIFT 6
  951. #define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG (0x1<<7)
  952. #define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG_SHIFT 7
  953. u8 state;
  954. #elif defined(__LITTLE_ENDIAN)
  955. u8 state;
  956. u8 agg_vars1;
  957. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  958. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  959. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  960. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  961. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  962. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  963. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  964. #define TSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  965. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF (0x3<<4)
  966. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_SHIFT 4
  967. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG (0x1<<6)
  968. #define __TSTORM_ISCSI_AG_CONTEXT_AUX3_FLAG_SHIFT 6
  969. #define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG (0x1<<7)
  970. #define __TSTORM_ISCSI_AG_CONTEXT_ACK_ON_FIN_SENT_FLAG_SHIFT 7
  971. u16 ulp_credit;
  972. #endif
  973. #if defined(__BIG_ENDIAN)
  974. u16 __agg_val4;
  975. u16 agg_vars2;
  976. #define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG (0x1<<0)
  977. #define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG_SHIFT 0
  978. #define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG (0x1<<1)
  979. #define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG_SHIFT 1
  980. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF (0x3<<2)
  981. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_SHIFT 2
  982. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF (0x3<<4)
  983. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_SHIFT 4
  984. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF (0x3<<6)
  985. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_SHIFT 6
  986. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF (0x3<<8)
  987. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_SHIFT 8
  988. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG (0x1<<10)
  989. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG_SHIFT 10
  990. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<11)
  991. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 11
  992. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN (0x1<<12)
  993. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN_SHIFT 12
  994. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN (0x1<<13)
  995. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN_SHIFT 13
  996. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
  997. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
  998. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
  999. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
  1000. #elif defined(__LITTLE_ENDIAN)
  1001. u16 agg_vars2;
  1002. #define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG (0x1<<0)
  1003. #define __TSTORM_ISCSI_AG_CONTEXT_MSL_TIMER_SET_FLAG_SHIFT 0
  1004. #define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG (0x1<<1)
  1005. #define __TSTORM_ISCSI_AG_CONTEXT_FIN_SENT_FIRST_FLAG_SHIFT 1
  1006. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF (0x3<<2)
  1007. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_SHIFT 2
  1008. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF (0x3<<4)
  1009. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_SHIFT 4
  1010. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF (0x3<<6)
  1011. #define __TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_SHIFT 6
  1012. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF (0x3<<8)
  1013. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_SHIFT 8
  1014. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG (0x1<<10)
  1015. #define __TSTORM_ISCSI_AG_CONTEXT_AUX7_FLAG_SHIFT 10
  1016. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<11)
  1017. #define __TSTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 11
  1018. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN (0x1<<12)
  1019. #define __TSTORM_ISCSI_AG_CONTEXT_RST_SENT_CF_EN_SHIFT 12
  1020. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN (0x1<<13)
  1021. #define __TSTORM_ISCSI_AG_CONTEXT_WAKEUP_CALL_CF_EN_SHIFT 13
  1022. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN (0x1<<14)
  1023. #define TSTORM_ISCSI_AG_CONTEXT_AUX6_CF_EN_SHIFT 14
  1024. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN (0x1<<15)
  1025. #define TSTORM_ISCSI_AG_CONTEXT_AUX7_CF_EN_SHIFT 15
  1026. u16 __agg_val4;
  1027. #endif
  1028. struct tstorm_tcp_tcp_ag_context_section tcp;
  1029. };
  1030. /*
  1031. * The fcoe aggregative context of Ustorm
  1032. */
  1033. struct ustorm_fcoe_ag_context {
  1034. #if defined(__BIG_ENDIAN)
  1035. u8 __aux_counter_flags;
  1036. u8 agg_vars2;
  1037. #define USTORM_FCOE_AG_CONTEXT_TX_CF (0x3<<0)
  1038. #define USTORM_FCOE_AG_CONTEXT_TX_CF_SHIFT 0
  1039. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF (0x3<<2)
  1040. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_SHIFT 2
  1041. #define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
  1042. #define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
  1043. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
  1044. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
  1045. u8 agg_vars1;
  1046. #define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1047. #define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1048. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1049. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1050. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1051. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1052. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1053. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1054. #define USTORM_FCOE_AG_CONTEXT_INV_CF (0x3<<4)
  1055. #define USTORM_FCOE_AG_CONTEXT_INV_CF_SHIFT 4
  1056. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF (0x3<<6)
  1057. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_SHIFT 6
  1058. u8 state;
  1059. #elif defined(__LITTLE_ENDIAN)
  1060. u8 state;
  1061. u8 agg_vars1;
  1062. #define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1063. #define __USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1064. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1065. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1066. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1067. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1068. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1069. #define USTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1070. #define USTORM_FCOE_AG_CONTEXT_INV_CF (0x3<<4)
  1071. #define USTORM_FCOE_AG_CONTEXT_INV_CF_SHIFT 4
  1072. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF (0x3<<6)
  1073. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_SHIFT 6
  1074. u8 agg_vars2;
  1075. #define USTORM_FCOE_AG_CONTEXT_TX_CF (0x3<<0)
  1076. #define USTORM_FCOE_AG_CONTEXT_TX_CF_SHIFT 0
  1077. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF (0x3<<2)
  1078. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_SHIFT 2
  1079. #define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
  1080. #define USTORM_FCOE_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
  1081. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
  1082. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
  1083. u8 __aux_counter_flags;
  1084. #endif
  1085. #if defined(__BIG_ENDIAN)
  1086. u8 cdu_usage;
  1087. u8 agg_misc2;
  1088. u16 pbf_tx_seq_ack;
  1089. #elif defined(__LITTLE_ENDIAN)
  1090. u16 pbf_tx_seq_ack;
  1091. u8 agg_misc2;
  1092. u8 cdu_usage;
  1093. #endif
  1094. u32 agg_misc4;
  1095. #if defined(__BIG_ENDIAN)
  1096. u8 agg_val3_th;
  1097. u8 agg_val3;
  1098. u16 agg_misc3;
  1099. #elif defined(__LITTLE_ENDIAN)
  1100. u16 agg_misc3;
  1101. u8 agg_val3;
  1102. u8 agg_val3_th;
  1103. #endif
  1104. u32 expired_task_id;
  1105. u32 agg_misc4_th;
  1106. #if defined(__BIG_ENDIAN)
  1107. u16 cq_prod;
  1108. u16 cq_cons;
  1109. #elif defined(__LITTLE_ENDIAN)
  1110. u16 cq_cons;
  1111. u16 cq_prod;
  1112. #endif
  1113. #if defined(__BIG_ENDIAN)
  1114. u16 __reserved2;
  1115. u8 decision_rules;
  1116. #define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE (0x7<<0)
  1117. #define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE_SHIFT 0
  1118. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
  1119. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
  1120. #define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG (0x1<<6)
  1121. #define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG_SHIFT 6
  1122. #define __USTORM_FCOE_AG_CONTEXT_RESERVED1 (0x1<<7)
  1123. #define __USTORM_FCOE_AG_CONTEXT_RESERVED1_SHIFT 7
  1124. u8 decision_rule_enable_bits;
  1125. #define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN (0x1<<0)
  1126. #define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN_SHIFT 0
  1127. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
  1128. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
  1129. #define USTORM_FCOE_AG_CONTEXT_TX_CF_EN (0x1<<2)
  1130. #define USTORM_FCOE_AG_CONTEXT_TX_CF_EN_SHIFT 2
  1131. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
  1132. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
  1133. #define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<4)
  1134. #define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 4
  1135. #define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN (0x1<<5)
  1136. #define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN_SHIFT 5
  1137. #define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
  1138. #define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
  1139. #define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1140. #define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1141. #elif defined(__LITTLE_ENDIAN)
  1142. u8 decision_rule_enable_bits;
  1143. #define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN (0x1<<0)
  1144. #define __USTORM_FCOE_AG_CONTEXT_RESERVED_INV_CF_EN_SHIFT 0
  1145. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
  1146. #define USTORM_FCOE_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
  1147. #define USTORM_FCOE_AG_CONTEXT_TX_CF_EN (0x1<<2)
  1148. #define USTORM_FCOE_AG_CONTEXT_TX_CF_EN_SHIFT 2
  1149. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
  1150. #define __USTORM_FCOE_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
  1151. #define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<4)
  1152. #define __USTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 4
  1153. #define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN (0x1<<5)
  1154. #define __USTORM_FCOE_AG_CONTEXT_QUEUE0_CF_EN_SHIFT 5
  1155. #define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
  1156. #define __USTORM_FCOE_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
  1157. #define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1158. #define __USTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1159. u8 decision_rules;
  1160. #define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE (0x7<<0)
  1161. #define USTORM_FCOE_AG_CONTEXT_CQ_DEC_RULE_SHIFT 0
  1162. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
  1163. #define __USTORM_FCOE_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
  1164. #define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG (0x1<<6)
  1165. #define USTORM_FCOE_AG_CONTEXT_CQ_ARM_N_FLAG_SHIFT 6
  1166. #define __USTORM_FCOE_AG_CONTEXT_RESERVED1 (0x1<<7)
  1167. #define __USTORM_FCOE_AG_CONTEXT_RESERVED1_SHIFT 7
  1168. u16 __reserved2;
  1169. #endif
  1170. };
  1171. /*
  1172. * The iscsi aggregative context of Ustorm
  1173. */
  1174. struct ustorm_iscsi_ag_context {
  1175. #if defined(__BIG_ENDIAN)
  1176. u8 __aux_counter_flags;
  1177. u8 agg_vars2;
  1178. #define USTORM_ISCSI_AG_CONTEXT_TX_CF (0x3<<0)
  1179. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_SHIFT 0
  1180. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF (0x3<<2)
  1181. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_SHIFT 2
  1182. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
  1183. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
  1184. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
  1185. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
  1186. u8 agg_vars1;
  1187. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1188. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1189. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1190. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1191. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1192. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1193. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1194. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1195. #define USTORM_ISCSI_AG_CONTEXT_INV_CF (0x3<<4)
  1196. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_SHIFT 4
  1197. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF (0x3<<6)
  1198. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_SHIFT 6
  1199. u8 state;
  1200. #elif defined(__LITTLE_ENDIAN)
  1201. u8 state;
  1202. u8 agg_vars1;
  1203. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1204. #define __USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1205. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1206. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1207. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1208. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1209. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1210. #define USTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1211. #define USTORM_ISCSI_AG_CONTEXT_INV_CF (0x3<<4)
  1212. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_SHIFT 4
  1213. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF (0x3<<6)
  1214. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_SHIFT 6
  1215. u8 agg_vars2;
  1216. #define USTORM_ISCSI_AG_CONTEXT_TX_CF (0x3<<0)
  1217. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_SHIFT 0
  1218. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF (0x3<<2)
  1219. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_SHIFT 2
  1220. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE (0x7<<4)
  1221. #define USTORM_ISCSI_AG_CONTEXT_AGG_MISC4_RULE_SHIFT 4
  1222. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK (0x1<<7)
  1223. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_MASK_SHIFT 7
  1224. u8 __aux_counter_flags;
  1225. #endif
  1226. #if defined(__BIG_ENDIAN)
  1227. u8 cdu_usage;
  1228. u8 agg_misc2;
  1229. u16 __cq_local_comp_itt_val;
  1230. #elif defined(__LITTLE_ENDIAN)
  1231. u16 __cq_local_comp_itt_val;
  1232. u8 agg_misc2;
  1233. u8 cdu_usage;
  1234. #endif
  1235. u32 agg_misc4;
  1236. #if defined(__BIG_ENDIAN)
  1237. u8 agg_val3_th;
  1238. u8 agg_val3;
  1239. u16 agg_misc3;
  1240. #elif defined(__LITTLE_ENDIAN)
  1241. u16 agg_misc3;
  1242. u8 agg_val3;
  1243. u8 agg_val3_th;
  1244. #endif
  1245. u32 agg_val1;
  1246. u32 agg_misc4_th;
  1247. #if defined(__BIG_ENDIAN)
  1248. u16 agg_val2_th;
  1249. u16 agg_val2;
  1250. #elif defined(__LITTLE_ENDIAN)
  1251. u16 agg_val2;
  1252. u16 agg_val2_th;
  1253. #endif
  1254. #if defined(__BIG_ENDIAN)
  1255. u16 __reserved2;
  1256. u8 decision_rules;
  1257. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE (0x7<<0)
  1258. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE_SHIFT 0
  1259. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
  1260. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
  1261. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG (0x1<<6)
  1262. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG_SHIFT 6
  1263. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1 (0x1<<7)
  1264. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1_SHIFT 7
  1265. u8 decision_rule_enable_bits;
  1266. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN (0x1<<0)
  1267. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN_SHIFT 0
  1268. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
  1269. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
  1270. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN (0x1<<2)
  1271. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN_SHIFT 2
  1272. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
  1273. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
  1274. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN (0x1<<4)
  1275. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN_SHIFT 4
  1276. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<5)
  1277. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 5
  1278. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
  1279. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
  1280. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1281. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1282. #elif defined(__LITTLE_ENDIAN)
  1283. u8 decision_rule_enable_bits;
  1284. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN (0x1<<0)
  1285. #define USTORM_ISCSI_AG_CONTEXT_INV_CF_EN_SHIFT 0
  1286. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN (0x1<<1)
  1287. #define USTORM_ISCSI_AG_CONTEXT_COMPLETION_CF_EN_SHIFT 1
  1288. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN (0x1<<2)
  1289. #define USTORM_ISCSI_AG_CONTEXT_TX_CF_EN_SHIFT 2
  1290. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN (0x1<<3)
  1291. #define __USTORM_ISCSI_AG_CONTEXT_TIMER_CF_EN_SHIFT 3
  1292. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN (0x1<<4)
  1293. #define __USTORM_ISCSI_AG_CONTEXT_CQ_LOCAL_COMP_CF_EN_SHIFT 4
  1294. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN (0x1<<5)
  1295. #define __USTORM_ISCSI_AG_CONTEXT_QUEUES_FLUSH_Q0_CF_EN_SHIFT 5
  1296. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN (0x1<<6)
  1297. #define __USTORM_ISCSI_AG_CONTEXT_AUX3_CF_EN_SHIFT 6
  1298. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1299. #define __USTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1300. u8 decision_rules;
  1301. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE (0x7<<0)
  1302. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_RULE_SHIFT 0
  1303. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE (0x7<<3)
  1304. #define __USTORM_ISCSI_AG_CONTEXT_AGG_VAL3_RULE_SHIFT 3
  1305. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG (0x1<<6)
  1306. #define USTORM_ISCSI_AG_CONTEXT_AGG_VAL2_ARM_N_FLAG_SHIFT 6
  1307. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1 (0x1<<7)
  1308. #define __USTORM_ISCSI_AG_CONTEXT_RESERVED1_SHIFT 7
  1309. u16 __reserved2;
  1310. #endif
  1311. };
  1312. /*
  1313. * The fcoe aggregative context section of Xstorm
  1314. */
  1315. struct xstorm_fcoe_extra_ag_context_section {
  1316. #if defined(__BIG_ENDIAN)
  1317. u8 tcp_agg_vars1;
  1318. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51 (0x3<<0)
  1319. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51_SHIFT 0
  1320. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
  1321. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
  1322. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
  1323. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
  1324. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN (0x1<<6)
  1325. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN_SHIFT 6
  1326. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG (0x1<<7)
  1327. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG_SHIFT 7
  1328. u8 __reserved_da_cnt;
  1329. u16 __mtu;
  1330. #elif defined(__LITTLE_ENDIAN)
  1331. u16 __mtu;
  1332. u8 __reserved_da_cnt;
  1333. u8 tcp_agg_vars1;
  1334. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51 (0x3<<0)
  1335. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED51_SHIFT 0
  1336. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
  1337. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
  1338. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
  1339. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
  1340. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN (0x1<<6)
  1341. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_CLEAR_DA_TIMER_EN_SHIFT 6
  1342. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG (0x1<<7)
  1343. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_DA_EXPIRATION_FLAG_SHIFT 7
  1344. #endif
  1345. u32 snd_nxt;
  1346. u32 __xfrqe_bd_addr_lo;
  1347. u32 __xfrqe_bd_addr_hi;
  1348. u32 __xfrqe_data1;
  1349. #if defined(__BIG_ENDIAN)
  1350. u8 __agg_val8_th;
  1351. u8 __tx_dest;
  1352. u16 tcp_agg_vars2;
  1353. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57 (0x1<<0)
  1354. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57_SHIFT 0
  1355. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58 (0x1<<1)
  1356. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58_SHIFT 1
  1357. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59 (0x1<<2)
  1358. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59_SHIFT 2
  1359. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
  1360. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
  1361. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
  1362. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
  1363. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60 (0x1<<5)
  1364. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60_SHIFT 5
  1365. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN (0x1<<6)
  1366. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN_SHIFT 6
  1367. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
  1368. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
  1369. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN (0x1<<8)
  1370. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN_SHIFT 8
  1371. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
  1372. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
  1373. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
  1374. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
  1375. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
  1376. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
  1377. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
  1378. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
  1379. #elif defined(__LITTLE_ENDIAN)
  1380. u16 tcp_agg_vars2;
  1381. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57 (0x1<<0)
  1382. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED57_SHIFT 0
  1383. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58 (0x1<<1)
  1384. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED58_SHIFT 1
  1385. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59 (0x1<<2)
  1386. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED59_SHIFT 2
  1387. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
  1388. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
  1389. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
  1390. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
  1391. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60 (0x1<<5)
  1392. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED60_SHIFT 5
  1393. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN (0x1<<6)
  1394. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_ACK_TO_FE_UPDATED_EN_SHIFT 6
  1395. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
  1396. #define XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
  1397. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN (0x1<<8)
  1398. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_RESERVED_TX_FIN_FLAG_EN_SHIFT 8
  1399. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
  1400. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
  1401. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
  1402. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
  1403. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
  1404. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
  1405. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
  1406. #define __XSTORM_FCOE_EXTRA_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
  1407. u8 __tx_dest;
  1408. u8 __agg_val8_th;
  1409. #endif
  1410. u32 __sq_base_addr_lo;
  1411. u32 __sq_base_addr_hi;
  1412. u32 __xfrq_base_addr_lo;
  1413. u32 __xfrq_base_addr_hi;
  1414. #if defined(__BIG_ENDIAN)
  1415. u16 __xfrq_cons;
  1416. u16 __xfrq_prod;
  1417. #elif defined(__LITTLE_ENDIAN)
  1418. u16 __xfrq_prod;
  1419. u16 __xfrq_cons;
  1420. #endif
  1421. #if defined(__BIG_ENDIAN)
  1422. u8 __tcp_agg_vars5;
  1423. u8 __tcp_agg_vars4;
  1424. u8 __tcp_agg_vars3;
  1425. u8 __reserved_force_pure_ack_cnt;
  1426. #elif defined(__LITTLE_ENDIAN)
  1427. u8 __reserved_force_pure_ack_cnt;
  1428. u8 __tcp_agg_vars3;
  1429. u8 __tcp_agg_vars4;
  1430. u8 __tcp_agg_vars5;
  1431. #endif
  1432. u32 __tcp_agg_vars6;
  1433. #if defined(__BIG_ENDIAN)
  1434. u16 __xfrqe_mng;
  1435. u16 __tcp_agg_vars7;
  1436. #elif defined(__LITTLE_ENDIAN)
  1437. u16 __tcp_agg_vars7;
  1438. u16 __xfrqe_mng;
  1439. #endif
  1440. u32 __xfrqe_data0;
  1441. u32 __agg_val10_th;
  1442. #if defined(__BIG_ENDIAN)
  1443. u16 __reserved3;
  1444. u8 __reserved2;
  1445. u8 __da_only_cnt;
  1446. #elif defined(__LITTLE_ENDIAN)
  1447. u8 __da_only_cnt;
  1448. u8 __reserved2;
  1449. u16 __reserved3;
  1450. #endif
  1451. };
  1452. /*
  1453. * The fcoe aggregative context of Xstorm
  1454. */
  1455. struct xstorm_fcoe_ag_context {
  1456. #if defined(__BIG_ENDIAN)
  1457. u16 agg_val1;
  1458. u8 agg_vars1;
  1459. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1460. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1461. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1462. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1463. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED51 (0x1<<2)
  1464. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED51_SHIFT 2
  1465. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED52 (0x1<<3)
  1466. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED52_SHIFT 3
  1467. #define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  1468. #define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  1469. #define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN (0x1<<5)
  1470. #define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN_SHIFT 5
  1471. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  1472. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  1473. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN (0x1<<7)
  1474. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN_SHIFT 7
  1475. u8 __state;
  1476. #elif defined(__LITTLE_ENDIAN)
  1477. u8 __state;
  1478. u8 agg_vars1;
  1479. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1480. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1481. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1482. #define __XSTORM_FCOE_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1483. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED51 (0x1<<2)
  1484. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED51_SHIFT 2
  1485. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED52 (0x1<<3)
  1486. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED52_SHIFT 3
  1487. #define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  1488. #define __XSTORM_FCOE_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  1489. #define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN (0x1<<5)
  1490. #define XSTORM_FCOE_AG_CONTEXT_NAGLE_EN_SHIFT 5
  1491. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  1492. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  1493. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN (0x1<<7)
  1494. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED_UNA_GT_NXT_EN_SHIFT 7
  1495. u16 agg_val1;
  1496. #endif
  1497. #if defined(__BIG_ENDIAN)
  1498. u8 cdu_reserved;
  1499. u8 __agg_vars4;
  1500. u8 agg_vars3;
  1501. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  1502. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  1503. #define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF (0x3<<6)
  1504. #define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF_SHIFT 6
  1505. u8 agg_vars2;
  1506. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF (0x3<<0)
  1507. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_SHIFT 0
  1508. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  1509. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  1510. #define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  1511. #define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  1512. #define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  1513. #define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  1514. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  1515. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  1516. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1517. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1518. #elif defined(__LITTLE_ENDIAN)
  1519. u8 agg_vars2;
  1520. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF (0x3<<0)
  1521. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_SHIFT 0
  1522. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  1523. #define __XSTORM_FCOE_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  1524. #define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  1525. #define __XSTORM_FCOE_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  1526. #define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  1527. #define __XSTORM_FCOE_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  1528. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  1529. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  1530. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1531. #define __XSTORM_FCOE_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1532. u8 agg_vars3;
  1533. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  1534. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  1535. #define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF (0x3<<6)
  1536. #define __XSTORM_FCOE_AG_CONTEXT_AUX19_CF_SHIFT 6
  1537. u8 __agg_vars4;
  1538. u8 cdu_reserved;
  1539. #endif
  1540. u32 more_to_send;
  1541. #if defined(__BIG_ENDIAN)
  1542. u16 agg_vars5;
  1543. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  1544. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  1545. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  1546. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  1547. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  1548. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  1549. #define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE (0x3<<14)
  1550. #define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE_SHIFT 14
  1551. u16 sq_cons;
  1552. #elif defined(__LITTLE_ENDIAN)
  1553. u16 sq_cons;
  1554. u16 agg_vars5;
  1555. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  1556. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  1557. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  1558. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  1559. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  1560. #define XSTORM_FCOE_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  1561. #define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE (0x3<<14)
  1562. #define __XSTORM_FCOE_AG_CONTEXT_CONFQ_DEC_RULE_SHIFT 14
  1563. #endif
  1564. struct xstorm_fcoe_extra_ag_context_section __extra_section;
  1565. #if defined(__BIG_ENDIAN)
  1566. u16 agg_vars7;
  1567. #define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  1568. #define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  1569. #define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  1570. #define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  1571. #define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF (0x3<<4)
  1572. #define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF_SHIFT 4
  1573. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  1574. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  1575. #define XSTORM_FCOE_AG_CONTEXT_AUX1_CF (0x3<<8)
  1576. #define XSTORM_FCOE_AG_CONTEXT_AUX1_CF_SHIFT 8
  1577. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED62 (0x1<<10)
  1578. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED62_SHIFT 10
  1579. #define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  1580. #define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  1581. #define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  1582. #define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  1583. #define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  1584. #define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  1585. #define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  1586. #define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  1587. #define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG (0x1<<15)
  1588. #define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG_SHIFT 15
  1589. u8 agg_val3_th;
  1590. u8 agg_vars6;
  1591. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  1592. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  1593. #define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE (0x7<<3)
  1594. #define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE_SHIFT 3
  1595. #define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE (0x3<<6)
  1596. #define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE_SHIFT 6
  1597. #elif defined(__LITTLE_ENDIAN)
  1598. u8 agg_vars6;
  1599. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  1600. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  1601. #define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE (0x7<<3)
  1602. #define __XSTORM_FCOE_AG_CONTEXT_XFRQ_DEC_RULE_SHIFT 3
  1603. #define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE (0x3<<6)
  1604. #define __XSTORM_FCOE_AG_CONTEXT_SQ_DEC_RULE_SHIFT 6
  1605. u8 agg_val3_th;
  1606. u16 agg_vars7;
  1607. #define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  1608. #define __XSTORM_FCOE_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  1609. #define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  1610. #define __XSTORM_FCOE_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  1611. #define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF (0x3<<4)
  1612. #define __XSTORM_FCOE_AG_CONTEXT_QUEUE0_CF_SHIFT 4
  1613. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  1614. #define XSTORM_FCOE_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  1615. #define XSTORM_FCOE_AG_CONTEXT_AUX1_CF (0x3<<8)
  1616. #define XSTORM_FCOE_AG_CONTEXT_AUX1_CF_SHIFT 8
  1617. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED62 (0x1<<10)
  1618. #define __XSTORM_FCOE_AG_CONTEXT_RESERVED62_SHIFT 10
  1619. #define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  1620. #define __XSTORM_FCOE_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  1621. #define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  1622. #define __XSTORM_FCOE_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  1623. #define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  1624. #define __XSTORM_FCOE_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  1625. #define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  1626. #define __XSTORM_FCOE_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  1627. #define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG (0x1<<15)
  1628. #define __XSTORM_FCOE_AG_CONTEXT_AUX2_FLAG_SHIFT 15
  1629. #endif
  1630. #if defined(__BIG_ENDIAN)
  1631. u16 __agg_val11_th;
  1632. u16 __agg_val11;
  1633. #elif defined(__LITTLE_ENDIAN)
  1634. u16 __agg_val11;
  1635. u16 __agg_val11_th;
  1636. #endif
  1637. #if defined(__BIG_ENDIAN)
  1638. u8 __reserved1;
  1639. u8 __agg_val6_th;
  1640. u16 __agg_val9;
  1641. #elif defined(__LITTLE_ENDIAN)
  1642. u16 __agg_val9;
  1643. u8 __agg_val6_th;
  1644. u8 __reserved1;
  1645. #endif
  1646. #if defined(__BIG_ENDIAN)
  1647. u16 confq_cons;
  1648. u16 confq_prod;
  1649. #elif defined(__LITTLE_ENDIAN)
  1650. u16 confq_prod;
  1651. u16 confq_cons;
  1652. #endif
  1653. u32 agg_vars8;
  1654. #define XSTORM_FCOE_AG_CONTEXT_AGG_MISC2 (0xFFFFFF<<0)
  1655. #define XSTORM_FCOE_AG_CONTEXT_AGG_MISC2_SHIFT 0
  1656. #define XSTORM_FCOE_AG_CONTEXT_AGG_MISC3 (0xFF<<24)
  1657. #define XSTORM_FCOE_AG_CONTEXT_AGG_MISC3_SHIFT 24
  1658. #if defined(__BIG_ENDIAN)
  1659. u16 __cache_wqe_db;
  1660. u16 sq_prod;
  1661. #elif defined(__LITTLE_ENDIAN)
  1662. u16 sq_prod;
  1663. u16 __cache_wqe_db;
  1664. #endif
  1665. #if defined(__BIG_ENDIAN)
  1666. u8 agg_val3;
  1667. u8 agg_val6;
  1668. u8 agg_val5_th;
  1669. u8 agg_val5;
  1670. #elif defined(__LITTLE_ENDIAN)
  1671. u8 agg_val5;
  1672. u8 agg_val5_th;
  1673. u8 agg_val6;
  1674. u8 agg_val3;
  1675. #endif
  1676. #if defined(__BIG_ENDIAN)
  1677. u16 __agg_misc1;
  1678. u16 agg_limit1;
  1679. #elif defined(__LITTLE_ENDIAN)
  1680. u16 agg_limit1;
  1681. u16 __agg_misc1;
  1682. #endif
  1683. u32 completion_seq;
  1684. u32 confq_pbl_base_lo;
  1685. u32 confq_pbl_base_hi;
  1686. };
  1687. /*
  1688. * The tcp aggregative context section of Xstorm
  1689. */
  1690. struct xstorm_tcp_tcp_ag_context_section {
  1691. #if defined(__BIG_ENDIAN)
  1692. u8 tcp_agg_vars1;
  1693. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF (0x3<<0)
  1694. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF_SHIFT 0
  1695. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
  1696. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
  1697. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
  1698. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
  1699. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN (0x1<<6)
  1700. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN_SHIFT 6
  1701. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG (0x1<<7)
  1702. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG_SHIFT 7
  1703. u8 __da_cnt;
  1704. u16 mss;
  1705. #elif defined(__LITTLE_ENDIAN)
  1706. u16 mss;
  1707. u8 __da_cnt;
  1708. u8 tcp_agg_vars1;
  1709. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF (0x3<<0)
  1710. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_DA_TIMER_CF_SHIFT 0
  1711. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED (0x3<<2)
  1712. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_SHIFT 2
  1713. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF (0x3<<4)
  1714. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_SHIFT 4
  1715. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN (0x1<<6)
  1716. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CLEAR_DA_TIMER_EN_SHIFT 6
  1717. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG (0x1<<7)
  1718. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_EXPIRATION_FLAG_SHIFT 7
  1719. #endif
  1720. u32 snd_nxt;
  1721. u32 tx_wnd;
  1722. u32 snd_una;
  1723. u32 local_adv_wnd;
  1724. #if defined(__BIG_ENDIAN)
  1725. u8 __agg_val8_th;
  1726. u8 __tx_dest;
  1727. u16 tcp_agg_vars2;
  1728. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG (0x1<<0)
  1729. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_SHIFT 0
  1730. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED (0x1<<1)
  1731. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED_SHIFT 1
  1732. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE (0x1<<2)
  1733. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE_SHIFT 2
  1734. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
  1735. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
  1736. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
  1737. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
  1738. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE (0x1<<5)
  1739. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE_SHIFT 5
  1740. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN (0x1<<6)
  1741. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN_SHIFT 6
  1742. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
  1743. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
  1744. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN (0x1<<8)
  1745. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN_SHIFT 8
  1746. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
  1747. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
  1748. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
  1749. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
  1750. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
  1751. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
  1752. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
  1753. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
  1754. #elif defined(__LITTLE_ENDIAN)
  1755. u16 tcp_agg_vars2;
  1756. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG (0x1<<0)
  1757. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_SHIFT 0
  1758. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED (0x1<<1)
  1759. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_UNBLOCKED_SHIFT 1
  1760. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE (0x1<<2)
  1761. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_TIMER_ACTIVE_SHIFT 2
  1762. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG (0x1<<3)
  1763. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX3_FLAG_SHIFT 3
  1764. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG (0x1<<4)
  1765. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX4_FLAG_SHIFT 4
  1766. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE (0x1<<5)
  1767. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DA_ENABLE_SHIFT 5
  1768. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN (0x1<<6)
  1769. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ACK_TO_FE_UPDATED_EN_SHIFT 6
  1770. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN (0x1<<7)
  1771. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SIDEBAND_SENT_CF_EN_SHIFT 7
  1772. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN (0x1<<8)
  1773. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_FIN_FLAG_EN_SHIFT 8
  1774. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG (0x1<<9)
  1775. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX1_FLAG_SHIFT 9
  1776. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF (0x3<<10)
  1777. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_SET_RTO_CF_SHIFT 10
  1778. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF (0x3<<12)
  1779. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_UPDATED_CF_SHIFT 12
  1780. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF (0x3<<14)
  1781. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_SHIFT 14
  1782. u8 __tx_dest;
  1783. u8 __agg_val8_th;
  1784. #endif
  1785. u32 ack_to_far_end;
  1786. u32 rto_timer;
  1787. u32 ka_timer;
  1788. u32 ts_to_echo;
  1789. #if defined(__BIG_ENDIAN)
  1790. u16 __agg_val7_th;
  1791. u16 __agg_val7;
  1792. #elif defined(__LITTLE_ENDIAN)
  1793. u16 __agg_val7;
  1794. u16 __agg_val7_th;
  1795. #endif
  1796. #if defined(__BIG_ENDIAN)
  1797. u8 __tcp_agg_vars5;
  1798. u8 __tcp_agg_vars4;
  1799. u8 __tcp_agg_vars3;
  1800. u8 __force_pure_ack_cnt;
  1801. #elif defined(__LITTLE_ENDIAN)
  1802. u8 __force_pure_ack_cnt;
  1803. u8 __tcp_agg_vars3;
  1804. u8 __tcp_agg_vars4;
  1805. u8 __tcp_agg_vars5;
  1806. #endif
  1807. u32 tcp_agg_vars6;
  1808. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_CF_EN (0x1<<0)
  1809. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TS_TO_ECHO_CF_EN_SHIFT 0
  1810. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_EN (0x1<<1)
  1811. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TX_DEST_UPDATED_CF_EN_SHIFT 1
  1812. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_EN (0x1<<2)
  1813. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_EN_SHIFT 2
  1814. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN (0x1<<3)
  1815. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_EN_SHIFT 3
  1816. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX6_FLAG (0x1<<4)
  1817. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX6_FLAG_SHIFT 4
  1818. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX7_FLAG (0x1<<5)
  1819. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX7_FLAG_SHIFT 5
  1820. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX5_CF (0x3<<6)
  1821. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX5_CF_SHIFT 6
  1822. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF (0x3<<8)
  1823. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX9_CF_SHIFT 8
  1824. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF (0x3<<10)
  1825. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX10_CF_SHIFT 10
  1826. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF (0x3<<12)
  1827. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX11_CF_SHIFT 12
  1828. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF (0x3<<14)
  1829. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX12_CF_SHIFT 14
  1830. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX13_CF (0x3<<16)
  1831. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX13_CF_SHIFT 16
  1832. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX14_CF (0x3<<18)
  1833. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX14_CF_SHIFT 18
  1834. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX15_CF (0x3<<20)
  1835. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX15_CF_SHIFT 20
  1836. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX16_CF (0x3<<22)
  1837. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX16_CF_SHIFT 22
  1838. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX17_CF (0x3<<24)
  1839. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_AUX17_CF_SHIFT 24
  1840. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ECE_FLAG (0x1<<26)
  1841. #define XSTORM_TCP_TCP_AG_CONTEXT_SECTION_ECE_FLAG_SHIFT 26
  1842. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED71 (0x1<<27)
  1843. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_RESERVED71_SHIFT 27
  1844. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_FORCE_PURE_ACK_CNT_DIRTY (0x1<<28)
  1845. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_FORCE_PURE_ACK_CNT_DIRTY_SHIFT 28
  1846. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TCP_AUTO_STOP_FLAG (0x1<<29)
  1847. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_TCP_AUTO_STOP_FLAG_SHIFT 29
  1848. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DO_TS_UPDATE_FLAG (0x1<<30)
  1849. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_DO_TS_UPDATE_FLAG_SHIFT 30
  1850. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CANCEL_RETRANSMIT_FLAG (0x1<<31)
  1851. #define __XSTORM_TCP_TCP_AG_CONTEXT_SECTION_CANCEL_RETRANSMIT_FLAG_SHIFT 31
  1852. #if defined(__BIG_ENDIAN)
  1853. u16 __agg_misc6;
  1854. u16 __tcp_agg_vars7;
  1855. #elif defined(__LITTLE_ENDIAN)
  1856. u16 __tcp_agg_vars7;
  1857. u16 __agg_misc6;
  1858. #endif
  1859. u32 __agg_val10;
  1860. u32 __agg_val10_th;
  1861. #if defined(__BIG_ENDIAN)
  1862. u16 __reserved3;
  1863. u8 __reserved2;
  1864. u8 __da_only_cnt;
  1865. #elif defined(__LITTLE_ENDIAN)
  1866. u8 __da_only_cnt;
  1867. u8 __reserved2;
  1868. u16 __reserved3;
  1869. #endif
  1870. };
  1871. /*
  1872. * The iscsi aggregative context of Xstorm
  1873. */
  1874. struct xstorm_iscsi_ag_context {
  1875. #if defined(__BIG_ENDIAN)
  1876. u16 agg_val1;
  1877. u8 agg_vars1;
  1878. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1879. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1880. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1881. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1882. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1883. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1884. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1885. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1886. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  1887. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  1888. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN (0x1<<5)
  1889. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN_SHIFT 5
  1890. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  1891. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  1892. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
  1893. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
  1894. u8 state;
  1895. #elif defined(__LITTLE_ENDIAN)
  1896. u8 state;
  1897. u8 agg_vars1;
  1898. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  1899. #define __XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  1900. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  1901. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  1902. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  1903. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  1904. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  1905. #define XSTORM_ISCSI_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  1906. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  1907. #define __XSTORM_ISCSI_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  1908. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN (0x1<<5)
  1909. #define XSTORM_ISCSI_AG_CONTEXT_NAGLE_EN_SHIFT 5
  1910. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  1911. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  1912. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
  1913. #define __XSTORM_ISCSI_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
  1914. u16 agg_val1;
  1915. #endif
  1916. #if defined(__BIG_ENDIAN)
  1917. u8 cdu_reserved;
  1918. u8 __agg_vars4;
  1919. u8 agg_vars3;
  1920. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  1921. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  1922. #define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
  1923. #define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
  1924. u8 agg_vars2;
  1925. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF (0x3<<0)
  1926. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_SHIFT 0
  1927. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  1928. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  1929. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  1930. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  1931. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  1932. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  1933. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  1934. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  1935. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1936. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1937. #elif defined(__LITTLE_ENDIAN)
  1938. u8 agg_vars2;
  1939. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF (0x3<<0)
  1940. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_SHIFT 0
  1941. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  1942. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  1943. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  1944. #define __XSTORM_ISCSI_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  1945. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  1946. #define __XSTORM_ISCSI_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  1947. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  1948. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  1949. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN (0x1<<7)
  1950. #define __XSTORM_ISCSI_AG_CONTEXT_DQ_CF_EN_SHIFT 7
  1951. u8 agg_vars3;
  1952. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  1953. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  1954. #define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
  1955. #define __XSTORM_ISCSI_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
  1956. u8 __agg_vars4;
  1957. u8 cdu_reserved;
  1958. #endif
  1959. u32 more_to_send;
  1960. #if defined(__BIG_ENDIAN)
  1961. u16 agg_vars5;
  1962. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  1963. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  1964. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  1965. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  1966. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  1967. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  1968. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
  1969. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2_SHIFT 14
  1970. u16 sq_cons;
  1971. #elif defined(__LITTLE_ENDIAN)
  1972. u16 sq_cons;
  1973. u16 agg_vars5;
  1974. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  1975. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  1976. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  1977. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  1978. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  1979. #define XSTORM_ISCSI_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  1980. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
  1981. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE2_SHIFT 14
  1982. #endif
  1983. struct xstorm_tcp_tcp_ag_context_section tcp;
  1984. #if defined(__BIG_ENDIAN)
  1985. u16 agg_vars7;
  1986. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  1987. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  1988. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  1989. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  1990. #define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
  1991. #define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
  1992. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  1993. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  1994. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF (0x3<<8)
  1995. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_SHIFT 8
  1996. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
  1997. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
  1998. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  1999. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  2000. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  2001. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  2002. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  2003. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  2004. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  2005. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  2006. #define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
  2007. #define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
  2008. u8 agg_val3_th;
  2009. u8 agg_vars6;
  2010. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  2011. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  2012. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
  2013. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7_SHIFT 3
  2014. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
  2015. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4_SHIFT 6
  2016. #elif defined(__LITTLE_ENDIAN)
  2017. u8 agg_vars6;
  2018. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  2019. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  2020. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
  2021. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE7_SHIFT 3
  2022. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
  2023. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE4_SHIFT 6
  2024. u8 agg_val3_th;
  2025. u16 agg_vars7;
  2026. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  2027. #define __XSTORM_ISCSI_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  2028. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  2029. #define __XSTORM_ISCSI_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  2030. #define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
  2031. #define __XSTORM_ISCSI_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
  2032. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  2033. #define XSTORM_ISCSI_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  2034. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF (0x3<<8)
  2035. #define XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_SHIFT 8
  2036. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
  2037. #define __XSTORM_ISCSI_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
  2038. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  2039. #define __XSTORM_ISCSI_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  2040. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  2041. #define __XSTORM_ISCSI_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  2042. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  2043. #define __XSTORM_ISCSI_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  2044. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  2045. #define __XSTORM_ISCSI_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  2046. #define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
  2047. #define __XSTORM_ISCSI_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
  2048. #endif
  2049. #if defined(__BIG_ENDIAN)
  2050. u16 __agg_val11_th;
  2051. u16 __gen_data;
  2052. #elif defined(__LITTLE_ENDIAN)
  2053. u16 __gen_data;
  2054. u16 __agg_val11_th;
  2055. #endif
  2056. #if defined(__BIG_ENDIAN)
  2057. u8 __reserved1;
  2058. u8 __agg_val6_th;
  2059. u16 __agg_val9;
  2060. #elif defined(__LITTLE_ENDIAN)
  2061. u16 __agg_val9;
  2062. u8 __agg_val6_th;
  2063. u8 __reserved1;
  2064. #endif
  2065. #if defined(__BIG_ENDIAN)
  2066. u16 hq_prod;
  2067. u16 hq_cons;
  2068. #elif defined(__LITTLE_ENDIAN)
  2069. u16 hq_cons;
  2070. u16 hq_prod;
  2071. #endif
  2072. u32 agg_vars8;
  2073. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC2 (0xFFFFFF<<0)
  2074. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC2_SHIFT 0
  2075. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC3 (0xFF<<24)
  2076. #define XSTORM_ISCSI_AG_CONTEXT_AGG_MISC3_SHIFT 24
  2077. #if defined(__BIG_ENDIAN)
  2078. u16 r2tq_prod;
  2079. u16 sq_prod;
  2080. #elif defined(__LITTLE_ENDIAN)
  2081. u16 sq_prod;
  2082. u16 r2tq_prod;
  2083. #endif
  2084. #if defined(__BIG_ENDIAN)
  2085. u8 agg_val3;
  2086. u8 agg_val6;
  2087. u8 agg_val5_th;
  2088. u8 agg_val5;
  2089. #elif defined(__LITTLE_ENDIAN)
  2090. u8 agg_val5;
  2091. u8 agg_val5_th;
  2092. u8 agg_val6;
  2093. u8 agg_val3;
  2094. #endif
  2095. #if defined(__BIG_ENDIAN)
  2096. u16 __agg_misc1;
  2097. u16 agg_limit1;
  2098. #elif defined(__LITTLE_ENDIAN)
  2099. u16 agg_limit1;
  2100. u16 __agg_misc1;
  2101. #endif
  2102. u32 hq_cons_tcp_seq;
  2103. u32 exp_stat_sn;
  2104. u32 rst_seq_num;
  2105. };
  2106. /*
  2107. * The L5cm aggregative context of XStorm
  2108. */
  2109. struct xstorm_l5cm_ag_context {
  2110. #if defined(__BIG_ENDIAN)
  2111. u16 agg_val1;
  2112. u8 agg_vars1;
  2113. #define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  2114. #define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  2115. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  2116. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  2117. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  2118. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  2119. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  2120. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  2121. #define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  2122. #define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  2123. #define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN (0x1<<5)
  2124. #define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN_SHIFT 5
  2125. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  2126. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  2127. #define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
  2128. #define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
  2129. u8 state;
  2130. #elif defined(__LITTLE_ENDIAN)
  2131. u8 state;
  2132. u8 agg_vars1;
  2133. #define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0 (0x1<<0)
  2134. #define __XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM0_SHIFT 0
  2135. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1 (0x1<<1)
  2136. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM1_SHIFT 1
  2137. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2 (0x1<<2)
  2138. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM2_SHIFT 2
  2139. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3 (0x1<<3)
  2140. #define XSTORM_L5CM_AG_CONTEXT_EXISTS_IN_QM3_SHIFT 3
  2141. #define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN (0x1<<4)
  2142. #define __XSTORM_L5CM_AG_CONTEXT_MORE_TO_SEND_EN_SHIFT 4
  2143. #define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN (0x1<<5)
  2144. #define XSTORM_L5CM_AG_CONTEXT_NAGLE_EN_SHIFT 5
  2145. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG (0x1<<6)
  2146. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_SHIFT 6
  2147. #define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN (0x1<<7)
  2148. #define __XSTORM_L5CM_AG_CONTEXT_UNA_GT_NXT_EN_SHIFT 7
  2149. u16 agg_val1;
  2150. #endif
  2151. #if defined(__BIG_ENDIAN)
  2152. u8 cdu_reserved;
  2153. u8 __agg_vars4;
  2154. u8 agg_vars3;
  2155. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  2156. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  2157. #define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
  2158. #define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
  2159. u8 agg_vars2;
  2160. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF (0x3<<0)
  2161. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_SHIFT 0
  2162. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  2163. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  2164. #define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  2165. #define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  2166. #define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  2167. #define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  2168. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  2169. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  2170. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN (0x1<<7)
  2171. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN_SHIFT 7
  2172. #elif defined(__LITTLE_ENDIAN)
  2173. u8 agg_vars2;
  2174. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF (0x3<<0)
  2175. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_SHIFT 0
  2176. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN (0x1<<2)
  2177. #define __XSTORM_L5CM_AG_CONTEXT_DQ_SPARE_FLAG_EN_SHIFT 2
  2178. #define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG (0x1<<3)
  2179. #define __XSTORM_L5CM_AG_CONTEXT_AUX8_FLAG_SHIFT 3
  2180. #define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG (0x1<<4)
  2181. #define __XSTORM_L5CM_AG_CONTEXT_AUX9_FLAG_SHIFT 4
  2182. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1 (0x3<<5)
  2183. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE1_SHIFT 5
  2184. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN (0x1<<7)
  2185. #define XSTORM_L5CM_AG_CONTEXT_AUX4_CF_EN_SHIFT 7
  2186. u8 agg_vars3;
  2187. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2 (0x3F<<0)
  2188. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM2_SHIFT 0
  2189. #define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF (0x3<<6)
  2190. #define __XSTORM_L5CM_AG_CONTEXT_RX_TS_EN_CF_SHIFT 6
  2191. u8 __agg_vars4;
  2192. u8 cdu_reserved;
  2193. #endif
  2194. u32 more_to_send;
  2195. #if defined(__BIG_ENDIAN)
  2196. u16 agg_vars5;
  2197. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  2198. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  2199. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  2200. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  2201. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  2202. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  2203. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
  2204. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2_SHIFT 14
  2205. u16 agg_val4_th;
  2206. #elif defined(__LITTLE_ENDIAN)
  2207. u16 agg_val4_th;
  2208. u16 agg_vars5;
  2209. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5 (0x3<<0)
  2210. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE5_SHIFT 0
  2211. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0 (0x3F<<2)
  2212. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM0_SHIFT 2
  2213. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1 (0x3F<<8)
  2214. #define XSTORM_L5CM_AG_CONTEXT_PHYSICAL_QUEUE_NUM1_SHIFT 8
  2215. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2 (0x3<<14)
  2216. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE2_SHIFT 14
  2217. #endif
  2218. struct xstorm_tcp_tcp_ag_context_section tcp;
  2219. #if defined(__BIG_ENDIAN)
  2220. u16 agg_vars7;
  2221. #define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  2222. #define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  2223. #define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  2224. #define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  2225. #define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
  2226. #define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
  2227. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  2228. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  2229. #define XSTORM_L5CM_AG_CONTEXT_AUX1_CF (0x3<<8)
  2230. #define XSTORM_L5CM_AG_CONTEXT_AUX1_CF_SHIFT 8
  2231. #define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
  2232. #define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
  2233. #define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  2234. #define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  2235. #define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  2236. #define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  2237. #define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  2238. #define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  2239. #define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  2240. #define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  2241. #define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
  2242. #define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
  2243. u8 agg_val3_th;
  2244. u8 agg_vars6;
  2245. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  2246. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  2247. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
  2248. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7_SHIFT 3
  2249. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
  2250. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4_SHIFT 6
  2251. #elif defined(__LITTLE_ENDIAN)
  2252. u8 agg_vars6;
  2253. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6 (0x7<<0)
  2254. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE6_SHIFT 0
  2255. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7 (0x7<<3)
  2256. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE7_SHIFT 3
  2257. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4 (0x3<<6)
  2258. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE4_SHIFT 6
  2259. u8 agg_val3_th;
  2260. u16 agg_vars7;
  2261. #define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE (0x7<<0)
  2262. #define __XSTORM_L5CM_AG_CONTEXT_AGG_VAL11_DECISION_RULE_SHIFT 0
  2263. #define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG (0x1<<3)
  2264. #define __XSTORM_L5CM_AG_CONTEXT_AUX13_FLAG_SHIFT 3
  2265. #define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF (0x3<<4)
  2266. #define __XSTORM_L5CM_AG_CONTEXT_STORMS_SYNC_CF_SHIFT 4
  2267. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3 (0x3<<6)
  2268. #define XSTORM_L5CM_AG_CONTEXT_DECISION_RULE3_SHIFT 6
  2269. #define XSTORM_L5CM_AG_CONTEXT_AUX1_CF (0x3<<8)
  2270. #define XSTORM_L5CM_AG_CONTEXT_AUX1_CF_SHIFT 8
  2271. #define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK (0x1<<10)
  2272. #define __XSTORM_L5CM_AG_CONTEXT_COMPLETION_SEQ_DECISION_MASK_SHIFT 10
  2273. #define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN (0x1<<11)
  2274. #define __XSTORM_L5CM_AG_CONTEXT_AUX1_CF_EN_SHIFT 11
  2275. #define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG (0x1<<12)
  2276. #define __XSTORM_L5CM_AG_CONTEXT_AUX10_FLAG_SHIFT 12
  2277. #define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG (0x1<<13)
  2278. #define __XSTORM_L5CM_AG_CONTEXT_AUX11_FLAG_SHIFT 13
  2279. #define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG (0x1<<14)
  2280. #define __XSTORM_L5CM_AG_CONTEXT_AUX12_FLAG_SHIFT 14
  2281. #define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN (0x1<<15)
  2282. #define __XSTORM_L5CM_AG_CONTEXT_RX_WND_SCL_EN_SHIFT 15
  2283. #endif
  2284. #if defined(__BIG_ENDIAN)
  2285. u16 __agg_val11_th;
  2286. u16 __gen_data;
  2287. #elif defined(__LITTLE_ENDIAN)
  2288. u16 __gen_data;
  2289. u16 __agg_val11_th;
  2290. #endif
  2291. #if defined(__BIG_ENDIAN)
  2292. u8 __reserved1;
  2293. u8 __agg_val6_th;
  2294. u16 __agg_val9;
  2295. #elif defined(__LITTLE_ENDIAN)
  2296. u16 __agg_val9;
  2297. u8 __agg_val6_th;
  2298. u8 __reserved1;
  2299. #endif
  2300. #if defined(__BIG_ENDIAN)
  2301. u16 agg_val2_th;
  2302. u16 agg_val2;
  2303. #elif defined(__LITTLE_ENDIAN)
  2304. u16 agg_val2;
  2305. u16 agg_val2_th;
  2306. #endif
  2307. u32 agg_vars8;
  2308. #define XSTORM_L5CM_AG_CONTEXT_AGG_MISC2 (0xFFFFFF<<0)
  2309. #define XSTORM_L5CM_AG_CONTEXT_AGG_MISC2_SHIFT 0
  2310. #define XSTORM_L5CM_AG_CONTEXT_AGG_MISC3 (0xFF<<24)
  2311. #define XSTORM_L5CM_AG_CONTEXT_AGG_MISC3_SHIFT 24
  2312. #if defined(__BIG_ENDIAN)
  2313. u16 agg_misc0;
  2314. u16 agg_val4;
  2315. #elif defined(__LITTLE_ENDIAN)
  2316. u16 agg_val4;
  2317. u16 agg_misc0;
  2318. #endif
  2319. #if defined(__BIG_ENDIAN)
  2320. u8 agg_val3;
  2321. u8 agg_val6;
  2322. u8 agg_val5_th;
  2323. u8 agg_val5;
  2324. #elif defined(__LITTLE_ENDIAN)
  2325. u8 agg_val5;
  2326. u8 agg_val5_th;
  2327. u8 agg_val6;
  2328. u8 agg_val3;
  2329. #endif
  2330. #if defined(__BIG_ENDIAN)
  2331. u16 __agg_misc1;
  2332. u16 agg_limit1;
  2333. #elif defined(__LITTLE_ENDIAN)
  2334. u16 agg_limit1;
  2335. u16 __agg_misc1;
  2336. #endif
  2337. u32 completion_seq;
  2338. u32 agg_misc4;
  2339. u32 rst_seq_num;
  2340. };
  2341. /*
  2342. * ABTS info $$KEEP_ENDIANNESS$$
  2343. */
  2344. struct fcoe_abts_info {
  2345. __le16 aborted_task_id;
  2346. __le16 reserved0;
  2347. __le32 reserved1;
  2348. };
  2349. /*
  2350. * Fixed size structure in order to plant it in Union structure
  2351. * $$KEEP_ENDIANNESS$$
  2352. */
  2353. struct fcoe_abts_rsp_union {
  2354. u8 r_ctl;
  2355. u8 rsrv[3];
  2356. __le32 abts_rsp_payload[7];
  2357. };
  2358. /*
  2359. * 4 regs size $$KEEP_ENDIANNESS$$
  2360. */
  2361. struct fcoe_bd_ctx {
  2362. __le32 buf_addr_hi;
  2363. __le32 buf_addr_lo;
  2364. __le16 buf_len;
  2365. __le16 rsrv0;
  2366. __le16 flags;
  2367. __le16 rsrv1;
  2368. };
  2369. /*
  2370. * FCoE cached sges context $$KEEP_ENDIANNESS$$
  2371. */
  2372. struct fcoe_cached_sge_ctx {
  2373. struct regpair cur_buf_addr;
  2374. __le16 cur_buf_rem;
  2375. __le16 second_buf_rem;
  2376. struct regpair second_buf_addr;
  2377. };
  2378. /*
  2379. * Cleanup info $$KEEP_ENDIANNESS$$
  2380. */
  2381. struct fcoe_cleanup_info {
  2382. __le16 cleaned_task_id;
  2383. __le16 rolled_tx_seq_cnt;
  2384. __le32 rolled_tx_data_offset;
  2385. };
  2386. /*
  2387. * Fcp RSP flags $$KEEP_ENDIANNESS$$
  2388. */
  2389. struct fcoe_fcp_rsp_flags {
  2390. u8 flags;
  2391. #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID (0x1<<0)
  2392. #define FCOE_FCP_RSP_FLAGS_FCP_RSP_LEN_VALID_SHIFT 0
  2393. #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID (0x1<<1)
  2394. #define FCOE_FCP_RSP_FLAGS_FCP_SNS_LEN_VALID_SHIFT 1
  2395. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER (0x1<<2)
  2396. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_OVER_SHIFT 2
  2397. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER (0x1<<3)
  2398. #define FCOE_FCP_RSP_FLAGS_FCP_RESID_UNDER_SHIFT 3
  2399. #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ (0x1<<4)
  2400. #define FCOE_FCP_RSP_FLAGS_FCP_CONF_REQ_SHIFT 4
  2401. #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS (0x7<<5)
  2402. #define FCOE_FCP_RSP_FLAGS_FCP_BIDI_FLAGS_SHIFT 5
  2403. };
  2404. /*
  2405. * Fcp RSP payload $$KEEP_ENDIANNESS$$
  2406. */
  2407. struct fcoe_fcp_rsp_payload {
  2408. struct regpair reserved0;
  2409. __le32 fcp_resid;
  2410. u8 scsi_status_code;
  2411. struct fcoe_fcp_rsp_flags fcp_flags;
  2412. __le16 retry_delay_timer;
  2413. __le32 fcp_rsp_len;
  2414. __le32 fcp_sns_len;
  2415. };
  2416. /*
  2417. * Fixed size structure in order to plant it in Union structure
  2418. * $$KEEP_ENDIANNESS$$
  2419. */
  2420. struct fcoe_fcp_rsp_union {
  2421. struct fcoe_fcp_rsp_payload payload;
  2422. struct regpair reserved0;
  2423. };
  2424. /*
  2425. * FC header $$KEEP_ENDIANNESS$$
  2426. */
  2427. struct fcoe_fc_hdr {
  2428. u8 s_id[3];
  2429. u8 cs_ctl;
  2430. u8 d_id[3];
  2431. u8 r_ctl;
  2432. __le16 seq_cnt;
  2433. u8 df_ctl;
  2434. u8 seq_id;
  2435. u8 f_ctl[3];
  2436. u8 type;
  2437. __le32 parameters;
  2438. __le16 rx_id;
  2439. __le16 ox_id;
  2440. };
  2441. /*
  2442. * FC header union $$KEEP_ENDIANNESS$$
  2443. */
  2444. struct fcoe_mp_rsp_union {
  2445. struct fcoe_fc_hdr fc_hdr;
  2446. __le32 mp_payload_len;
  2447. __le32 rsrv;
  2448. };
  2449. /*
  2450. * Completion information $$KEEP_ENDIANNESS$$
  2451. */
  2452. union fcoe_comp_flow_info {
  2453. struct fcoe_fcp_rsp_union fcp_rsp;
  2454. struct fcoe_abts_rsp_union abts_rsp;
  2455. struct fcoe_mp_rsp_union mp_rsp;
  2456. __le32 opaque[8];
  2457. };
  2458. /*
  2459. * External ABTS info $$KEEP_ENDIANNESS$$
  2460. */
  2461. struct fcoe_ext_abts_info {
  2462. __le32 rsrv0[6];
  2463. struct fcoe_abts_info ctx;
  2464. };
  2465. /*
  2466. * External cleanup info $$KEEP_ENDIANNESS$$
  2467. */
  2468. struct fcoe_ext_cleanup_info {
  2469. __le32 rsrv0[6];
  2470. struct fcoe_cleanup_info ctx;
  2471. };
  2472. /*
  2473. * Fcoe FW Tx sequence context $$KEEP_ENDIANNESS$$
  2474. */
  2475. struct fcoe_fw_tx_seq_ctx {
  2476. __le32 data_offset;
  2477. __le16 seq_cnt;
  2478. __le16 rsrv0;
  2479. };
  2480. /*
  2481. * Fcoe external FW Tx sequence context $$KEEP_ENDIANNESS$$
  2482. */
  2483. struct fcoe_ext_fw_tx_seq_ctx {
  2484. __le32 rsrv0[6];
  2485. struct fcoe_fw_tx_seq_ctx ctx;
  2486. };
  2487. /*
  2488. * FCoE multiple sges context $$KEEP_ENDIANNESS$$
  2489. */
  2490. struct fcoe_mul_sges_ctx {
  2491. struct regpair cur_sge_addr;
  2492. __le16 cur_sge_off;
  2493. u8 cur_sge_idx;
  2494. u8 sgl_size;
  2495. };
  2496. /*
  2497. * FCoE external multiple sges context $$KEEP_ENDIANNESS$$
  2498. */
  2499. struct fcoe_ext_mul_sges_ctx {
  2500. struct fcoe_mul_sges_ctx mul_sgl;
  2501. struct regpair rsrv0;
  2502. };
  2503. /*
  2504. * FCP CMD payload $$KEEP_ENDIANNESS$$
  2505. */
  2506. struct fcoe_fcp_cmd_payload {
  2507. __le32 opaque[8];
  2508. };
  2509. /*
  2510. * Fcp xfr rdy payload $$KEEP_ENDIANNESS$$
  2511. */
  2512. struct fcoe_fcp_xfr_rdy_payload {
  2513. __le32 burst_len;
  2514. __le32 data_ro;
  2515. };
  2516. /*
  2517. * FC frame $$KEEP_ENDIANNESS$$
  2518. */
  2519. struct fcoe_fc_frame {
  2520. struct fcoe_fc_hdr fc_hdr;
  2521. __le32 reserved0[2];
  2522. };
  2523. /*
  2524. * FCoE KCQ CQE parameters $$KEEP_ENDIANNESS$$
  2525. */
  2526. union fcoe_kcqe_params {
  2527. __le32 reserved0[4];
  2528. };
  2529. /*
  2530. * FCoE KCQ CQE $$KEEP_ENDIANNESS$$
  2531. */
  2532. struct fcoe_kcqe {
  2533. __le32 fcoe_conn_id;
  2534. __le32 completion_status;
  2535. __le32 fcoe_conn_context_id;
  2536. union fcoe_kcqe_params params;
  2537. __le16 qe_self_seq;
  2538. u8 op_code;
  2539. u8 flags;
  2540. #define FCOE_KCQE_RESERVED0 (0x7<<0)
  2541. #define FCOE_KCQE_RESERVED0_SHIFT 0
  2542. #define FCOE_KCQE_RAMROD_COMPLETION (0x1<<3)
  2543. #define FCOE_KCQE_RAMROD_COMPLETION_SHIFT 3
  2544. #define FCOE_KCQE_LAYER_CODE (0x7<<4)
  2545. #define FCOE_KCQE_LAYER_CODE_SHIFT 4
  2546. #define FCOE_KCQE_LINKED_WITH_NEXT (0x1<<7)
  2547. #define FCOE_KCQE_LINKED_WITH_NEXT_SHIFT 7
  2548. };
  2549. /*
  2550. * FCoE KWQE header $$KEEP_ENDIANNESS$$
  2551. */
  2552. struct fcoe_kwqe_header {
  2553. u8 op_code;
  2554. u8 flags;
  2555. #define FCOE_KWQE_HEADER_RESERVED0 (0xF<<0)
  2556. #define FCOE_KWQE_HEADER_RESERVED0_SHIFT 0
  2557. #define FCOE_KWQE_HEADER_LAYER_CODE (0x7<<4)
  2558. #define FCOE_KWQE_HEADER_LAYER_CODE_SHIFT 4
  2559. #define FCOE_KWQE_HEADER_RESERVED1 (0x1<<7)
  2560. #define FCOE_KWQE_HEADER_RESERVED1_SHIFT 7
  2561. };
  2562. /*
  2563. * FCoE firmware init request 1 $$KEEP_ENDIANNESS$$
  2564. */
  2565. struct fcoe_kwqe_init1 {
  2566. __le16 num_tasks;
  2567. struct fcoe_kwqe_header hdr;
  2568. __le32 task_list_pbl_addr_lo;
  2569. __le32 task_list_pbl_addr_hi;
  2570. __le32 dummy_buffer_addr_lo;
  2571. __le32 dummy_buffer_addr_hi;
  2572. __le16 sq_num_wqes;
  2573. __le16 rq_num_wqes;
  2574. __le16 rq_buffer_log_size;
  2575. __le16 cq_num_wqes;
  2576. __le16 mtu;
  2577. u8 num_sessions_log;
  2578. u8 flags;
  2579. #define FCOE_KWQE_INIT1_LOG_PAGE_SIZE (0xF<<0)
  2580. #define FCOE_KWQE_INIT1_LOG_PAGE_SIZE_SHIFT 0
  2581. #define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC (0x7<<4)
  2582. #define FCOE_KWQE_INIT1_LOG_CACHED_PBES_PER_FUNC_SHIFT 4
  2583. #define FCOE_KWQE_INIT1_RESERVED1 (0x1<<7)
  2584. #define FCOE_KWQE_INIT1_RESERVED1_SHIFT 7
  2585. };
  2586. /*
  2587. * FCoE firmware init request 2 $$KEEP_ENDIANNESS$$
  2588. */
  2589. struct fcoe_kwqe_init2 {
  2590. u8 hsi_major_version;
  2591. u8 hsi_minor_version;
  2592. struct fcoe_kwqe_header hdr;
  2593. __le32 hash_tbl_pbl_addr_lo;
  2594. __le32 hash_tbl_pbl_addr_hi;
  2595. __le32 t2_hash_tbl_addr_lo;
  2596. __le32 t2_hash_tbl_addr_hi;
  2597. __le32 t2_ptr_hash_tbl_addr_lo;
  2598. __le32 t2_ptr_hash_tbl_addr_hi;
  2599. __le32 free_list_count;
  2600. };
  2601. /*
  2602. * FCoE firmware init request 3 $$KEEP_ENDIANNESS$$
  2603. */
  2604. struct fcoe_kwqe_init3 {
  2605. __le16 reserved0;
  2606. struct fcoe_kwqe_header hdr;
  2607. __le32 error_bit_map_lo;
  2608. __le32 error_bit_map_hi;
  2609. u8 perf_config;
  2610. u8 reserved21[3];
  2611. __le32 reserved2[4];
  2612. };
  2613. /*
  2614. * FCoE connection offload request 1 $$KEEP_ENDIANNESS$$
  2615. */
  2616. struct fcoe_kwqe_conn_offload1 {
  2617. __le16 fcoe_conn_id;
  2618. struct fcoe_kwqe_header hdr;
  2619. __le32 sq_addr_lo;
  2620. __le32 sq_addr_hi;
  2621. __le32 rq_pbl_addr_lo;
  2622. __le32 rq_pbl_addr_hi;
  2623. __le32 rq_first_pbe_addr_lo;
  2624. __le32 rq_first_pbe_addr_hi;
  2625. __le16 rq_prod;
  2626. __le16 reserved0;
  2627. };
  2628. /*
  2629. * FCoE connection offload request 2 $$KEEP_ENDIANNESS$$
  2630. */
  2631. struct fcoe_kwqe_conn_offload2 {
  2632. __le16 tx_max_fc_pay_len;
  2633. struct fcoe_kwqe_header hdr;
  2634. __le32 cq_addr_lo;
  2635. __le32 cq_addr_hi;
  2636. __le32 xferq_addr_lo;
  2637. __le32 xferq_addr_hi;
  2638. __le32 conn_db_addr_lo;
  2639. __le32 conn_db_addr_hi;
  2640. __le32 reserved1;
  2641. };
  2642. /*
  2643. * FCoE connection offload request 3 $$KEEP_ENDIANNESS$$
  2644. */
  2645. struct fcoe_kwqe_conn_offload3 {
  2646. __le16 vlan_tag;
  2647. #define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID (0xFFF<<0)
  2648. #define FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID_SHIFT 0
  2649. #define FCOE_KWQE_CONN_OFFLOAD3_CFI (0x1<<12)
  2650. #define FCOE_KWQE_CONN_OFFLOAD3_CFI_SHIFT 12
  2651. #define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY (0x7<<13)
  2652. #define FCOE_KWQE_CONN_OFFLOAD3_PRIORITY_SHIFT 13
  2653. struct fcoe_kwqe_header hdr;
  2654. u8 s_id[3];
  2655. u8 tx_max_conc_seqs_c3;
  2656. u8 d_id[3];
  2657. u8 flags;
  2658. #define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS (0x1<<0)
  2659. #define FCOE_KWQE_CONN_OFFLOAD3_B_MUL_N_PORT_IDS_SHIFT 0
  2660. #define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES (0x1<<1)
  2661. #define FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES_SHIFT 1
  2662. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT (0x1<<2)
  2663. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT_SHIFT 2
  2664. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ (0x1<<3)
  2665. #define FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ_SHIFT 3
  2666. #define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID (0x1<<4)
  2667. #define FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID_SHIFT 4
  2668. #define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID (0x1<<5)
  2669. #define FCOE_KWQE_CONN_OFFLOAD3_B_C2_VALID_SHIFT 5
  2670. #define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0 (0x1<<6)
  2671. #define FCOE_KWQE_CONN_OFFLOAD3_B_ACK_0_SHIFT 6
  2672. #define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG (0x1<<7)
  2673. #define FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG_SHIFT 7
  2674. __le32 reserved;
  2675. __le32 confq_first_pbe_addr_lo;
  2676. __le32 confq_first_pbe_addr_hi;
  2677. __le16 tx_total_conc_seqs;
  2678. __le16 rx_max_fc_pay_len;
  2679. __le16 rx_total_conc_seqs;
  2680. u8 rx_max_conc_seqs_c3;
  2681. u8 rx_open_seqs_exch_c3;
  2682. };
  2683. /*
  2684. * FCoE connection offload request 4 $$KEEP_ENDIANNESS$$
  2685. */
  2686. struct fcoe_kwqe_conn_offload4 {
  2687. u8 e_d_tov_timer_val;
  2688. u8 reserved2;
  2689. struct fcoe_kwqe_header hdr;
  2690. u8 src_mac_addr_lo[2];
  2691. u8 src_mac_addr_mid[2];
  2692. u8 src_mac_addr_hi[2];
  2693. u8 dst_mac_addr_hi[2];
  2694. u8 dst_mac_addr_lo[2];
  2695. u8 dst_mac_addr_mid[2];
  2696. __le32 lcq_addr_lo;
  2697. __le32 lcq_addr_hi;
  2698. __le32 confq_pbl_base_addr_lo;
  2699. __le32 confq_pbl_base_addr_hi;
  2700. };
  2701. /*
  2702. * FCoE connection enable request $$KEEP_ENDIANNESS$$
  2703. */
  2704. struct fcoe_kwqe_conn_enable_disable {
  2705. __le16 reserved0;
  2706. struct fcoe_kwqe_header hdr;
  2707. u8 src_mac_addr_lo[2];
  2708. u8 src_mac_addr_mid[2];
  2709. u8 src_mac_addr_hi[2];
  2710. u16 vlan_tag;
  2711. #define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID (0xFFF<<0)
  2712. #define FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID_SHIFT 0
  2713. #define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI (0x1<<12)
  2714. #define FCOE_KWQE_CONN_ENABLE_DISABLE_CFI_SHIFT 12
  2715. #define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY (0x7<<13)
  2716. #define FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY_SHIFT 13
  2717. u8 dst_mac_addr_lo[2];
  2718. u8 dst_mac_addr_mid[2];
  2719. u8 dst_mac_addr_hi[2];
  2720. __le16 reserved1;
  2721. u8 s_id[3];
  2722. u8 vlan_flag;
  2723. u8 d_id[3];
  2724. u8 reserved3;
  2725. __le32 context_id;
  2726. __le32 conn_id;
  2727. __le32 reserved4;
  2728. };
  2729. /*
  2730. * FCoE connection destroy request $$KEEP_ENDIANNESS$$
  2731. */
  2732. struct fcoe_kwqe_conn_destroy {
  2733. __le16 reserved0;
  2734. struct fcoe_kwqe_header hdr;
  2735. __le32 context_id;
  2736. __le32 conn_id;
  2737. __le32 reserved1[5];
  2738. };
  2739. /*
  2740. * FCoe destroy request $$KEEP_ENDIANNESS$$
  2741. */
  2742. struct fcoe_kwqe_destroy {
  2743. __le16 reserved0;
  2744. struct fcoe_kwqe_header hdr;
  2745. __le32 reserved1[7];
  2746. };
  2747. /*
  2748. * FCoe statistics request $$KEEP_ENDIANNESS$$
  2749. */
  2750. struct fcoe_kwqe_stat {
  2751. __le16 reserved0;
  2752. struct fcoe_kwqe_header hdr;
  2753. __le32 stat_params_addr_lo;
  2754. __le32 stat_params_addr_hi;
  2755. __le32 reserved1[5];
  2756. };
  2757. /*
  2758. * FCoE KWQ WQE $$KEEP_ENDIANNESS$$
  2759. */
  2760. union fcoe_kwqe {
  2761. struct fcoe_kwqe_init1 init1;
  2762. struct fcoe_kwqe_init2 init2;
  2763. struct fcoe_kwqe_init3 init3;
  2764. struct fcoe_kwqe_conn_offload1 conn_offload1;
  2765. struct fcoe_kwqe_conn_offload2 conn_offload2;
  2766. struct fcoe_kwqe_conn_offload3 conn_offload3;
  2767. struct fcoe_kwqe_conn_offload4 conn_offload4;
  2768. struct fcoe_kwqe_conn_enable_disable conn_enable_disable;
  2769. struct fcoe_kwqe_conn_destroy conn_destroy;
  2770. struct fcoe_kwqe_destroy destroy;
  2771. struct fcoe_kwqe_stat statistics;
  2772. };
  2773. /*
  2774. * TX SGL context $$KEEP_ENDIANNESS$$
  2775. */
  2776. union fcoe_sgl_union_ctx {
  2777. struct fcoe_cached_sge_ctx cached_sge;
  2778. struct fcoe_ext_mul_sges_ctx sgl;
  2779. __le32 opaque[5];
  2780. };
  2781. /*
  2782. * Data-In/ELS/BLS information $$KEEP_ENDIANNESS$$
  2783. */
  2784. struct fcoe_read_flow_info {
  2785. union fcoe_sgl_union_ctx sgl_ctx;
  2786. __le32 rsrv0[3];
  2787. };
  2788. /*
  2789. * Fcoe stat context $$KEEP_ENDIANNESS$$
  2790. */
  2791. struct fcoe_s_stat_ctx {
  2792. u8 flags;
  2793. #define FCOE_S_STAT_CTX_ACTIVE (0x1<<0)
  2794. #define FCOE_S_STAT_CTX_ACTIVE_SHIFT 0
  2795. #define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND (0x1<<1)
  2796. #define FCOE_S_STAT_CTX_ACK_ABORT_SEQ_COND_SHIFT 1
  2797. #define FCOE_S_STAT_CTX_ABTS_PERFORMED (0x1<<2)
  2798. #define FCOE_S_STAT_CTX_ABTS_PERFORMED_SHIFT 2
  2799. #define FCOE_S_STAT_CTX_SEQ_TIMEOUT (0x1<<3)
  2800. #define FCOE_S_STAT_CTX_SEQ_TIMEOUT_SHIFT 3
  2801. #define FCOE_S_STAT_CTX_P_RJT (0x1<<4)
  2802. #define FCOE_S_STAT_CTX_P_RJT_SHIFT 4
  2803. #define FCOE_S_STAT_CTX_ACK_EOFT (0x1<<5)
  2804. #define FCOE_S_STAT_CTX_ACK_EOFT_SHIFT 5
  2805. #define FCOE_S_STAT_CTX_RSRV1 (0x3<<6)
  2806. #define FCOE_S_STAT_CTX_RSRV1_SHIFT 6
  2807. };
  2808. /*
  2809. * Fcoe rx seq context $$KEEP_ENDIANNESS$$
  2810. */
  2811. struct fcoe_rx_seq_ctx {
  2812. u8 seq_id;
  2813. struct fcoe_s_stat_ctx s_stat;
  2814. __le16 seq_cnt;
  2815. __le32 low_exp_ro;
  2816. __le32 high_exp_ro;
  2817. };
  2818. /*
  2819. * Fcoe rx_wr union context $$KEEP_ENDIANNESS$$
  2820. */
  2821. union fcoe_rx_wr_union_ctx {
  2822. struct fcoe_read_flow_info read_info;
  2823. union fcoe_comp_flow_info comp_info;
  2824. __le32 opaque[8];
  2825. };
  2826. /*
  2827. * FCoE SQ element $$KEEP_ENDIANNESS$$
  2828. */
  2829. struct fcoe_sqe {
  2830. __le16 wqe;
  2831. #define FCOE_SQE_TASK_ID (0x7FFF<<0)
  2832. #define FCOE_SQE_TASK_ID_SHIFT 0
  2833. #define FCOE_SQE_TOGGLE_BIT (0x1<<15)
  2834. #define FCOE_SQE_TOGGLE_BIT_SHIFT 15
  2835. };
  2836. /*
  2837. * 14 regs $$KEEP_ENDIANNESS$$
  2838. */
  2839. struct fcoe_tce_tx_only {
  2840. union fcoe_sgl_union_ctx sgl_ctx;
  2841. __le32 rsrv0;
  2842. };
  2843. /*
  2844. * 32 bytes (8 regs) used for TX only purposes $$KEEP_ENDIANNESS$$
  2845. */
  2846. union fcoe_tx_wr_rx_rd_union_ctx {
  2847. struct fcoe_fc_frame tx_frame;
  2848. struct fcoe_fcp_cmd_payload fcp_cmd;
  2849. struct fcoe_ext_cleanup_info cleanup;
  2850. struct fcoe_ext_abts_info abts;
  2851. struct fcoe_ext_fw_tx_seq_ctx tx_seq;
  2852. __le32 opaque[8];
  2853. };
  2854. /*
  2855. * tce_tx_wr_rx_rd_const $$KEEP_ENDIANNESS$$
  2856. */
  2857. struct fcoe_tce_tx_wr_rx_rd_const {
  2858. u8 init_flags;
  2859. #define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE (0x7<<0)
  2860. #define FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE_SHIFT 0
  2861. #define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE (0x1<<3)
  2862. #define FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE_SHIFT 3
  2863. #define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE (0x1<<4)
  2864. #define FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE_SHIFT 4
  2865. #define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE (0x3<<5)
  2866. #define FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE_SHIFT 5
  2867. #define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV (0x1<<7)
  2868. #define FCOE_TCE_TX_WR_RX_RD_CONST_SUPPORT_REC_TOV_SHIFT 7
  2869. u8 tx_flags;
  2870. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID (0x1<<0)
  2871. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_VALID_SHIFT 0
  2872. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE (0xF<<1)
  2873. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE_SHIFT 1
  2874. #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1 (0x1<<5)
  2875. #define FCOE_TCE_TX_WR_RX_RD_CONST_RSRV1_SHIFT 5
  2876. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT (0x1<<6)
  2877. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_SEQ_INIT_SHIFT 6
  2878. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_COMP_TRNS (0x1<<7)
  2879. #define FCOE_TCE_TX_WR_RX_RD_CONST_TX_COMP_TRNS_SHIFT 7
  2880. __le16 rsrv3;
  2881. __le32 verify_tx_seq;
  2882. };
  2883. /*
  2884. * tce_tx_wr_rx_rd $$KEEP_ENDIANNESS$$
  2885. */
  2886. struct fcoe_tce_tx_wr_rx_rd {
  2887. union fcoe_tx_wr_rx_rd_union_ctx union_ctx;
  2888. struct fcoe_tce_tx_wr_rx_rd_const const_ctx;
  2889. };
  2890. /*
  2891. * tce_rx_wr_tx_rd_const $$KEEP_ENDIANNESS$$
  2892. */
  2893. struct fcoe_tce_rx_wr_tx_rd_const {
  2894. __le32 data_2_trns;
  2895. __le32 init_flags;
  2896. #define FCOE_TCE_RX_WR_TX_RD_CONST_CID (0xFFFFFF<<0)
  2897. #define FCOE_TCE_RX_WR_TX_RD_CONST_CID_SHIFT 0
  2898. #define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0 (0xFF<<24)
  2899. #define FCOE_TCE_RX_WR_TX_RD_CONST_RSRV0_SHIFT 24
  2900. };
  2901. /*
  2902. * tce_rx_wr_tx_rd_var $$KEEP_ENDIANNESS$$
  2903. */
  2904. struct fcoe_tce_rx_wr_tx_rd_var {
  2905. __le16 rx_flags;
  2906. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1 (0xF<<0)
  2907. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV1_SHIFT 0
  2908. #define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE (0x7<<4)
  2909. #define FCOE_TCE_RX_WR_TX_RD_VAR_NUM_RQ_WQE_SHIFT 4
  2910. #define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ (0x1<<7)
  2911. #define FCOE_TCE_RX_WR_TX_RD_VAR_CONF_REQ_SHIFT 7
  2912. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE (0xF<<8)
  2913. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_STATE_SHIFT 8
  2914. #define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME (0x1<<12)
  2915. #define FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME_SHIFT 12
  2916. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT (0x1<<13)
  2917. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_SEQ_INIT_SHIFT 13
  2918. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2 (0x1<<14)
  2919. #define FCOE_TCE_RX_WR_TX_RD_VAR_RSRV2_SHIFT 14
  2920. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID (0x1<<15)
  2921. #define FCOE_TCE_RX_WR_TX_RD_VAR_RX_VALID_SHIFT 15
  2922. __le16 rx_id;
  2923. struct fcoe_fcp_xfr_rdy_payload fcp_xfr_rdy;
  2924. };
  2925. /*
  2926. * tce_rx_wr_tx_rd $$KEEP_ENDIANNESS$$
  2927. */
  2928. struct fcoe_tce_rx_wr_tx_rd {
  2929. struct fcoe_tce_rx_wr_tx_rd_const const_ctx;
  2930. struct fcoe_tce_rx_wr_tx_rd_var var_ctx;
  2931. };
  2932. /*
  2933. * tce_rx_only $$KEEP_ENDIANNESS$$
  2934. */
  2935. struct fcoe_tce_rx_only {
  2936. struct fcoe_rx_seq_ctx rx_seq_ctx;
  2937. union fcoe_rx_wr_union_ctx union_ctx;
  2938. };
  2939. /*
  2940. * task_ctx_entry $$KEEP_ENDIANNESS$$
  2941. */
  2942. struct fcoe_task_ctx_entry {
  2943. struct fcoe_tce_tx_only txwr_only;
  2944. struct fcoe_tce_tx_wr_rx_rd txwr_rxrd;
  2945. struct fcoe_tce_rx_wr_tx_rd rxwr_txrd;
  2946. struct fcoe_tce_rx_only rxwr_only;
  2947. };
  2948. /*
  2949. * FCoE XFRQ element $$KEEP_ENDIANNESS$$
  2950. */
  2951. struct fcoe_xfrqe {
  2952. __le16 wqe;
  2953. #define FCOE_XFRQE_TASK_ID (0x7FFF<<0)
  2954. #define FCOE_XFRQE_TASK_ID_SHIFT 0
  2955. #define FCOE_XFRQE_TOGGLE_BIT (0x1<<15)
  2956. #define FCOE_XFRQE_TOGGLE_BIT_SHIFT 15
  2957. };
  2958. /*
  2959. * Cached SGEs $$KEEP_ENDIANNESS$$
  2960. */
  2961. struct common_fcoe_sgl {
  2962. struct fcoe_bd_ctx sge[3];
  2963. };
  2964. /*
  2965. * FCoE SQ\XFRQ element
  2966. */
  2967. struct fcoe_cached_wqe {
  2968. struct fcoe_sqe sqe;
  2969. struct fcoe_xfrqe xfrqe;
  2970. };
  2971. /*
  2972. * FCoE connection enable\disable params passed by driver to FW in FCoE enable
  2973. * ramrod $$KEEP_ENDIANNESS$$
  2974. */
  2975. struct fcoe_conn_enable_disable_ramrod_params {
  2976. struct fcoe_kwqe_conn_enable_disable enable_disable_kwqe;
  2977. };
  2978. /*
  2979. * FCoE connection offload params passed by driver to FW in FCoE offload ramrod
  2980. * $$KEEP_ENDIANNESS$$
  2981. */
  2982. struct fcoe_conn_offload_ramrod_params {
  2983. struct fcoe_kwqe_conn_offload1 offload_kwqe1;
  2984. struct fcoe_kwqe_conn_offload2 offload_kwqe2;
  2985. struct fcoe_kwqe_conn_offload3 offload_kwqe3;
  2986. struct fcoe_kwqe_conn_offload4 offload_kwqe4;
  2987. };
  2988. struct ustorm_fcoe_mng_ctx {
  2989. #if defined(__BIG_ENDIAN)
  2990. u8 mid_seq_proc_flag;
  2991. u8 tce_in_cam_flag;
  2992. u8 tce_on_ior_flag;
  2993. u8 en_cached_tce_flag;
  2994. #elif defined(__LITTLE_ENDIAN)
  2995. u8 en_cached_tce_flag;
  2996. u8 tce_on_ior_flag;
  2997. u8 tce_in_cam_flag;
  2998. u8 mid_seq_proc_flag;
  2999. #endif
  3000. #if defined(__BIG_ENDIAN)
  3001. u8 tce_cam_addr;
  3002. u8 cached_conn_flag;
  3003. u16 rsrv0;
  3004. #elif defined(__LITTLE_ENDIAN)
  3005. u16 rsrv0;
  3006. u8 cached_conn_flag;
  3007. u8 tce_cam_addr;
  3008. #endif
  3009. #if defined(__BIG_ENDIAN)
  3010. u16 dma_tce_ram_addr;
  3011. u16 tce_ram_addr;
  3012. #elif defined(__LITTLE_ENDIAN)
  3013. u16 tce_ram_addr;
  3014. u16 dma_tce_ram_addr;
  3015. #endif
  3016. #if defined(__BIG_ENDIAN)
  3017. u16 ox_id;
  3018. u16 wr_done_seq;
  3019. #elif defined(__LITTLE_ENDIAN)
  3020. u16 wr_done_seq;
  3021. u16 ox_id;
  3022. #endif
  3023. struct regpair task_addr;
  3024. };
  3025. /*
  3026. * Parameters initialized during offloaded according to FLOGI/PLOGI/PRLI and
  3027. * used in FCoE context section
  3028. */
  3029. struct ustorm_fcoe_params {
  3030. #if defined(__BIG_ENDIAN)
  3031. u16 fcoe_conn_id;
  3032. u16 flags;
  3033. #define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS (0x1<<0)
  3034. #define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS_SHIFT 0
  3035. #define USTORM_FCOE_PARAMS_B_E_D_TOV_RES (0x1<<1)
  3036. #define USTORM_FCOE_PARAMS_B_E_D_TOV_RES_SHIFT 1
  3037. #define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT (0x1<<2)
  3038. #define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT_SHIFT 2
  3039. #define USTORM_FCOE_PARAMS_B_CONF_REQ (0x1<<3)
  3040. #define USTORM_FCOE_PARAMS_B_CONF_REQ_SHIFT 3
  3041. #define USTORM_FCOE_PARAMS_B_REC_VALID (0x1<<4)
  3042. #define USTORM_FCOE_PARAMS_B_REC_VALID_SHIFT 4
  3043. #define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT (0x1<<5)
  3044. #define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT_SHIFT 5
  3045. #define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT (0x1<<6)
  3046. #define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT_SHIFT 6
  3047. #define USTORM_FCOE_PARAMS_RSRV0 (0x1FF<<7)
  3048. #define USTORM_FCOE_PARAMS_RSRV0_SHIFT 7
  3049. #elif defined(__LITTLE_ENDIAN)
  3050. u16 flags;
  3051. #define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS (0x1<<0)
  3052. #define USTORM_FCOE_PARAMS_B_MUL_N_PORT_IDS_SHIFT 0
  3053. #define USTORM_FCOE_PARAMS_B_E_D_TOV_RES (0x1<<1)
  3054. #define USTORM_FCOE_PARAMS_B_E_D_TOV_RES_SHIFT 1
  3055. #define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT (0x1<<2)
  3056. #define USTORM_FCOE_PARAMS_B_CONT_INCR_SEQ_CNT_SHIFT 2
  3057. #define USTORM_FCOE_PARAMS_B_CONF_REQ (0x1<<3)
  3058. #define USTORM_FCOE_PARAMS_B_CONF_REQ_SHIFT 3
  3059. #define USTORM_FCOE_PARAMS_B_REC_VALID (0x1<<4)
  3060. #define USTORM_FCOE_PARAMS_B_REC_VALID_SHIFT 4
  3061. #define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT (0x1<<5)
  3062. #define USTORM_FCOE_PARAMS_B_CQ_TOGGLE_BIT_SHIFT 5
  3063. #define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT (0x1<<6)
  3064. #define USTORM_FCOE_PARAMS_B_XFRQ_TOGGLE_BIT_SHIFT 6
  3065. #define USTORM_FCOE_PARAMS_RSRV0 (0x1FF<<7)
  3066. #define USTORM_FCOE_PARAMS_RSRV0_SHIFT 7
  3067. u16 fcoe_conn_id;
  3068. #endif
  3069. #if defined(__BIG_ENDIAN)
  3070. u8 hc_csdm_byte_en;
  3071. u8 func_id;
  3072. u8 port_id;
  3073. u8 vnic_id;
  3074. #elif defined(__LITTLE_ENDIAN)
  3075. u8 vnic_id;
  3076. u8 port_id;
  3077. u8 func_id;
  3078. u8 hc_csdm_byte_en;
  3079. #endif
  3080. #if defined(__BIG_ENDIAN)
  3081. u16 rx_total_conc_seqs;
  3082. u16 rx_max_fc_pay_len;
  3083. #elif defined(__LITTLE_ENDIAN)
  3084. u16 rx_max_fc_pay_len;
  3085. u16 rx_total_conc_seqs;
  3086. #endif
  3087. #if defined(__BIG_ENDIAN)
  3088. u8 task_pbe_idx_off;
  3089. u8 task_in_page_log_size;
  3090. u16 rx_max_conc_seqs;
  3091. #elif defined(__LITTLE_ENDIAN)
  3092. u16 rx_max_conc_seqs;
  3093. u8 task_in_page_log_size;
  3094. u8 task_pbe_idx_off;
  3095. #endif
  3096. };
  3097. /*
  3098. * FCoE 16-bits index structure
  3099. */
  3100. struct fcoe_idx16_fields {
  3101. u16 fields;
  3102. #define FCOE_IDX16_FIELDS_IDX (0x7FFF<<0)
  3103. #define FCOE_IDX16_FIELDS_IDX_SHIFT 0
  3104. #define FCOE_IDX16_FIELDS_MSB (0x1<<15)
  3105. #define FCOE_IDX16_FIELDS_MSB_SHIFT 15
  3106. };
  3107. /*
  3108. * FCoE 16-bits index union
  3109. */
  3110. union fcoe_idx16_field_union {
  3111. struct fcoe_idx16_fields fields;
  3112. u16 val;
  3113. };
  3114. /*
  3115. * Parameters required for placement according to SGL
  3116. */
  3117. struct ustorm_fcoe_data_place_mng {
  3118. #if defined(__BIG_ENDIAN)
  3119. u16 sge_off;
  3120. u8 num_sges;
  3121. u8 sge_idx;
  3122. #elif defined(__LITTLE_ENDIAN)
  3123. u8 sge_idx;
  3124. u8 num_sges;
  3125. u16 sge_off;
  3126. #endif
  3127. };
  3128. /*
  3129. * Parameters required for placement according to SGL
  3130. */
  3131. struct ustorm_fcoe_data_place {
  3132. struct ustorm_fcoe_data_place_mng cached_mng;
  3133. struct fcoe_bd_ctx cached_sge[2];
  3134. };
  3135. /*
  3136. * TX processing shall write and RX processing shall read from this section
  3137. */
  3138. union fcoe_u_tce_tx_wr_rx_rd_union {
  3139. struct fcoe_abts_info abts;
  3140. struct fcoe_cleanup_info cleanup;
  3141. struct fcoe_fw_tx_seq_ctx tx_seq_ctx;
  3142. u32 opaque[2];
  3143. };
  3144. /*
  3145. * TX processing shall write and RX processing shall read from this section
  3146. */
  3147. struct fcoe_u_tce_tx_wr_rx_rd {
  3148. union fcoe_u_tce_tx_wr_rx_rd_union union_ctx;
  3149. struct fcoe_tce_tx_wr_rx_rd_const const_ctx;
  3150. };
  3151. struct ustorm_fcoe_tce {
  3152. struct fcoe_u_tce_tx_wr_rx_rd txwr_rxrd;
  3153. struct fcoe_tce_rx_wr_tx_rd rxwr_txrd;
  3154. struct fcoe_tce_rx_only rxwr;
  3155. };
  3156. struct ustorm_fcoe_cache_ctx {
  3157. u32 rsrv0;
  3158. struct ustorm_fcoe_data_place data_place;
  3159. struct ustorm_fcoe_tce tce;
  3160. };
  3161. /*
  3162. * Ustorm FCoE Storm Context
  3163. */
  3164. struct ustorm_fcoe_st_context {
  3165. struct ustorm_fcoe_mng_ctx mng_ctx;
  3166. struct ustorm_fcoe_params fcoe_params;
  3167. struct regpair cq_base_addr;
  3168. struct regpair rq_pbl_base;
  3169. struct regpair rq_cur_page_addr;
  3170. struct regpair confq_pbl_base_addr;
  3171. struct regpair conn_db_base;
  3172. struct regpair xfrq_base_addr;
  3173. struct regpair lcq_base_addr;
  3174. #if defined(__BIG_ENDIAN)
  3175. union fcoe_idx16_field_union rq_cons;
  3176. union fcoe_idx16_field_union rq_prod;
  3177. #elif defined(__LITTLE_ENDIAN)
  3178. union fcoe_idx16_field_union rq_prod;
  3179. union fcoe_idx16_field_union rq_cons;
  3180. #endif
  3181. #if defined(__BIG_ENDIAN)
  3182. u16 xfrq_prod;
  3183. u16 cq_cons;
  3184. #elif defined(__LITTLE_ENDIAN)
  3185. u16 cq_cons;
  3186. u16 xfrq_prod;
  3187. #endif
  3188. #if defined(__BIG_ENDIAN)
  3189. u16 lcq_cons;
  3190. u16 hc_cram_address;
  3191. #elif defined(__LITTLE_ENDIAN)
  3192. u16 hc_cram_address;
  3193. u16 lcq_cons;
  3194. #endif
  3195. #if defined(__BIG_ENDIAN)
  3196. u16 sq_xfrq_lcq_confq_size;
  3197. u16 confq_prod;
  3198. #elif defined(__LITTLE_ENDIAN)
  3199. u16 confq_prod;
  3200. u16 sq_xfrq_lcq_confq_size;
  3201. #endif
  3202. #if defined(__BIG_ENDIAN)
  3203. u8 hc_csdm_agg_int;
  3204. u8 rsrv2;
  3205. u8 available_rqes;
  3206. u8 sp_q_flush_cnt;
  3207. #elif defined(__LITTLE_ENDIAN)
  3208. u8 sp_q_flush_cnt;
  3209. u8 available_rqes;
  3210. u8 rsrv2;
  3211. u8 hc_csdm_agg_int;
  3212. #endif
  3213. #if defined(__BIG_ENDIAN)
  3214. u16 num_pend_tasks;
  3215. u16 pbf_ack_ram_addr;
  3216. #elif defined(__LITTLE_ENDIAN)
  3217. u16 pbf_ack_ram_addr;
  3218. u16 num_pend_tasks;
  3219. #endif
  3220. struct ustorm_fcoe_cache_ctx cache_ctx;
  3221. };
  3222. /*
  3223. * The FCoE non-aggregative context of Tstorm
  3224. */
  3225. struct tstorm_fcoe_st_context {
  3226. struct regpair reserved0;
  3227. struct regpair reserved1;
  3228. };
  3229. /*
  3230. * Ethernet context section
  3231. */
  3232. struct xstorm_fcoe_eth_context_section {
  3233. #if defined(__BIG_ENDIAN)
  3234. u8 remote_addr_4;
  3235. u8 remote_addr_5;
  3236. u8 local_addr_0;
  3237. u8 local_addr_1;
  3238. #elif defined(__LITTLE_ENDIAN)
  3239. u8 local_addr_1;
  3240. u8 local_addr_0;
  3241. u8 remote_addr_5;
  3242. u8 remote_addr_4;
  3243. #endif
  3244. #if defined(__BIG_ENDIAN)
  3245. u8 remote_addr_0;
  3246. u8 remote_addr_1;
  3247. u8 remote_addr_2;
  3248. u8 remote_addr_3;
  3249. #elif defined(__LITTLE_ENDIAN)
  3250. u8 remote_addr_3;
  3251. u8 remote_addr_2;
  3252. u8 remote_addr_1;
  3253. u8 remote_addr_0;
  3254. #endif
  3255. #if defined(__BIG_ENDIAN)
  3256. u16 reserved_vlan_type;
  3257. u16 params;
  3258. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
  3259. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
  3260. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI (0x1<<12)
  3261. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI_SHIFT 12
  3262. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
  3263. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
  3264. #elif defined(__LITTLE_ENDIAN)
  3265. u16 params;
  3266. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
  3267. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
  3268. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI (0x1<<12)
  3269. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_CFI_SHIFT 12
  3270. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
  3271. #define XSTORM_FCOE_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
  3272. u16 reserved_vlan_type;
  3273. #endif
  3274. #if defined(__BIG_ENDIAN)
  3275. u8 local_addr_2;
  3276. u8 local_addr_3;
  3277. u8 local_addr_4;
  3278. u8 local_addr_5;
  3279. #elif defined(__LITTLE_ENDIAN)
  3280. u8 local_addr_5;
  3281. u8 local_addr_4;
  3282. u8 local_addr_3;
  3283. u8 local_addr_2;
  3284. #endif
  3285. };
  3286. /*
  3287. * Flags used in FCoE context section - 1 byte
  3288. */
  3289. struct xstorm_fcoe_context_flags {
  3290. u8 flags;
  3291. #define XSTORM_FCOE_CONTEXT_FLAGS_B_PROC_Q (0x3<<0)
  3292. #define XSTORM_FCOE_CONTEXT_FLAGS_B_PROC_Q_SHIFT 0
  3293. #define XSTORM_FCOE_CONTEXT_FLAGS_B_MID_SEQ (0x1<<2)
  3294. #define XSTORM_FCOE_CONTEXT_FLAGS_B_MID_SEQ_SHIFT 2
  3295. #define XSTORM_FCOE_CONTEXT_FLAGS_B_BLOCK_SQ (0x1<<3)
  3296. #define XSTORM_FCOE_CONTEXT_FLAGS_B_BLOCK_SQ_SHIFT 3
  3297. #define XSTORM_FCOE_CONTEXT_FLAGS_B_REC_SUPPORT (0x1<<4)
  3298. #define XSTORM_FCOE_CONTEXT_FLAGS_B_REC_SUPPORT_SHIFT 4
  3299. #define XSTORM_FCOE_CONTEXT_FLAGS_B_SQ_TOGGLE (0x1<<5)
  3300. #define XSTORM_FCOE_CONTEXT_FLAGS_B_SQ_TOGGLE_SHIFT 5
  3301. #define XSTORM_FCOE_CONTEXT_FLAGS_B_XFRQ_TOGGLE (0x1<<6)
  3302. #define XSTORM_FCOE_CONTEXT_FLAGS_B_XFRQ_TOGGLE_SHIFT 6
  3303. #define XSTORM_FCOE_CONTEXT_FLAGS_B_VNTAG_VLAN (0x1<<7)
  3304. #define XSTORM_FCOE_CONTEXT_FLAGS_B_VNTAG_VLAN_SHIFT 7
  3305. };
  3306. struct xstorm_fcoe_tce {
  3307. struct fcoe_tce_tx_only txwr;
  3308. struct fcoe_tce_tx_wr_rx_rd txwr_rxrd;
  3309. };
  3310. /*
  3311. * FCP_DATA parameters required for transmission
  3312. */
  3313. struct xstorm_fcoe_fcp_data {
  3314. u32 io_rem;
  3315. #if defined(__BIG_ENDIAN)
  3316. u16 cached_sge_off;
  3317. u8 cached_num_sges;
  3318. u8 cached_sge_idx;
  3319. #elif defined(__LITTLE_ENDIAN)
  3320. u8 cached_sge_idx;
  3321. u8 cached_num_sges;
  3322. u16 cached_sge_off;
  3323. #endif
  3324. u32 buf_addr_hi_0;
  3325. u32 buf_addr_lo_0;
  3326. #if defined(__BIG_ENDIAN)
  3327. u16 num_of_pending_tasks;
  3328. u16 buf_len_0;
  3329. #elif defined(__LITTLE_ENDIAN)
  3330. u16 buf_len_0;
  3331. u16 num_of_pending_tasks;
  3332. #endif
  3333. u32 buf_addr_hi_1;
  3334. u32 buf_addr_lo_1;
  3335. #if defined(__BIG_ENDIAN)
  3336. u16 task_pbe_idx_off;
  3337. u16 buf_len_1;
  3338. #elif defined(__LITTLE_ENDIAN)
  3339. u16 buf_len_1;
  3340. u16 task_pbe_idx_off;
  3341. #endif
  3342. u32 buf_addr_hi_2;
  3343. u32 buf_addr_lo_2;
  3344. #if defined(__BIG_ENDIAN)
  3345. u16 ox_id;
  3346. u16 buf_len_2;
  3347. #elif defined(__LITTLE_ENDIAN)
  3348. u16 buf_len_2;
  3349. u16 ox_id;
  3350. #endif
  3351. };
  3352. /*
  3353. * vlan configuration
  3354. */
  3355. struct xstorm_fcoe_vlan_conf {
  3356. u8 vlan_conf;
  3357. #define XSTORM_FCOE_VLAN_CONF_PRIORITY (0x7<<0)
  3358. #define XSTORM_FCOE_VLAN_CONF_PRIORITY_SHIFT 0
  3359. #define XSTORM_FCOE_VLAN_CONF_INNER_VLAN_FLAG (0x1<<3)
  3360. #define XSTORM_FCOE_VLAN_CONF_INNER_VLAN_FLAG_SHIFT 3
  3361. #define XSTORM_FCOE_VLAN_CONF_RESERVED (0xF<<4)
  3362. #define XSTORM_FCOE_VLAN_CONF_RESERVED_SHIFT 4
  3363. };
  3364. /*
  3365. * FCoE 16-bits vlan structure
  3366. */
  3367. struct fcoe_vlan_fields {
  3368. u16 fields;
  3369. #define FCOE_VLAN_FIELDS_VID (0xFFF<<0)
  3370. #define FCOE_VLAN_FIELDS_VID_SHIFT 0
  3371. #define FCOE_VLAN_FIELDS_CLI (0x1<<12)
  3372. #define FCOE_VLAN_FIELDS_CLI_SHIFT 12
  3373. #define FCOE_VLAN_FIELDS_PRI (0x7<<13)
  3374. #define FCOE_VLAN_FIELDS_PRI_SHIFT 13
  3375. };
  3376. /*
  3377. * FCoE 16-bits vlan union
  3378. */
  3379. union fcoe_vlan_field_union {
  3380. struct fcoe_vlan_fields fields;
  3381. u16 val;
  3382. };
  3383. /*
  3384. * FCoE 16-bits vlan, vif union
  3385. */
  3386. union fcoe_vlan_vif_field_union {
  3387. union fcoe_vlan_field_union vlan;
  3388. u16 vif;
  3389. };
  3390. /*
  3391. * FCoE context section
  3392. */
  3393. struct xstorm_fcoe_context_section {
  3394. #if defined(__BIG_ENDIAN)
  3395. u8 cs_ctl;
  3396. u8 s_id[3];
  3397. #elif defined(__LITTLE_ENDIAN)
  3398. u8 s_id[3];
  3399. u8 cs_ctl;
  3400. #endif
  3401. #if defined(__BIG_ENDIAN)
  3402. u8 rctl;
  3403. u8 d_id[3];
  3404. #elif defined(__LITTLE_ENDIAN)
  3405. u8 d_id[3];
  3406. u8 rctl;
  3407. #endif
  3408. #if defined(__BIG_ENDIAN)
  3409. u16 sq_xfrq_lcq_confq_size;
  3410. u16 tx_max_fc_pay_len;
  3411. #elif defined(__LITTLE_ENDIAN)
  3412. u16 tx_max_fc_pay_len;
  3413. u16 sq_xfrq_lcq_confq_size;
  3414. #endif
  3415. u32 lcq_prod;
  3416. #if defined(__BIG_ENDIAN)
  3417. u8 port_id;
  3418. u8 func_id;
  3419. u8 seq_id;
  3420. struct xstorm_fcoe_context_flags tx_flags;
  3421. #elif defined(__LITTLE_ENDIAN)
  3422. struct xstorm_fcoe_context_flags tx_flags;
  3423. u8 seq_id;
  3424. u8 func_id;
  3425. u8 port_id;
  3426. #endif
  3427. #if defined(__BIG_ENDIAN)
  3428. u16 mtu;
  3429. u8 func_mode;
  3430. u8 vnic_id;
  3431. #elif defined(__LITTLE_ENDIAN)
  3432. u8 vnic_id;
  3433. u8 func_mode;
  3434. u16 mtu;
  3435. #endif
  3436. struct regpair confq_curr_page_addr;
  3437. struct fcoe_cached_wqe cached_wqe[8];
  3438. struct regpair lcq_base_addr;
  3439. struct xstorm_fcoe_tce tce;
  3440. struct xstorm_fcoe_fcp_data fcp_data;
  3441. #if defined(__BIG_ENDIAN)
  3442. u8 tx_max_conc_seqs_c3;
  3443. u8 vlan_flag;
  3444. u8 dcb_val;
  3445. u8 data_pb_cmd_size;
  3446. #elif defined(__LITTLE_ENDIAN)
  3447. u8 data_pb_cmd_size;
  3448. u8 dcb_val;
  3449. u8 vlan_flag;
  3450. u8 tx_max_conc_seqs_c3;
  3451. #endif
  3452. #if defined(__BIG_ENDIAN)
  3453. u16 fcoe_tx_stat_params_ram_addr;
  3454. u16 fcoe_tx_fc_seq_ram_addr;
  3455. #elif defined(__LITTLE_ENDIAN)
  3456. u16 fcoe_tx_fc_seq_ram_addr;
  3457. u16 fcoe_tx_stat_params_ram_addr;
  3458. #endif
  3459. #if defined(__BIG_ENDIAN)
  3460. u8 fcp_cmd_line_credit;
  3461. u8 eth_hdr_size;
  3462. u16 pbf_addr;
  3463. #elif defined(__LITTLE_ENDIAN)
  3464. u16 pbf_addr;
  3465. u8 eth_hdr_size;
  3466. u8 fcp_cmd_line_credit;
  3467. #endif
  3468. #if defined(__BIG_ENDIAN)
  3469. union fcoe_vlan_vif_field_union multi_func_val;
  3470. u8 page_log_size;
  3471. struct xstorm_fcoe_vlan_conf orig_vlan_conf;
  3472. #elif defined(__LITTLE_ENDIAN)
  3473. struct xstorm_fcoe_vlan_conf orig_vlan_conf;
  3474. u8 page_log_size;
  3475. union fcoe_vlan_vif_field_union multi_func_val;
  3476. #endif
  3477. #if defined(__BIG_ENDIAN)
  3478. u16 fcp_cmd_frame_size;
  3479. u16 pbf_addr_ff;
  3480. #elif defined(__LITTLE_ENDIAN)
  3481. u16 pbf_addr_ff;
  3482. u16 fcp_cmd_frame_size;
  3483. #endif
  3484. #if defined(__BIG_ENDIAN)
  3485. u8 vlan_num;
  3486. u8 cos;
  3487. u8 cache_xfrq_cons;
  3488. u8 cache_sq_cons;
  3489. #elif defined(__LITTLE_ENDIAN)
  3490. u8 cache_sq_cons;
  3491. u8 cache_xfrq_cons;
  3492. u8 cos;
  3493. u8 vlan_num;
  3494. #endif
  3495. u32 verify_tx_seq;
  3496. };
  3497. /*
  3498. * Xstorm FCoE Storm Context
  3499. */
  3500. struct xstorm_fcoe_st_context {
  3501. struct xstorm_fcoe_eth_context_section eth;
  3502. struct xstorm_fcoe_context_section fcoe;
  3503. };
  3504. /*
  3505. * Fcoe connection context
  3506. */
  3507. struct fcoe_context {
  3508. struct ustorm_fcoe_st_context ustorm_st_context;
  3509. struct tstorm_fcoe_st_context tstorm_st_context;
  3510. struct xstorm_fcoe_ag_context xstorm_ag_context;
  3511. struct tstorm_fcoe_ag_context tstorm_ag_context;
  3512. struct ustorm_fcoe_ag_context ustorm_ag_context;
  3513. struct timers_block_context timers_context;
  3514. struct xstorm_fcoe_st_context xstorm_st_context;
  3515. };
  3516. /*
  3517. * FCoE init params passed by driver to FW in FCoE init ramrod
  3518. * $$KEEP_ENDIANNESS$$
  3519. */
  3520. struct fcoe_init_ramrod_params {
  3521. struct fcoe_kwqe_init1 init_kwqe1;
  3522. struct fcoe_kwqe_init2 init_kwqe2;
  3523. struct fcoe_kwqe_init3 init_kwqe3;
  3524. struct regpair eq_pbl_base;
  3525. __le32 eq_pbl_size;
  3526. __le32 reserved2;
  3527. __le16 eq_prod;
  3528. __le16 sb_num;
  3529. u8 sb_id;
  3530. u8 reserved0;
  3531. __le16 reserved1;
  3532. };
  3533. /*
  3534. * FCoE statistics params buffer passed by driver to FW in FCoE statistics
  3535. * ramrod $$KEEP_ENDIANNESS$$
  3536. */
  3537. struct fcoe_stat_ramrod_params {
  3538. struct fcoe_kwqe_stat stat_kwqe;
  3539. };
  3540. /*
  3541. * CQ DB CQ producer and pending completion counter
  3542. */
  3543. struct iscsi_cq_db_prod_pnd_cmpltn_cnt {
  3544. #if defined(__BIG_ENDIAN)
  3545. u16 cntr;
  3546. u16 prod;
  3547. #elif defined(__LITTLE_ENDIAN)
  3548. u16 prod;
  3549. u16 cntr;
  3550. #endif
  3551. };
  3552. /*
  3553. * CQ DB pending completion ITT array
  3554. */
  3555. struct iscsi_cq_db_prod_pnd_cmpltn_cnt_arr {
  3556. struct iscsi_cq_db_prod_pnd_cmpltn_cnt prod_pend_comp[8];
  3557. };
  3558. /*
  3559. * Cstorm CQ sequence to notify array, updated by driver
  3560. */
  3561. struct iscsi_cq_db_sqn_2_notify_arr {
  3562. u16 sqn[8];
  3563. };
  3564. /*
  3565. * Cstorm iSCSI Storm Context
  3566. */
  3567. struct cstorm_iscsi_st_context {
  3568. struct iscsi_cq_db_prod_pnd_cmpltn_cnt_arr cq_c_prod_pend_comp_ctr_arr;
  3569. struct iscsi_cq_db_sqn_2_notify_arr cq_c_prod_sqn_arr;
  3570. struct iscsi_cq_db_sqn_2_notify_arr cq_c_sqn_2_notify_arr;
  3571. struct regpair hq_pbl_base;
  3572. struct regpair hq_curr_pbe;
  3573. struct regpair task_pbl_base;
  3574. struct regpair cq_db_base;
  3575. #if defined(__BIG_ENDIAN)
  3576. u16 hq_bd_itt;
  3577. u16 iscsi_conn_id;
  3578. #elif defined(__LITTLE_ENDIAN)
  3579. u16 iscsi_conn_id;
  3580. u16 hq_bd_itt;
  3581. #endif
  3582. u32 hq_bd_data_segment_len;
  3583. u32 hq_bd_buffer_offset;
  3584. #if defined(__BIG_ENDIAN)
  3585. u8 rsrv;
  3586. u8 cq_proc_en_bit_map;
  3587. u8 cq_pend_comp_itt_valid_bit_map;
  3588. u8 hq_bd_opcode;
  3589. #elif defined(__LITTLE_ENDIAN)
  3590. u8 hq_bd_opcode;
  3591. u8 cq_pend_comp_itt_valid_bit_map;
  3592. u8 cq_proc_en_bit_map;
  3593. u8 rsrv;
  3594. #endif
  3595. u32 hq_tcp_seq;
  3596. #if defined(__BIG_ENDIAN)
  3597. u16 flags;
  3598. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN (0x1<<0)
  3599. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN_SHIFT 0
  3600. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN (0x1<<1)
  3601. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN_SHIFT 1
  3602. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID (0x1<<2)
  3603. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID_SHIFT 2
  3604. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG (0x1<<3)
  3605. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG_SHIFT 3
  3606. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK (0x1<<4)
  3607. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK_SHIFT 4
  3608. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV (0x7FF<<5)
  3609. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV_SHIFT 5
  3610. u16 hq_cons;
  3611. #elif defined(__LITTLE_ENDIAN)
  3612. u16 hq_cons;
  3613. u16 flags;
  3614. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN (0x1<<0)
  3615. #define CSTORM_ISCSI_ST_CONTEXT_DATA_DIGEST_EN_SHIFT 0
  3616. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN (0x1<<1)
  3617. #define CSTORM_ISCSI_ST_CONTEXT_HDR_DIGEST_EN_SHIFT 1
  3618. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID (0x1<<2)
  3619. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_CTXT_VALID_SHIFT 2
  3620. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG (0x1<<3)
  3621. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_LCL_CMPLN_FLG_SHIFT 3
  3622. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK (0x1<<4)
  3623. #define CSTORM_ISCSI_ST_CONTEXT_HQ_BD_WRITE_TASK_SHIFT 4
  3624. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV (0x7FF<<5)
  3625. #define CSTORM_ISCSI_ST_CONTEXT_CTRL_FLAGS_RSRV_SHIFT 5
  3626. #endif
  3627. struct regpair rsrv1;
  3628. };
  3629. /*
  3630. * SCSI read/write SQ WQE
  3631. */
  3632. struct iscsi_cmd_pdu_hdr_little_endian {
  3633. #if defined(__BIG_ENDIAN)
  3634. u8 opcode;
  3635. u8 op_attr;
  3636. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES (0x7<<0)
  3637. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES_SHIFT 0
  3638. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x3<<3)
  3639. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 3
  3640. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG (0x1<<5)
  3641. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG_SHIFT 5
  3642. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG (0x1<<6)
  3643. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG_SHIFT 6
  3644. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
  3645. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
  3646. u16 rsrv0;
  3647. #elif defined(__LITTLE_ENDIAN)
  3648. u16 rsrv0;
  3649. u8 op_attr;
  3650. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES (0x7<<0)
  3651. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_ATTRIBUTES_SHIFT 0
  3652. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x3<<3)
  3653. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 3
  3654. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG (0x1<<5)
  3655. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_WRITE_FLAG_SHIFT 5
  3656. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG (0x1<<6)
  3657. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_READ_FLAG_SHIFT 6
  3658. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
  3659. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
  3660. u8 opcode;
  3661. #endif
  3662. u32 data_fields;
  3663. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
  3664. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
  3665. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
  3666. #define ISCSI_CMD_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
  3667. struct regpair lun;
  3668. u32 itt;
  3669. u32 expected_data_transfer_length;
  3670. u32 cmd_sn;
  3671. u32 exp_stat_sn;
  3672. u32 scsi_command_block[4];
  3673. };
  3674. /*
  3675. * Buffer per connection, used in Tstorm
  3676. */
  3677. struct iscsi_conn_buf {
  3678. struct regpair reserved[8];
  3679. };
  3680. /*
  3681. * iSCSI context region, used only in iSCSI
  3682. */
  3683. struct ustorm_iscsi_rq_db {
  3684. struct regpair pbl_base;
  3685. struct regpair curr_pbe;
  3686. };
  3687. /*
  3688. * iSCSI context region, used only in iSCSI
  3689. */
  3690. struct ustorm_iscsi_r2tq_db {
  3691. struct regpair pbl_base;
  3692. struct regpair curr_pbe;
  3693. };
  3694. /*
  3695. * iSCSI context region, used only in iSCSI
  3696. */
  3697. struct ustorm_iscsi_cq_db {
  3698. #if defined(__BIG_ENDIAN)
  3699. u16 cq_sn;
  3700. u16 prod;
  3701. #elif defined(__LITTLE_ENDIAN)
  3702. u16 prod;
  3703. u16 cq_sn;
  3704. #endif
  3705. struct regpair curr_pbe;
  3706. };
  3707. /*
  3708. * iSCSI context region, used only in iSCSI
  3709. */
  3710. struct rings_db {
  3711. struct ustorm_iscsi_rq_db rq;
  3712. struct ustorm_iscsi_r2tq_db r2tq;
  3713. struct ustorm_iscsi_cq_db cq[8];
  3714. #if defined(__BIG_ENDIAN)
  3715. u16 rq_prod;
  3716. u16 r2tq_prod;
  3717. #elif defined(__LITTLE_ENDIAN)
  3718. u16 r2tq_prod;
  3719. u16 rq_prod;
  3720. #endif
  3721. struct regpair cq_pbl_base;
  3722. };
  3723. /*
  3724. * iSCSI context region, used only in iSCSI
  3725. */
  3726. struct ustorm_iscsi_placement_db {
  3727. u32 sgl_base_lo;
  3728. u32 sgl_base_hi;
  3729. u32 local_sge_0_address_hi;
  3730. u32 local_sge_0_address_lo;
  3731. #if defined(__BIG_ENDIAN)
  3732. u16 curr_sge_offset;
  3733. u16 local_sge_0_size;
  3734. #elif defined(__LITTLE_ENDIAN)
  3735. u16 local_sge_0_size;
  3736. u16 curr_sge_offset;
  3737. #endif
  3738. u32 local_sge_1_address_hi;
  3739. u32 local_sge_1_address_lo;
  3740. #if defined(__BIG_ENDIAN)
  3741. u8 exp_padding_2b;
  3742. u8 nal_len_3b;
  3743. u16 local_sge_1_size;
  3744. #elif defined(__LITTLE_ENDIAN)
  3745. u16 local_sge_1_size;
  3746. u8 nal_len_3b;
  3747. u8 exp_padding_2b;
  3748. #endif
  3749. #if defined(__BIG_ENDIAN)
  3750. u8 sgl_size;
  3751. u8 local_sge_index_2b;
  3752. u16 reserved7;
  3753. #elif defined(__LITTLE_ENDIAN)
  3754. u16 reserved7;
  3755. u8 local_sge_index_2b;
  3756. u8 sgl_size;
  3757. #endif
  3758. u32 rem_pdu;
  3759. u32 place_db_bitfield_1;
  3760. #define USTORM_ISCSI_PLACEMENT_DB_REM_PDU_PAYLOAD (0xFFFFFF<<0)
  3761. #define USTORM_ISCSI_PLACEMENT_DB_REM_PDU_PAYLOAD_SHIFT 0
  3762. #define USTORM_ISCSI_PLACEMENT_DB_CQ_ID (0xFF<<24)
  3763. #define USTORM_ISCSI_PLACEMENT_DB_CQ_ID_SHIFT 24
  3764. u32 place_db_bitfield_2;
  3765. #define USTORM_ISCSI_PLACEMENT_DB_BYTES_2_TRUNCATE (0xFFFFFF<<0)
  3766. #define USTORM_ISCSI_PLACEMENT_DB_BYTES_2_TRUNCATE_SHIFT 0
  3767. #define USTORM_ISCSI_PLACEMENT_DB_HOST_SGE_INDEX (0xFF<<24)
  3768. #define USTORM_ISCSI_PLACEMENT_DB_HOST_SGE_INDEX_SHIFT 24
  3769. u32 nal;
  3770. #define USTORM_ISCSI_PLACEMENT_DB_REM_SGE_SIZE (0xFFFFFF<<0)
  3771. #define USTORM_ISCSI_PLACEMENT_DB_REM_SGE_SIZE_SHIFT 0
  3772. #define USTORM_ISCSI_PLACEMENT_DB_EXP_DIGEST_3B (0xFF<<24)
  3773. #define USTORM_ISCSI_PLACEMENT_DB_EXP_DIGEST_3B_SHIFT 24
  3774. };
  3775. /*
  3776. * Ustorm iSCSI Storm Context
  3777. */
  3778. struct ustorm_iscsi_st_context {
  3779. u32 exp_stat_sn;
  3780. u32 exp_data_sn;
  3781. struct rings_db ring;
  3782. struct regpair task_pbl_base;
  3783. struct regpair tce_phy_addr;
  3784. struct ustorm_iscsi_placement_db place_db;
  3785. u32 reserved8;
  3786. u32 rem_rcv_len;
  3787. #if defined(__BIG_ENDIAN)
  3788. u16 hdr_itt;
  3789. u16 iscsi_conn_id;
  3790. #elif defined(__LITTLE_ENDIAN)
  3791. u16 iscsi_conn_id;
  3792. u16 hdr_itt;
  3793. #endif
  3794. u32 nal_bytes;
  3795. #if defined(__BIG_ENDIAN)
  3796. u8 hdr_second_byte_union;
  3797. u8 bitfield_0;
  3798. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU (0x1<<0)
  3799. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU_SHIFT 0
  3800. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE (0x1<<1)
  3801. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE_SHIFT 1
  3802. #define USTORM_ISCSI_ST_CONTEXT_BRESETCRC (0x1<<2)
  3803. #define USTORM_ISCSI_ST_CONTEXT_BRESETCRC_SHIFT 2
  3804. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1 (0x1F<<3)
  3805. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1_SHIFT 3
  3806. u8 task_pdu_cache_index;
  3807. u8 task_pbe_cache_index;
  3808. #elif defined(__LITTLE_ENDIAN)
  3809. u8 task_pbe_cache_index;
  3810. u8 task_pdu_cache_index;
  3811. u8 bitfield_0;
  3812. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU (0x1<<0)
  3813. #define USTORM_ISCSI_ST_CONTEXT_BMIDDLEOFPDU_SHIFT 0
  3814. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE (0x1<<1)
  3815. #define USTORM_ISCSI_ST_CONTEXT_BFENCECQE_SHIFT 1
  3816. #define USTORM_ISCSI_ST_CONTEXT_BRESETCRC (0x1<<2)
  3817. #define USTORM_ISCSI_ST_CONTEXT_BRESETCRC_SHIFT 2
  3818. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1 (0x1F<<3)
  3819. #define USTORM_ISCSI_ST_CONTEXT_RESERVED1_SHIFT 3
  3820. u8 hdr_second_byte_union;
  3821. #endif
  3822. #if defined(__BIG_ENDIAN)
  3823. u16 reserved3;
  3824. u8 reserved2;
  3825. u8 acDecrement;
  3826. #elif defined(__LITTLE_ENDIAN)
  3827. u8 acDecrement;
  3828. u8 reserved2;
  3829. u16 reserved3;
  3830. #endif
  3831. u32 task_stat;
  3832. #if defined(__BIG_ENDIAN)
  3833. u8 hdr_opcode;
  3834. u8 num_cqs;
  3835. u16 reserved5;
  3836. #elif defined(__LITTLE_ENDIAN)
  3837. u16 reserved5;
  3838. u8 num_cqs;
  3839. u8 hdr_opcode;
  3840. #endif
  3841. u32 negotiated_rx;
  3842. #define USTORM_ISCSI_ST_CONTEXT_MAX_RECV_PDU_LENGTH (0xFFFFFF<<0)
  3843. #define USTORM_ISCSI_ST_CONTEXT_MAX_RECV_PDU_LENGTH_SHIFT 0
  3844. #define USTORM_ISCSI_ST_CONTEXT_MAX_OUTSTANDING_R2TS (0xFF<<24)
  3845. #define USTORM_ISCSI_ST_CONTEXT_MAX_OUTSTANDING_R2TS_SHIFT 24
  3846. u32 negotiated_rx_and_flags;
  3847. #define USTORM_ISCSI_ST_CONTEXT_MAX_BURST_LENGTH (0xFFFFFF<<0)
  3848. #define USTORM_ISCSI_ST_CONTEXT_MAX_BURST_LENGTH_SHIFT 0
  3849. #define USTORM_ISCSI_ST_CONTEXT_B_CQE_POSTED_OR_HEADER_CACHED (0x1<<24)
  3850. #define USTORM_ISCSI_ST_CONTEXT_B_CQE_POSTED_OR_HEADER_CACHED_SHIFT 24
  3851. #define USTORM_ISCSI_ST_CONTEXT_B_HDR_DIGEST_EN (0x1<<25)
  3852. #define USTORM_ISCSI_ST_CONTEXT_B_HDR_DIGEST_EN_SHIFT 25
  3853. #define USTORM_ISCSI_ST_CONTEXT_B_DATA_DIGEST_EN (0x1<<26)
  3854. #define USTORM_ISCSI_ST_CONTEXT_B_DATA_DIGEST_EN_SHIFT 26
  3855. #define USTORM_ISCSI_ST_CONTEXT_B_PROTOCOL_ERROR (0x1<<27)
  3856. #define USTORM_ISCSI_ST_CONTEXT_B_PROTOCOL_ERROR_SHIFT 27
  3857. #define USTORM_ISCSI_ST_CONTEXT_B_TASK_VALID (0x1<<28)
  3858. #define USTORM_ISCSI_ST_CONTEXT_B_TASK_VALID_SHIFT 28
  3859. #define USTORM_ISCSI_ST_CONTEXT_TASK_TYPE (0x3<<29)
  3860. #define USTORM_ISCSI_ST_CONTEXT_TASK_TYPE_SHIFT 29
  3861. #define USTORM_ISCSI_ST_CONTEXT_B_ALL_DATA_ACKED (0x1<<31)
  3862. #define USTORM_ISCSI_ST_CONTEXT_B_ALL_DATA_ACKED_SHIFT 31
  3863. };
  3864. /*
  3865. * TCP context region, shared in TOE, RDMA and ISCSI
  3866. */
  3867. struct tstorm_tcp_st_context_section {
  3868. u32 flags1;
  3869. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_SRTT (0xFFFFFF<<0)
  3870. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_SRTT_SHIFT 0
  3871. #define TSTORM_TCP_ST_CONTEXT_SECTION_PAWS_INVALID (0x1<<24)
  3872. #define TSTORM_TCP_ST_CONTEXT_SECTION_PAWS_INVALID_SHIFT 24
  3873. #define TSTORM_TCP_ST_CONTEXT_SECTION_TIMESTAMP_EXISTS (0x1<<25)
  3874. #define TSTORM_TCP_ST_CONTEXT_SECTION_TIMESTAMP_EXISTS_SHIFT 25
  3875. #define TSTORM_TCP_ST_CONTEXT_SECTION_RESERVED0 (0x1<<26)
  3876. #define TSTORM_TCP_ST_CONTEXT_SECTION_RESERVED0_SHIFT 26
  3877. #define TSTORM_TCP_ST_CONTEXT_SECTION_STOP_RX_PAYLOAD (0x1<<27)
  3878. #define TSTORM_TCP_ST_CONTEXT_SECTION_STOP_RX_PAYLOAD_SHIFT 27
  3879. #define TSTORM_TCP_ST_CONTEXT_SECTION_KA_ENABLED (0x1<<28)
  3880. #define TSTORM_TCP_ST_CONTEXT_SECTION_KA_ENABLED_SHIFT 28
  3881. #define TSTORM_TCP_ST_CONTEXT_SECTION_FIRST_RTO_ESTIMATE (0x1<<29)
  3882. #define TSTORM_TCP_ST_CONTEXT_SECTION_FIRST_RTO_ESTIMATE_SHIFT 29
  3883. #define TSTORM_TCP_ST_CONTEXT_SECTION_MAX_SEG_RETRANSMIT_EN (0x1<<30)
  3884. #define TSTORM_TCP_ST_CONTEXT_SECTION_MAX_SEG_RETRANSMIT_EN_SHIFT 30
  3885. #define TSTORM_TCP_ST_CONTEXT_SECTION_LAST_ISLE_HAS_FIN (0x1<<31)
  3886. #define TSTORM_TCP_ST_CONTEXT_SECTION_LAST_ISLE_HAS_FIN_SHIFT 31
  3887. u32 flags2;
  3888. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_VARIATION (0xFFFFFF<<0)
  3889. #define TSTORM_TCP_ST_CONTEXT_SECTION_RTT_VARIATION_SHIFT 0
  3890. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_EN (0x1<<24)
  3891. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_EN_SHIFT 24
  3892. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_COUNTER_EN (0x1<<25)
  3893. #define TSTORM_TCP_ST_CONTEXT_SECTION_DA_COUNTER_EN_SHIFT 25
  3894. #define __TSTORM_TCP_ST_CONTEXT_SECTION_KA_PROBE_SENT (0x1<<26)
  3895. #define __TSTORM_TCP_ST_CONTEXT_SECTION_KA_PROBE_SENT_SHIFT 26
  3896. #define __TSTORM_TCP_ST_CONTEXT_SECTION_PERSIST_PROBE_SENT (0x1<<27)
  3897. #define __TSTORM_TCP_ST_CONTEXT_SECTION_PERSIST_PROBE_SENT_SHIFT 27
  3898. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<28)
  3899. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 28
  3900. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<29)
  3901. #define TSTORM_TCP_ST_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 29
  3902. #define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_RST_ATTACK (0x1<<30)
  3903. #define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_RST_ATTACK_SHIFT 30
  3904. #define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_SYN_ATTACK (0x1<<31)
  3905. #define __TSTORM_TCP_ST_CONTEXT_SECTION_IN_WINDOW_SYN_ATTACK_SHIFT 31
  3906. #if defined(__BIG_ENDIAN)
  3907. u16 mss;
  3908. u8 tcp_sm_state;
  3909. u8 rto_exp;
  3910. #elif defined(__LITTLE_ENDIAN)
  3911. u8 rto_exp;
  3912. u8 tcp_sm_state;
  3913. u16 mss;
  3914. #endif
  3915. u32 rcv_nxt;
  3916. u32 timestamp_recent;
  3917. u32 timestamp_recent_time;
  3918. u32 cwnd;
  3919. u32 ss_thresh;
  3920. u32 cwnd_accum;
  3921. u32 prev_seg_seq;
  3922. u32 expected_rel_seq;
  3923. u32 recover;
  3924. #if defined(__BIG_ENDIAN)
  3925. u8 retransmit_count;
  3926. u8 ka_max_probe_count;
  3927. u8 persist_probe_count;
  3928. u8 ka_probe_count;
  3929. #elif defined(__LITTLE_ENDIAN)
  3930. u8 ka_probe_count;
  3931. u8 persist_probe_count;
  3932. u8 ka_max_probe_count;
  3933. u8 retransmit_count;
  3934. #endif
  3935. #if defined(__BIG_ENDIAN)
  3936. u8 statistics_counter_id;
  3937. u8 ooo_support_mode;
  3938. u8 snd_wnd_scale;
  3939. u8 dup_ack_count;
  3940. #elif defined(__LITTLE_ENDIAN)
  3941. u8 dup_ack_count;
  3942. u8 snd_wnd_scale;
  3943. u8 ooo_support_mode;
  3944. u8 statistics_counter_id;
  3945. #endif
  3946. u32 retransmit_start_time;
  3947. u32 ka_timeout;
  3948. u32 ka_interval;
  3949. u32 isle_start_seq;
  3950. u32 isle_end_seq;
  3951. #if defined(__BIG_ENDIAN)
  3952. u16 second_isle_address;
  3953. u16 recent_seg_wnd;
  3954. #elif defined(__LITTLE_ENDIAN)
  3955. u16 recent_seg_wnd;
  3956. u16 second_isle_address;
  3957. #endif
  3958. #if defined(__BIG_ENDIAN)
  3959. u8 max_isles_ever_happened;
  3960. u8 isles_number;
  3961. u16 last_isle_address;
  3962. #elif defined(__LITTLE_ENDIAN)
  3963. u16 last_isle_address;
  3964. u8 isles_number;
  3965. u8 max_isles_ever_happened;
  3966. #endif
  3967. u32 max_rt_time;
  3968. #if defined(__BIG_ENDIAN)
  3969. u16 lsb_mac_address;
  3970. u16 vlan_id;
  3971. #elif defined(__LITTLE_ENDIAN)
  3972. u16 vlan_id;
  3973. u16 lsb_mac_address;
  3974. #endif
  3975. #if defined(__BIG_ENDIAN)
  3976. u16 msb_mac_address;
  3977. u16 mid_mac_address;
  3978. #elif defined(__LITTLE_ENDIAN)
  3979. u16 mid_mac_address;
  3980. u16 msb_mac_address;
  3981. #endif
  3982. u32 rightmost_received_seq;
  3983. };
  3984. /*
  3985. * Termination variables
  3986. */
  3987. struct iscsi_term_vars {
  3988. u8 BitMap;
  3989. #define ISCSI_TERM_VARS_TCP_STATE (0xF<<0)
  3990. #define ISCSI_TERM_VARS_TCP_STATE_SHIFT 0
  3991. #define ISCSI_TERM_VARS_FIN_RECEIVED_SBIT (0x1<<4)
  3992. #define ISCSI_TERM_VARS_FIN_RECEIVED_SBIT_SHIFT 4
  3993. #define ISCSI_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT (0x1<<5)
  3994. #define ISCSI_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT_SHIFT 5
  3995. #define ISCSI_TERM_VARS_TERM_ON_CHIP (0x1<<6)
  3996. #define ISCSI_TERM_VARS_TERM_ON_CHIP_SHIFT 6
  3997. #define ISCSI_TERM_VARS_RSRV (0x1<<7)
  3998. #define ISCSI_TERM_VARS_RSRV_SHIFT 7
  3999. };
  4000. /*
  4001. * iSCSI context region, used only in iSCSI
  4002. */
  4003. struct tstorm_iscsi_st_context_section {
  4004. u32 nalPayload;
  4005. u32 b2nh;
  4006. #if defined(__BIG_ENDIAN)
  4007. u16 rq_cons;
  4008. u8 flags;
  4009. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN (0x1<<0)
  4010. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN_SHIFT 0
  4011. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN (0x1<<1)
  4012. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN_SHIFT 1
  4013. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER (0x1<<2)
  4014. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER_SHIFT 2
  4015. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE (0x1<<3)
  4016. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE_SHIFT 3
  4017. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS (0x1<<4)
  4018. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS_SHIFT 4
  4019. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN (0x3<<5)
  4020. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN_SHIFT 5
  4021. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0 (0x1<<7)
  4022. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0_SHIFT 7
  4023. u8 hdr_bytes_2_fetch;
  4024. #elif defined(__LITTLE_ENDIAN)
  4025. u8 hdr_bytes_2_fetch;
  4026. u8 flags;
  4027. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN (0x1<<0)
  4028. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_HDR_DIGEST_EN_SHIFT 0
  4029. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN (0x1<<1)
  4030. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DATA_DIGEST_EN_SHIFT 1
  4031. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER (0x1<<2)
  4032. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_PARTIAL_HEADER_SHIFT 2
  4033. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE (0x1<<3)
  4034. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_FULL_FEATURE_SHIFT 3
  4035. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS (0x1<<4)
  4036. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_B_DROP_ALL_PDUS_SHIFT 4
  4037. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN (0x3<<5)
  4038. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_NALLEN_SHIFT 5
  4039. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0 (0x1<<7)
  4040. #define TSTORM_ISCSI_ST_CONTEXT_SECTION_RSRV0_SHIFT 7
  4041. u16 rq_cons;
  4042. #endif
  4043. struct regpair rq_db_phy_addr;
  4044. #if defined(__BIG_ENDIAN)
  4045. struct iscsi_term_vars term_vars;
  4046. u8 rsrv1;
  4047. u16 iscsi_conn_id;
  4048. #elif defined(__LITTLE_ENDIAN)
  4049. u16 iscsi_conn_id;
  4050. u8 rsrv1;
  4051. struct iscsi_term_vars term_vars;
  4052. #endif
  4053. u32 process_nxt;
  4054. };
  4055. /*
  4056. * The iSCSI non-aggregative context of Tstorm
  4057. */
  4058. struct tstorm_iscsi_st_context {
  4059. struct tstorm_tcp_st_context_section tcp;
  4060. struct tstorm_iscsi_st_context_section iscsi;
  4061. };
  4062. /*
  4063. * Ethernet context section, shared in TOE, RDMA and ISCSI
  4064. */
  4065. struct xstorm_eth_context_section {
  4066. #if defined(__BIG_ENDIAN)
  4067. u8 remote_addr_4;
  4068. u8 remote_addr_5;
  4069. u8 local_addr_0;
  4070. u8 local_addr_1;
  4071. #elif defined(__LITTLE_ENDIAN)
  4072. u8 local_addr_1;
  4073. u8 local_addr_0;
  4074. u8 remote_addr_5;
  4075. u8 remote_addr_4;
  4076. #endif
  4077. #if defined(__BIG_ENDIAN)
  4078. u8 remote_addr_0;
  4079. u8 remote_addr_1;
  4080. u8 remote_addr_2;
  4081. u8 remote_addr_3;
  4082. #elif defined(__LITTLE_ENDIAN)
  4083. u8 remote_addr_3;
  4084. u8 remote_addr_2;
  4085. u8 remote_addr_1;
  4086. u8 remote_addr_0;
  4087. #endif
  4088. #if defined(__BIG_ENDIAN)
  4089. u16 reserved_vlan_type;
  4090. u16 vlan_params;
  4091. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
  4092. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
  4093. #define XSTORM_ETH_CONTEXT_SECTION_CFI (0x1<<12)
  4094. #define XSTORM_ETH_CONTEXT_SECTION_CFI_SHIFT 12
  4095. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
  4096. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
  4097. #elif defined(__LITTLE_ENDIAN)
  4098. u16 vlan_params;
  4099. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID (0xFFF<<0)
  4100. #define XSTORM_ETH_CONTEXT_SECTION_VLAN_ID_SHIFT 0
  4101. #define XSTORM_ETH_CONTEXT_SECTION_CFI (0x1<<12)
  4102. #define XSTORM_ETH_CONTEXT_SECTION_CFI_SHIFT 12
  4103. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY (0x7<<13)
  4104. #define XSTORM_ETH_CONTEXT_SECTION_PRIORITY_SHIFT 13
  4105. u16 reserved_vlan_type;
  4106. #endif
  4107. #if defined(__BIG_ENDIAN)
  4108. u8 local_addr_2;
  4109. u8 local_addr_3;
  4110. u8 local_addr_4;
  4111. u8 local_addr_5;
  4112. #elif defined(__LITTLE_ENDIAN)
  4113. u8 local_addr_5;
  4114. u8 local_addr_4;
  4115. u8 local_addr_3;
  4116. u8 local_addr_2;
  4117. #endif
  4118. };
  4119. /*
  4120. * IpV4 context section, shared in TOE, RDMA and ISCSI
  4121. */
  4122. struct xstorm_ip_v4_context_section {
  4123. #if defined(__BIG_ENDIAN)
  4124. u16 __pbf_hdr_cmd_rsvd_id;
  4125. u16 __pbf_hdr_cmd_rsvd_flags_offset;
  4126. #elif defined(__LITTLE_ENDIAN)
  4127. u16 __pbf_hdr_cmd_rsvd_flags_offset;
  4128. u16 __pbf_hdr_cmd_rsvd_id;
  4129. #endif
  4130. #if defined(__BIG_ENDIAN)
  4131. u8 __pbf_hdr_cmd_rsvd_ver_ihl;
  4132. u8 tos;
  4133. u16 __pbf_hdr_cmd_rsvd_length;
  4134. #elif defined(__LITTLE_ENDIAN)
  4135. u16 __pbf_hdr_cmd_rsvd_length;
  4136. u8 tos;
  4137. u8 __pbf_hdr_cmd_rsvd_ver_ihl;
  4138. #endif
  4139. u32 ip_local_addr;
  4140. #if defined(__BIG_ENDIAN)
  4141. u8 ttl;
  4142. u8 __pbf_hdr_cmd_rsvd_protocol;
  4143. u16 __pbf_hdr_cmd_rsvd_csum;
  4144. #elif defined(__LITTLE_ENDIAN)
  4145. u16 __pbf_hdr_cmd_rsvd_csum;
  4146. u8 __pbf_hdr_cmd_rsvd_protocol;
  4147. u8 ttl;
  4148. #endif
  4149. u32 __pbf_hdr_cmd_rsvd_1;
  4150. u32 ip_remote_addr;
  4151. };
  4152. /*
  4153. * context section, shared in TOE, RDMA and ISCSI
  4154. */
  4155. struct xstorm_padded_ip_v4_context_section {
  4156. struct xstorm_ip_v4_context_section ip_v4;
  4157. u32 reserved1[4];
  4158. };
  4159. /*
  4160. * IpV6 context section, shared in TOE, RDMA and ISCSI
  4161. */
  4162. struct xstorm_ip_v6_context_section {
  4163. #if defined(__BIG_ENDIAN)
  4164. u16 pbf_hdr_cmd_rsvd_payload_len;
  4165. u8 pbf_hdr_cmd_rsvd_nxt_hdr;
  4166. u8 hop_limit;
  4167. #elif defined(__LITTLE_ENDIAN)
  4168. u8 hop_limit;
  4169. u8 pbf_hdr_cmd_rsvd_nxt_hdr;
  4170. u16 pbf_hdr_cmd_rsvd_payload_len;
  4171. #endif
  4172. u32 priority_flow_label;
  4173. #define XSTORM_IP_V6_CONTEXT_SECTION_FLOW_LABEL (0xFFFFF<<0)
  4174. #define XSTORM_IP_V6_CONTEXT_SECTION_FLOW_LABEL_SHIFT 0
  4175. #define XSTORM_IP_V6_CONTEXT_SECTION_TRAFFIC_CLASS (0xFF<<20)
  4176. #define XSTORM_IP_V6_CONTEXT_SECTION_TRAFFIC_CLASS_SHIFT 20
  4177. #define XSTORM_IP_V6_CONTEXT_SECTION_PBF_HDR_CMD_RSVD_VER (0xF<<28)
  4178. #define XSTORM_IP_V6_CONTEXT_SECTION_PBF_HDR_CMD_RSVD_VER_SHIFT 28
  4179. u32 ip_local_addr_lo_hi;
  4180. u32 ip_local_addr_lo_lo;
  4181. u32 ip_local_addr_hi_hi;
  4182. u32 ip_local_addr_hi_lo;
  4183. u32 ip_remote_addr_lo_hi;
  4184. u32 ip_remote_addr_lo_lo;
  4185. u32 ip_remote_addr_hi_hi;
  4186. u32 ip_remote_addr_hi_lo;
  4187. };
  4188. union xstorm_ip_context_section_types {
  4189. struct xstorm_padded_ip_v4_context_section padded_ip_v4;
  4190. struct xstorm_ip_v6_context_section ip_v6;
  4191. };
  4192. /*
  4193. * TCP context section, shared in TOE, RDMA and ISCSI
  4194. */
  4195. struct xstorm_tcp_context_section {
  4196. u32 snd_max;
  4197. #if defined(__BIG_ENDIAN)
  4198. u16 remote_port;
  4199. u16 local_port;
  4200. #elif defined(__LITTLE_ENDIAN)
  4201. u16 local_port;
  4202. u16 remote_port;
  4203. #endif
  4204. #if defined(__BIG_ENDIAN)
  4205. u8 original_nagle_1b;
  4206. u8 ts_enabled;
  4207. u16 tcp_params;
  4208. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE (0xFF<<0)
  4209. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE_SHIFT 0
  4210. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT (0x1<<8)
  4211. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT_SHIFT 8
  4212. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED (0x1<<9)
  4213. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED_SHIFT 9
  4214. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED (0x1<<10)
  4215. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED_SHIFT 10
  4216. #define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV (0x1<<11)
  4217. #define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV_SHIFT 11
  4218. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<12)
  4219. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 12
  4220. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED (0x1<<13)
  4221. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED_SHIFT 13
  4222. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER (0x3<<14)
  4223. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER_SHIFT 14
  4224. #elif defined(__LITTLE_ENDIAN)
  4225. u16 tcp_params;
  4226. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE (0xFF<<0)
  4227. #define XSTORM_TCP_CONTEXT_SECTION_TOTAL_HEADER_SIZE_SHIFT 0
  4228. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT (0x1<<8)
  4229. #define __XSTORM_TCP_CONTEXT_SECTION_ECT_BIT_SHIFT 8
  4230. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED (0x1<<9)
  4231. #define __XSTORM_TCP_CONTEXT_SECTION_ECN_ENABLED_SHIFT 9
  4232. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED (0x1<<10)
  4233. #define XSTORM_TCP_CONTEXT_SECTION_SACK_ENABLED_SHIFT 10
  4234. #define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV (0x1<<11)
  4235. #define XSTORM_TCP_CONTEXT_SECTION_SMALL_WIN_ADV_SHIFT 11
  4236. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG (0x1<<12)
  4237. #define XSTORM_TCP_CONTEXT_SECTION_FIN_SENT_FLAG_SHIFT 12
  4238. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED (0x1<<13)
  4239. #define XSTORM_TCP_CONTEXT_SECTION_WINDOW_SATURATED_SHIFT 13
  4240. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER (0x3<<14)
  4241. #define XSTORM_TCP_CONTEXT_SECTION_SLOWPATH_QUEUES_FLUSH_COUNTER_SHIFT 14
  4242. u8 ts_enabled;
  4243. u8 original_nagle_1b;
  4244. #endif
  4245. #if defined(__BIG_ENDIAN)
  4246. u16 pseudo_csum;
  4247. u16 window_scaling_factor;
  4248. #elif defined(__LITTLE_ENDIAN)
  4249. u16 window_scaling_factor;
  4250. u16 pseudo_csum;
  4251. #endif
  4252. #if defined(__BIG_ENDIAN)
  4253. u16 reserved2;
  4254. u8 statistics_counter_id;
  4255. u8 statistics_params;
  4256. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<0)
  4257. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 0
  4258. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<1)
  4259. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 1
  4260. #define XSTORM_TCP_CONTEXT_SECTION_RESERVED (0x3F<<2)
  4261. #define XSTORM_TCP_CONTEXT_SECTION_RESERVED_SHIFT 2
  4262. #elif defined(__LITTLE_ENDIAN)
  4263. u8 statistics_params;
  4264. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS (0x1<<0)
  4265. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L2_STATSTICS_SHIFT 0
  4266. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS (0x1<<1)
  4267. #define XSTORM_TCP_CONTEXT_SECTION_UPDATE_L4_STATSTICS_SHIFT 1
  4268. #define XSTORM_TCP_CONTEXT_SECTION_RESERVED (0x3F<<2)
  4269. #define XSTORM_TCP_CONTEXT_SECTION_RESERVED_SHIFT 2
  4270. u8 statistics_counter_id;
  4271. u16 reserved2;
  4272. #endif
  4273. u32 ts_time_diff;
  4274. u32 __next_timer_expir;
  4275. };
  4276. /*
  4277. * Common context section, shared in TOE, RDMA and ISCSI
  4278. */
  4279. struct xstorm_common_context_section {
  4280. struct xstorm_eth_context_section ethernet;
  4281. union xstorm_ip_context_section_types ip_union;
  4282. struct xstorm_tcp_context_section tcp;
  4283. #if defined(__BIG_ENDIAN)
  4284. u8 __dcb_val;
  4285. u8 flags;
  4286. #define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED (0x1<<0)
  4287. #define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED_SHIFT 0
  4288. #define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT (0x7<<1)
  4289. #define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT_SHIFT 1
  4290. #define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE (0x1<<4)
  4291. #define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE_SHIFT 4
  4292. #define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY (0x7<<5)
  4293. #define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY_SHIFT 5
  4294. u8 reserved;
  4295. u8 ip_version_1b;
  4296. #elif defined(__LITTLE_ENDIAN)
  4297. u8 ip_version_1b;
  4298. u8 reserved;
  4299. u8 flags;
  4300. #define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED (0x1<<0)
  4301. #define XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED_SHIFT 0
  4302. #define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT (0x7<<1)
  4303. #define XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT_SHIFT 1
  4304. #define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE (0x1<<4)
  4305. #define XSTORM_COMMON_CONTEXT_SECTION_VLAN_MODE_SHIFT 4
  4306. #define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY (0x7<<5)
  4307. #define XSTORM_COMMON_CONTEXT_SECTION_ORIGINAL_PRIORITY_SHIFT 5
  4308. u8 __dcb_val;
  4309. #endif
  4310. };
  4311. /*
  4312. * Flags used in ISCSI context section
  4313. */
  4314. struct xstorm_iscsi_context_flags {
  4315. u8 flags;
  4316. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_IMMEDIATE_DATA (0x1<<0)
  4317. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_IMMEDIATE_DATA_SHIFT 0
  4318. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_INITIAL_R2T (0x1<<1)
  4319. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_INITIAL_R2T_SHIFT 1
  4320. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_HEADER_DIGEST (0x1<<2)
  4321. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_HEADER_DIGEST_SHIFT 2
  4322. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_DATA_DIGEST (0x1<<3)
  4323. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_EN_DATA_DIGEST_SHIFT 3
  4324. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_HQ_BD_WRITTEN (0x1<<4)
  4325. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_HQ_BD_WRITTEN_SHIFT 4
  4326. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_LAST_OP_SQ (0x1<<5)
  4327. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_LAST_OP_SQ_SHIFT 5
  4328. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_UPDATE_SND_NXT (0x1<<6)
  4329. #define XSTORM_ISCSI_CONTEXT_FLAGS_B_UPDATE_SND_NXT_SHIFT 6
  4330. #define XSTORM_ISCSI_CONTEXT_FLAGS_RESERVED4 (0x1<<7)
  4331. #define XSTORM_ISCSI_CONTEXT_FLAGS_RESERVED4_SHIFT 7
  4332. };
  4333. struct iscsi_task_context_entry_x {
  4334. u32 data_out_buffer_offset;
  4335. u32 itt;
  4336. u32 data_sn;
  4337. };
  4338. struct iscsi_task_context_entry_xuc_x_write_only {
  4339. u32 tx_r2t_sn;
  4340. };
  4341. struct iscsi_task_context_entry_xuc_xu_write_both {
  4342. u32 sgl_base_lo;
  4343. u32 sgl_base_hi;
  4344. #if defined(__BIG_ENDIAN)
  4345. u8 sgl_size;
  4346. u8 sge_index;
  4347. u16 sge_offset;
  4348. #elif defined(__LITTLE_ENDIAN)
  4349. u16 sge_offset;
  4350. u8 sge_index;
  4351. u8 sgl_size;
  4352. #endif
  4353. };
  4354. /*
  4355. * iSCSI context section
  4356. */
  4357. struct xstorm_iscsi_context_section {
  4358. u32 first_burst_length;
  4359. u32 max_send_pdu_length;
  4360. struct regpair sq_pbl_base;
  4361. struct regpair sq_curr_pbe;
  4362. struct regpair hq_pbl_base;
  4363. struct regpair hq_curr_pbe_base;
  4364. struct regpair r2tq_pbl_base;
  4365. struct regpair r2tq_curr_pbe_base;
  4366. struct regpair task_pbl_base;
  4367. #if defined(__BIG_ENDIAN)
  4368. u16 data_out_count;
  4369. struct xstorm_iscsi_context_flags flags;
  4370. u8 task_pbl_cache_idx;
  4371. #elif defined(__LITTLE_ENDIAN)
  4372. u8 task_pbl_cache_idx;
  4373. struct xstorm_iscsi_context_flags flags;
  4374. u16 data_out_count;
  4375. #endif
  4376. u32 seq_more_2_send;
  4377. u32 pdu_more_2_send;
  4378. struct iscsi_task_context_entry_x temp_tce_x;
  4379. struct iscsi_task_context_entry_xuc_x_write_only temp_tce_x_wr;
  4380. struct iscsi_task_context_entry_xuc_xu_write_both temp_tce_xu_wr;
  4381. struct regpair lun;
  4382. u32 exp_data_transfer_len_ttt;
  4383. u32 pdu_data_2_rxmit;
  4384. u32 rxmit_bytes_2_dr;
  4385. #if defined(__BIG_ENDIAN)
  4386. u16 rxmit_sge_offset;
  4387. u16 hq_rxmit_cons;
  4388. #elif defined(__LITTLE_ENDIAN)
  4389. u16 hq_rxmit_cons;
  4390. u16 rxmit_sge_offset;
  4391. #endif
  4392. #if defined(__BIG_ENDIAN)
  4393. u16 r2tq_cons;
  4394. u8 rxmit_flags;
  4395. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD (0x1<<0)
  4396. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD_SHIFT 0
  4397. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR (0x1<<1)
  4398. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR_SHIFT 1
  4399. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU (0x1<<2)
  4400. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU_SHIFT 2
  4401. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR (0x1<<3)
  4402. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR_SHIFT 3
  4403. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR (0x1<<4)
  4404. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR_SHIFT 4
  4405. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING (0x3<<5)
  4406. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING_SHIFT 5
  4407. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT (0x1<<7)
  4408. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT_SHIFT 7
  4409. u8 rxmit_sge_idx;
  4410. #elif defined(__LITTLE_ENDIAN)
  4411. u8 rxmit_sge_idx;
  4412. u8 rxmit_flags;
  4413. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD (0x1<<0)
  4414. #define XSTORM_ISCSI_CONTEXT_SECTION_B_NEW_HQ_BD_SHIFT 0
  4415. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR (0x1<<1)
  4416. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PDU_HDR_SHIFT 1
  4417. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU (0x1<<2)
  4418. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_END_PDU_SHIFT 2
  4419. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR (0x1<<3)
  4420. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_DR_SHIFT 3
  4421. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR (0x1<<4)
  4422. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_START_DR_SHIFT 4
  4423. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING (0x3<<5)
  4424. #define XSTORM_ISCSI_CONTEXT_SECTION_B_RXMIT_PADDING_SHIFT 5
  4425. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT (0x1<<7)
  4426. #define XSTORM_ISCSI_CONTEXT_SECTION_B_ISCSI_CONT_FAST_RXMIT_SHIFT 7
  4427. u16 r2tq_cons;
  4428. #endif
  4429. u32 hq_rxmit_tcp_seq;
  4430. };
  4431. /*
  4432. * Xstorm iSCSI Storm Context
  4433. */
  4434. struct xstorm_iscsi_st_context {
  4435. struct xstorm_common_context_section common;
  4436. struct xstorm_iscsi_context_section iscsi;
  4437. };
  4438. /*
  4439. * Iscsi connection context
  4440. */
  4441. struct iscsi_context {
  4442. struct ustorm_iscsi_st_context ustorm_st_context;
  4443. struct tstorm_iscsi_st_context tstorm_st_context;
  4444. struct xstorm_iscsi_ag_context xstorm_ag_context;
  4445. struct tstorm_iscsi_ag_context tstorm_ag_context;
  4446. struct cstorm_iscsi_ag_context cstorm_ag_context;
  4447. struct ustorm_iscsi_ag_context ustorm_ag_context;
  4448. struct timers_block_context timers_context;
  4449. struct regpair upb_context;
  4450. struct xstorm_iscsi_st_context xstorm_st_context;
  4451. struct regpair xpb_context;
  4452. struct cstorm_iscsi_st_context cstorm_st_context;
  4453. };
  4454. /*
  4455. * PDU header of an iSCSI DATA-OUT
  4456. */
  4457. struct iscsi_data_pdu_hdr_little_endian {
  4458. #if defined(__BIG_ENDIAN)
  4459. u8 opcode;
  4460. u8 op_attr;
  4461. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
  4462. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
  4463. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
  4464. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
  4465. u16 rsrv0;
  4466. #elif defined(__LITTLE_ENDIAN)
  4467. u16 rsrv0;
  4468. u8 op_attr;
  4469. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
  4470. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
  4471. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG (0x1<<7)
  4472. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_FINAL_FLAG_SHIFT 7
  4473. u8 opcode;
  4474. #endif
  4475. u32 data_fields;
  4476. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
  4477. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
  4478. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
  4479. #define ISCSI_DATA_PDU_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
  4480. struct regpair lun;
  4481. u32 itt;
  4482. u32 ttt;
  4483. u32 rsrv2;
  4484. u32 exp_stat_sn;
  4485. u32 rsrv3;
  4486. u32 data_sn;
  4487. u32 buffer_offset;
  4488. u32 rsrv4;
  4489. };
  4490. /*
  4491. * PDU header of an iSCSI login request
  4492. */
  4493. struct iscsi_login_req_hdr_little_endian {
  4494. #if defined(__BIG_ENDIAN)
  4495. u8 opcode;
  4496. u8 op_attr;
  4497. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG (0x3<<0)
  4498. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG_SHIFT 0
  4499. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG (0x3<<2)
  4500. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG_SHIFT 2
  4501. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0 (0x3<<4)
  4502. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0_SHIFT 4
  4503. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
  4504. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
  4505. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT (0x1<<7)
  4506. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT_SHIFT 7
  4507. u8 version_max;
  4508. u8 version_min;
  4509. #elif defined(__LITTLE_ENDIAN)
  4510. u8 version_min;
  4511. u8 version_max;
  4512. u8 op_attr;
  4513. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG (0x3<<0)
  4514. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_NSG_SHIFT 0
  4515. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG (0x3<<2)
  4516. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CSG_SHIFT 2
  4517. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0 (0x3<<4)
  4518. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_RSRV0_SHIFT 4
  4519. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
  4520. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
  4521. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT (0x1<<7)
  4522. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TRANSIT_SHIFT 7
  4523. u8 opcode;
  4524. #endif
  4525. u32 data_fields;
  4526. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
  4527. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
  4528. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
  4529. #define ISCSI_LOGIN_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
  4530. u32 isid_lo;
  4531. #if defined(__BIG_ENDIAN)
  4532. u16 isid_hi;
  4533. u16 tsih;
  4534. #elif defined(__LITTLE_ENDIAN)
  4535. u16 tsih;
  4536. u16 isid_hi;
  4537. #endif
  4538. u32 itt;
  4539. #if defined(__BIG_ENDIAN)
  4540. u16 cid;
  4541. u16 rsrv1;
  4542. #elif defined(__LITTLE_ENDIAN)
  4543. u16 rsrv1;
  4544. u16 cid;
  4545. #endif
  4546. u32 cmd_sn;
  4547. u32 exp_stat_sn;
  4548. u32 rsrv2[4];
  4549. };
  4550. /*
  4551. * PDU header of an iSCSI logout request
  4552. */
  4553. struct iscsi_logout_req_hdr_little_endian {
  4554. #if defined(__BIG_ENDIAN)
  4555. u8 opcode;
  4556. u8 op_attr;
  4557. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE (0x7F<<0)
  4558. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE_SHIFT 0
  4559. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
  4560. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
  4561. u16 rsrv0;
  4562. #elif defined(__LITTLE_ENDIAN)
  4563. u16 rsrv0;
  4564. u8 op_attr;
  4565. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE (0x7F<<0)
  4566. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_REASON_CODE_SHIFT 0
  4567. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
  4568. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
  4569. u8 opcode;
  4570. #endif
  4571. u32 data_fields;
  4572. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
  4573. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
  4574. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
  4575. #define ISCSI_LOGOUT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
  4576. u32 rsrv2[2];
  4577. u32 itt;
  4578. #if defined(__BIG_ENDIAN)
  4579. u16 cid;
  4580. u16 rsrv1;
  4581. #elif defined(__LITTLE_ENDIAN)
  4582. u16 rsrv1;
  4583. u16 cid;
  4584. #endif
  4585. u32 cmd_sn;
  4586. u32 exp_stat_sn;
  4587. u32 rsrv3[4];
  4588. };
  4589. /*
  4590. * PDU header of an iSCSI TMF request
  4591. */
  4592. struct iscsi_tmf_req_hdr_little_endian {
  4593. #if defined(__BIG_ENDIAN)
  4594. u8 opcode;
  4595. u8 op_attr;
  4596. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION (0x7F<<0)
  4597. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION_SHIFT 0
  4598. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
  4599. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
  4600. u16 rsrv0;
  4601. #elif defined(__LITTLE_ENDIAN)
  4602. u16 rsrv0;
  4603. u8 op_attr;
  4604. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION (0x7F<<0)
  4605. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_FUNCTION_SHIFT 0
  4606. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1 (0x1<<7)
  4607. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_RSRV1_1_SHIFT 7
  4608. u8 opcode;
  4609. #endif
  4610. u32 data_fields;
  4611. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
  4612. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
  4613. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
  4614. #define ISCSI_TMF_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
  4615. struct regpair lun;
  4616. u32 itt;
  4617. u32 referenced_task_tag;
  4618. u32 cmd_sn;
  4619. u32 exp_stat_sn;
  4620. u32 ref_cmd_sn;
  4621. u32 exp_data_sn;
  4622. u32 rsrv2[2];
  4623. };
  4624. /*
  4625. * PDU header of an iSCSI Text request
  4626. */
  4627. struct iscsi_text_req_hdr_little_endian {
  4628. #if defined(__BIG_ENDIAN)
  4629. u8 opcode;
  4630. u8 op_attr;
  4631. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1 (0x3F<<0)
  4632. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
  4633. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
  4634. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
  4635. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL (0x1<<7)
  4636. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL_SHIFT 7
  4637. u16 rsrv0;
  4638. #elif defined(__LITTLE_ENDIAN)
  4639. u16 rsrv0;
  4640. u8 op_attr;
  4641. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1 (0x3F<<0)
  4642. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
  4643. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG (0x1<<6)
  4644. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_CONTINUE_FLG_SHIFT 6
  4645. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL (0x1<<7)
  4646. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_FINAL_SHIFT 7
  4647. u8 opcode;
  4648. #endif
  4649. u32 data_fields;
  4650. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
  4651. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
  4652. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
  4653. #define ISCSI_TEXT_REQ_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
  4654. struct regpair lun;
  4655. u32 itt;
  4656. u32 ttt;
  4657. u32 cmd_sn;
  4658. u32 exp_stat_sn;
  4659. u32 rsrv3[4];
  4660. };
  4661. /*
  4662. * PDU header of an iSCSI Nop-Out
  4663. */
  4664. struct iscsi_nop_out_hdr_little_endian {
  4665. #if defined(__BIG_ENDIAN)
  4666. u8 opcode;
  4667. u8 op_attr;
  4668. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
  4669. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
  4670. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1 (0x1<<7)
  4671. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1_SHIFT 7
  4672. u16 rsrv0;
  4673. #elif defined(__LITTLE_ENDIAN)
  4674. u16 rsrv0;
  4675. u8 op_attr;
  4676. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1 (0x7F<<0)
  4677. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV1_SHIFT 0
  4678. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1 (0x1<<7)
  4679. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_RSRV2_1_SHIFT 7
  4680. u8 opcode;
  4681. #endif
  4682. u32 data_fields;
  4683. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH (0xFFFFFF<<0)
  4684. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_DATA_SEGMENT_LENGTH_SHIFT 0
  4685. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH (0xFF<<24)
  4686. #define ISCSI_NOP_OUT_HDR_LITTLE_ENDIAN_TOTAL_AHS_LENGTH_SHIFT 24
  4687. struct regpair lun;
  4688. u32 itt;
  4689. u32 ttt;
  4690. u32 cmd_sn;
  4691. u32 exp_stat_sn;
  4692. u32 rsrv3[4];
  4693. };
  4694. /*
  4695. * iscsi pdu headers in little endian form.
  4696. */
  4697. union iscsi_pdu_headers_little_endian {
  4698. u32 fullHeaderSize[12];
  4699. struct iscsi_cmd_pdu_hdr_little_endian command_pdu_hdr;
  4700. struct iscsi_data_pdu_hdr_little_endian data_out_pdu_hdr;
  4701. struct iscsi_login_req_hdr_little_endian login_req_pdu_hdr;
  4702. struct iscsi_logout_req_hdr_little_endian logout_req_pdu_hdr;
  4703. struct iscsi_tmf_req_hdr_little_endian tmf_req_pdu_hdr;
  4704. struct iscsi_text_req_hdr_little_endian text_req_pdu_hdr;
  4705. struct iscsi_nop_out_hdr_little_endian nop_out_pdu_hdr;
  4706. };
  4707. struct iscsi_hq_bd {
  4708. union iscsi_pdu_headers_little_endian pdu_header;
  4709. #if defined(__BIG_ENDIAN)
  4710. u16 reserved1;
  4711. u16 lcl_cmp_flg;
  4712. #elif defined(__LITTLE_ENDIAN)
  4713. u16 lcl_cmp_flg;
  4714. u16 reserved1;
  4715. #endif
  4716. u32 sgl_base_lo;
  4717. u32 sgl_base_hi;
  4718. #if defined(__BIG_ENDIAN)
  4719. u8 sgl_size;
  4720. u8 sge_index;
  4721. u16 sge_offset;
  4722. #elif defined(__LITTLE_ENDIAN)
  4723. u16 sge_offset;
  4724. u8 sge_index;
  4725. u8 sgl_size;
  4726. #endif
  4727. };
  4728. /*
  4729. * CQE data for L2 OOO connection $$KEEP_ENDIANNESS$$
  4730. */
  4731. struct iscsi_l2_ooo_data {
  4732. __le32 iscsi_cid;
  4733. u8 drop_isle;
  4734. u8 drop_size;
  4735. u8 ooo_opcode;
  4736. u8 ooo_isle;
  4737. u8 reserved[8];
  4738. };
  4739. struct iscsi_task_context_entry_xuc_c_write_only {
  4740. u32 total_data_acked;
  4741. };
  4742. struct iscsi_task_context_r2t_table_entry {
  4743. u32 ttt;
  4744. u32 desired_data_len;
  4745. };
  4746. struct iscsi_task_context_entry_xuc_u_write_only {
  4747. u32 exp_r2t_sn;
  4748. struct iscsi_task_context_r2t_table_entry r2t_table[4];
  4749. #if defined(__BIG_ENDIAN)
  4750. u16 data_in_count;
  4751. u8 cq_id;
  4752. u8 valid_1b;
  4753. #elif defined(__LITTLE_ENDIAN)
  4754. u8 valid_1b;
  4755. u8 cq_id;
  4756. u16 data_in_count;
  4757. #endif
  4758. };
  4759. struct iscsi_task_context_entry_xuc {
  4760. struct iscsi_task_context_entry_xuc_c_write_only write_c;
  4761. u32 exp_data_transfer_len;
  4762. struct iscsi_task_context_entry_xuc_x_write_only write_x;
  4763. u32 lun_lo;
  4764. struct iscsi_task_context_entry_xuc_xu_write_both write_xu;
  4765. u32 lun_hi;
  4766. struct iscsi_task_context_entry_xuc_u_write_only write_u;
  4767. };
  4768. struct iscsi_task_context_entry_u {
  4769. u32 exp_r2t_buff_offset;
  4770. u32 rem_rcv_len;
  4771. u32 exp_data_sn;
  4772. };
  4773. struct iscsi_task_context_entry {
  4774. struct iscsi_task_context_entry_x tce_x;
  4775. #if defined(__BIG_ENDIAN)
  4776. u16 data_out_count;
  4777. u16 rsrv0;
  4778. #elif defined(__LITTLE_ENDIAN)
  4779. u16 rsrv0;
  4780. u16 data_out_count;
  4781. #endif
  4782. struct iscsi_task_context_entry_xuc tce_xuc;
  4783. struct iscsi_task_context_entry_u tce_u;
  4784. u32 rsrv1[7];
  4785. };
  4786. struct iscsi_task_context_entry_xuc_x_init_only {
  4787. struct regpair lun;
  4788. u32 exp_data_transfer_len;
  4789. };
  4790. /*
  4791. * ipv6 structure
  4792. */
  4793. struct ip_v6_addr {
  4794. u32 ip_addr_lo_lo;
  4795. u32 ip_addr_lo_hi;
  4796. u32 ip_addr_hi_lo;
  4797. u32 ip_addr_hi_hi;
  4798. };
  4799. /*
  4800. * l5cm- connection identification params
  4801. */
  4802. struct l5cm_conn_addr_params {
  4803. u32 pmtu;
  4804. #if defined(__BIG_ENDIAN)
  4805. u8 remote_addr_3;
  4806. u8 remote_addr_2;
  4807. u8 remote_addr_1;
  4808. u8 remote_addr_0;
  4809. #elif defined(__LITTLE_ENDIAN)
  4810. u8 remote_addr_0;
  4811. u8 remote_addr_1;
  4812. u8 remote_addr_2;
  4813. u8 remote_addr_3;
  4814. #endif
  4815. #if defined(__BIG_ENDIAN)
  4816. u16 params;
  4817. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION (0x1<<0)
  4818. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION_SHIFT 0
  4819. #define L5CM_CONN_ADDR_PARAMS_RSRV (0x7FFF<<1)
  4820. #define L5CM_CONN_ADDR_PARAMS_RSRV_SHIFT 1
  4821. u8 remote_addr_5;
  4822. u8 remote_addr_4;
  4823. #elif defined(__LITTLE_ENDIAN)
  4824. u8 remote_addr_4;
  4825. u8 remote_addr_5;
  4826. u16 params;
  4827. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION (0x1<<0)
  4828. #define L5CM_CONN_ADDR_PARAMS_IP_VERSION_SHIFT 0
  4829. #define L5CM_CONN_ADDR_PARAMS_RSRV (0x7FFF<<1)
  4830. #define L5CM_CONN_ADDR_PARAMS_RSRV_SHIFT 1
  4831. #endif
  4832. struct ip_v6_addr local_ip_addr;
  4833. struct ip_v6_addr remote_ip_addr;
  4834. u32 ipv6_flow_label_20b;
  4835. u32 reserved1;
  4836. #if defined(__BIG_ENDIAN)
  4837. u16 remote_tcp_port;
  4838. u16 local_tcp_port;
  4839. #elif defined(__LITTLE_ENDIAN)
  4840. u16 local_tcp_port;
  4841. u16 remote_tcp_port;
  4842. #endif
  4843. };
  4844. /*
  4845. * l5cm-xstorm connection buffer
  4846. */
  4847. struct l5cm_xstorm_conn_buffer {
  4848. #if defined(__BIG_ENDIAN)
  4849. u16 rsrv1;
  4850. u16 params;
  4851. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE (0x1<<0)
  4852. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE_SHIFT 0
  4853. #define L5CM_XSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  4854. #define L5CM_XSTORM_CONN_BUFFER_RSRV_SHIFT 1
  4855. #elif defined(__LITTLE_ENDIAN)
  4856. u16 params;
  4857. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE (0x1<<0)
  4858. #define L5CM_XSTORM_CONN_BUFFER_NAGLE_ENABLE_SHIFT 0
  4859. #define L5CM_XSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  4860. #define L5CM_XSTORM_CONN_BUFFER_RSRV_SHIFT 1
  4861. u16 rsrv1;
  4862. #endif
  4863. #if defined(__BIG_ENDIAN)
  4864. u16 mss;
  4865. u16 pseudo_header_checksum;
  4866. #elif defined(__LITTLE_ENDIAN)
  4867. u16 pseudo_header_checksum;
  4868. u16 mss;
  4869. #endif
  4870. u32 rcv_buf;
  4871. u32 rsrv2;
  4872. struct regpair context_addr;
  4873. };
  4874. /*
  4875. * l5cm-tstorm connection buffer
  4876. */
  4877. struct l5cm_tstorm_conn_buffer {
  4878. u32 rsrv1[2];
  4879. #if defined(__BIG_ENDIAN)
  4880. u16 params;
  4881. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE (0x1<<0)
  4882. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE_SHIFT 0
  4883. #define L5CM_TSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  4884. #define L5CM_TSTORM_CONN_BUFFER_RSRV_SHIFT 1
  4885. u8 ka_max_probe_count;
  4886. u8 ka_enable;
  4887. #elif defined(__LITTLE_ENDIAN)
  4888. u8 ka_enable;
  4889. u8 ka_max_probe_count;
  4890. u16 params;
  4891. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE (0x1<<0)
  4892. #define L5CM_TSTORM_CONN_BUFFER_DELAYED_ACK_ENABLE_SHIFT 0
  4893. #define L5CM_TSTORM_CONN_BUFFER_RSRV (0x7FFF<<1)
  4894. #define L5CM_TSTORM_CONN_BUFFER_RSRV_SHIFT 1
  4895. #endif
  4896. u32 ka_timeout;
  4897. u32 ka_interval;
  4898. u32 max_rt_time;
  4899. };
  4900. /*
  4901. * l5cm connection buffer for active side
  4902. */
  4903. struct l5cm_active_conn_buffer {
  4904. struct l5cm_conn_addr_params conn_addr_buf;
  4905. struct l5cm_xstorm_conn_buffer xstorm_conn_buffer;
  4906. struct l5cm_tstorm_conn_buffer tstorm_conn_buffer;
  4907. };
  4908. /*
  4909. * The l5cm opaque buffer passed in add new connection ramrod passive side
  4910. */
  4911. struct l5cm_hash_input_string {
  4912. u32 __opaque1;
  4913. #if defined(__BIG_ENDIAN)
  4914. u16 __opaque3;
  4915. u16 __opaque2;
  4916. #elif defined(__LITTLE_ENDIAN)
  4917. u16 __opaque2;
  4918. u16 __opaque3;
  4919. #endif
  4920. struct ip_v6_addr __opaque4;
  4921. struct ip_v6_addr __opaque5;
  4922. u32 __opaque6;
  4923. u32 __opaque7[5];
  4924. };
  4925. /*
  4926. * syn cookie component
  4927. */
  4928. struct l5cm_syn_cookie_comp {
  4929. u32 __opaque;
  4930. };
  4931. /*
  4932. * data related to listeners of a TCP port
  4933. */
  4934. struct l5cm_port_listener_data {
  4935. u8 params;
  4936. #define L5CM_PORT_LISTENER_DATA_ENABLE (0x1<<0)
  4937. #define L5CM_PORT_LISTENER_DATA_ENABLE_SHIFT 0
  4938. #define L5CM_PORT_LISTENER_DATA_IP_INDEX (0xF<<1)
  4939. #define L5CM_PORT_LISTENER_DATA_IP_INDEX_SHIFT 1
  4940. #define L5CM_PORT_LISTENER_DATA_NET_FILTER (0x1<<5)
  4941. #define L5CM_PORT_LISTENER_DATA_NET_FILTER_SHIFT 5
  4942. #define L5CM_PORT_LISTENER_DATA_DEFFERED_MODE (0x1<<6)
  4943. #define L5CM_PORT_LISTENER_DATA_DEFFERED_MODE_SHIFT 6
  4944. #define L5CM_PORT_LISTENER_DATA_MPA_MODE (0x1<<7)
  4945. #define L5CM_PORT_LISTENER_DATA_MPA_MODE_SHIFT 7
  4946. };
  4947. /*
  4948. * Opaque structure passed from U to X when final ack arrives
  4949. */
  4950. struct l5cm_opaque_buf {
  4951. u32 __opaque1;
  4952. u32 __opaque2;
  4953. u32 __opaque3;
  4954. u32 __opaque4;
  4955. struct l5cm_syn_cookie_comp __opaque5;
  4956. #if defined(__BIG_ENDIAN)
  4957. u16 rsrv2;
  4958. u8 rsrv;
  4959. struct l5cm_port_listener_data __opaque6;
  4960. #elif defined(__LITTLE_ENDIAN)
  4961. struct l5cm_port_listener_data __opaque6;
  4962. u8 rsrv;
  4963. u16 rsrv2;
  4964. #endif
  4965. };
  4966. /*
  4967. * l5cm slow path element
  4968. */
  4969. struct l5cm_packet_size {
  4970. u32 size;
  4971. u32 rsrv;
  4972. };
  4973. /*
  4974. * The final-ack union structure in PCS entry after final ack arrived
  4975. */
  4976. struct l5cm_pcse_ack {
  4977. struct l5cm_xstorm_conn_buffer tx_socket_params;
  4978. struct l5cm_opaque_buf opaque_buf;
  4979. struct l5cm_tstorm_conn_buffer rx_socket_params;
  4980. };
  4981. /*
  4982. * The syn union structure in PCS entry after syn arrived
  4983. */
  4984. struct l5cm_pcse_syn {
  4985. struct l5cm_opaque_buf opaque_buf;
  4986. u32 rsrv[12];
  4987. };
  4988. /*
  4989. * pcs entry data for passive connections
  4990. */
  4991. struct l5cm_pcs_attributes {
  4992. #if defined(__BIG_ENDIAN)
  4993. u16 pcs_id;
  4994. u8 status;
  4995. u8 flags;
  4996. #define L5CM_PCS_ATTRIBUTES_NET_FILTER (0x1<<0)
  4997. #define L5CM_PCS_ATTRIBUTES_NET_FILTER_SHIFT 0
  4998. #define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH (0x1<<1)
  4999. #define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH_SHIFT 1
  5000. #define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT (0x1<<2)
  5001. #define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT_SHIFT 2
  5002. #define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT (0x1<<3)
  5003. #define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT_SHIFT 3
  5004. #define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC (0x1<<4)
  5005. #define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC_SHIFT 4
  5006. #define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD (0x1<<5)
  5007. #define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD_SHIFT 5
  5008. #define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET (0x1<<6)
  5009. #define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET_SHIFT 6
  5010. #define L5CM_PCS_ATTRIBUTES_RSRV (0x1<<7)
  5011. #define L5CM_PCS_ATTRIBUTES_RSRV_SHIFT 7
  5012. #elif defined(__LITTLE_ENDIAN)
  5013. u8 flags;
  5014. #define L5CM_PCS_ATTRIBUTES_NET_FILTER (0x1<<0)
  5015. #define L5CM_PCS_ATTRIBUTES_NET_FILTER_SHIFT 0
  5016. #define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH (0x1<<1)
  5017. #define L5CM_PCS_ATTRIBUTES_CALCULATE_HASH_SHIFT 1
  5018. #define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT (0x1<<2)
  5019. #define L5CM_PCS_ATTRIBUTES_COMPARE_HASH_RESULT_SHIFT 2
  5020. #define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT (0x1<<3)
  5021. #define L5CM_PCS_ATTRIBUTES_QUERY_ULP_ACCEPT_SHIFT 3
  5022. #define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC (0x1<<4)
  5023. #define L5CM_PCS_ATTRIBUTES_FIND_DEST_MAC_SHIFT 4
  5024. #define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD (0x1<<5)
  5025. #define L5CM_PCS_ATTRIBUTES_L4_OFFLOAD_SHIFT 5
  5026. #define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET (0x1<<6)
  5027. #define L5CM_PCS_ATTRIBUTES_FORWARD_PACKET_SHIFT 6
  5028. #define L5CM_PCS_ATTRIBUTES_RSRV (0x1<<7)
  5029. #define L5CM_PCS_ATTRIBUTES_RSRV_SHIFT 7
  5030. u8 status;
  5031. u16 pcs_id;
  5032. #endif
  5033. };
  5034. union l5cm_seg_params {
  5035. struct l5cm_pcse_syn syn_seg_params;
  5036. struct l5cm_pcse_ack ack_seg_params;
  5037. };
  5038. /*
  5039. * pcs entry data for passive connections
  5040. */
  5041. struct l5cm_pcs_hdr {
  5042. struct l5cm_hash_input_string hash_input_string;
  5043. struct l5cm_conn_addr_params conn_addr_buf;
  5044. u32 cid;
  5045. u32 hash_result;
  5046. union l5cm_seg_params seg_params;
  5047. struct l5cm_pcs_attributes att;
  5048. #if defined(__BIG_ENDIAN)
  5049. u16 rsrv;
  5050. u16 rx_seg_size;
  5051. #elif defined(__LITTLE_ENDIAN)
  5052. u16 rx_seg_size;
  5053. u16 rsrv;
  5054. #endif
  5055. };
  5056. /*
  5057. * pcs entry for passive connections
  5058. */
  5059. struct l5cm_pcs_entry {
  5060. struct l5cm_pcs_hdr hdr;
  5061. u8 rx_segment[1516];
  5062. };
  5063. /*
  5064. * l5cm connection parameters
  5065. */
  5066. union l5cm_reduce_param_union {
  5067. u32 opaque1;
  5068. u32 opaque2;
  5069. };
  5070. /*
  5071. * l5cm connection parameters
  5072. */
  5073. struct l5cm_reduce_conn {
  5074. union l5cm_reduce_param_union opaque1;
  5075. u32 opaque2;
  5076. };
  5077. /*
  5078. * l5cm slow path element
  5079. */
  5080. union l5cm_specific_data {
  5081. u8 protocol_data[8];
  5082. struct regpair phy_address;
  5083. struct l5cm_packet_size packet_size;
  5084. struct l5cm_reduce_conn reduced_conn;
  5085. };
  5086. /*
  5087. * l5 slow path element
  5088. */
  5089. struct l5cm_spe {
  5090. struct spe_hdr hdr;
  5091. union l5cm_specific_data data;
  5092. };
  5093. /*
  5094. * Termination variables
  5095. */
  5096. struct l5cm_term_vars {
  5097. u8 BitMap;
  5098. #define L5CM_TERM_VARS_TCP_STATE (0xF<<0)
  5099. #define L5CM_TERM_VARS_TCP_STATE_SHIFT 0
  5100. #define L5CM_TERM_VARS_FIN_RECEIVED_SBIT (0x1<<4)
  5101. #define L5CM_TERM_VARS_FIN_RECEIVED_SBIT_SHIFT 4
  5102. #define L5CM_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT (0x1<<5)
  5103. #define L5CM_TERM_VARS_ACK_ON_FIN_RECEIVED_SBIT_SHIFT 5
  5104. #define L5CM_TERM_VARS_TERM_ON_CHIP (0x1<<6)
  5105. #define L5CM_TERM_VARS_TERM_ON_CHIP_SHIFT 6
  5106. #define L5CM_TERM_VARS_RSRV (0x1<<7)
  5107. #define L5CM_TERM_VARS_RSRV_SHIFT 7
  5108. };
  5109. /*
  5110. * Tstorm Tcp flags
  5111. */
  5112. struct tstorm_l5cm_tcp_flags {
  5113. u16 flags;
  5114. #define TSTORM_L5CM_TCP_FLAGS_VLAN_ID (0xFFF<<0)
  5115. #define TSTORM_L5CM_TCP_FLAGS_VLAN_ID_SHIFT 0
  5116. #define TSTORM_L5CM_TCP_FLAGS_RSRV0 (0x1<<12)
  5117. #define TSTORM_L5CM_TCP_FLAGS_RSRV0_SHIFT 12
  5118. #define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED (0x1<<13)
  5119. #define TSTORM_L5CM_TCP_FLAGS_TS_ENABLED_SHIFT 13
  5120. #define TSTORM_L5CM_TCP_FLAGS_RSRV1 (0x3<<14)
  5121. #define TSTORM_L5CM_TCP_FLAGS_RSRV1_SHIFT 14
  5122. };
  5123. /*
  5124. * Xstorm Tcp flags
  5125. */
  5126. struct xstorm_l5cm_tcp_flags {
  5127. u8 flags;
  5128. #define XSTORM_L5CM_TCP_FLAGS_ENC_ENABLED (0x1<<0)
  5129. #define XSTORM_L5CM_TCP_FLAGS_ENC_ENABLED_SHIFT 0
  5130. #define XSTORM_L5CM_TCP_FLAGS_TS_ENABLED (0x1<<1)
  5131. #define XSTORM_L5CM_TCP_FLAGS_TS_ENABLED_SHIFT 1
  5132. #define XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN (0x1<<2)
  5133. #define XSTORM_L5CM_TCP_FLAGS_WND_SCL_EN_SHIFT 2
  5134. #define XSTORM_L5CM_TCP_FLAGS_RSRV (0x1F<<3)
  5135. #define XSTORM_L5CM_TCP_FLAGS_RSRV_SHIFT 3
  5136. };
  5137. /*
  5138. * Out-of-order states
  5139. */
  5140. enum tcp_ooo_event {
  5141. TCP_EVENT_ADD_PEN = 0,
  5142. TCP_EVENT_ADD_NEW_ISLE = 1,
  5143. TCP_EVENT_ADD_ISLE_RIGHT = 2,
  5144. TCP_EVENT_ADD_ISLE_LEFT = 3,
  5145. TCP_EVENT_JOIN = 4,
  5146. TCP_EVENT_NOP = 5,
  5147. MAX_TCP_OOO_EVENT
  5148. };
  5149. /*
  5150. * OOO support modes
  5151. */
  5152. enum tcp_tstorm_ooo {
  5153. TCP_TSTORM_OOO_DROP_AND_PROC_ACK = 0,
  5154. TCP_TSTORM_OOO_SEND_PURE_ACK = 1,
  5155. TCP_TSTORM_OOO_SUPPORTED = 2,
  5156. MAX_TCP_TSTORM_OOO
  5157. };
  5158. #endif /* __5710_HSI_CNIC_LE__ */