cnic_defs.h 170 KB

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