1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright (C) 2021 Broadcom. All Rights Reserved. The term
- * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
- *
- */
- /*
- * All common SLI-4 structures and function prototypes.
- */
- #ifndef _SLI4_H
- #define _SLI4_H
- #include <linux/pci.h>
- #include <linux/delay.h>
- #include "scsi/fc/fc_els.h"
- #include "scsi/fc/fc_fs.h"
- #include "../include/efc_common.h"
- /*************************************************************************
- * Common SLI-4 register offsets and field definitions
- */
- /* SLI_INTF - SLI Interface Definition Register */
- #define SLI4_INTF_REG 0x0058
- enum sli4_intf {
- SLI4_INTF_REV_SHIFT = 4,
- SLI4_INTF_REV_MASK = 0xf0,
- SLI4_INTF_REV_S3 = 0x30,
- SLI4_INTF_REV_S4 = 0x40,
- SLI4_INTF_FAMILY_SHIFT = 8,
- SLI4_INTF_FAMILY_MASK = 0x0f00,
- SLI4_FAMILY_CHECK_ASIC_TYPE = 0x0f00,
- SLI4_INTF_IF_TYPE_SHIFT = 12,
- SLI4_INTF_IF_TYPE_MASK = 0xf000,
- SLI4_INTF_IF_TYPE_2 = 0x2000,
- SLI4_INTF_IF_TYPE_6 = 0x6000,
- SLI4_INTF_VALID_SHIFT = 29,
- SLI4_INTF_VALID_MASK = 0xe0000000,
- SLI4_INTF_VALID_VALUE = 0xc0000000,
- };
- /* ASIC_ID - SLI ASIC Type and Revision Register */
- #define SLI4_ASIC_ID_REG 0x009c
- enum sli4_asic {
- SLI4_ASIC_GEN_SHIFT = 8,
- SLI4_ASIC_GEN_MASK = 0xff00,
- SLI4_ASIC_GEN_5 = 0x0b00,
- SLI4_ASIC_GEN_6 = 0x0c00,
- SLI4_ASIC_GEN_7 = 0x0d00,
- };
- enum sli4_acic_revisions {
- SLI4_ASIC_REV_A0 = 0x00,
- SLI4_ASIC_REV_A1 = 0x01,
- SLI4_ASIC_REV_A2 = 0x02,
- SLI4_ASIC_REV_A3 = 0x03,
- SLI4_ASIC_REV_B0 = 0x10,
- SLI4_ASIC_REV_B1 = 0x11,
- SLI4_ASIC_REV_B2 = 0x12,
- SLI4_ASIC_REV_C0 = 0x20,
- SLI4_ASIC_REV_C1 = 0x21,
- SLI4_ASIC_REV_C2 = 0x22,
- SLI4_ASIC_REV_D0 = 0x30,
- };
- struct sli4_asic_entry_t {
- u32 rev_id;
- u32 family;
- };
- /* BMBX - Bootstrap Mailbox Register */
- #define SLI4_BMBX_REG 0x0160
- enum sli4_bmbx {
- SLI4_BMBX_MASK_HI = 0x3,
- SLI4_BMBX_MASK_LO = 0xf,
- SLI4_BMBX_RDY = 1 << 0,
- SLI4_BMBX_HI = 1 << 1,
- SLI4_BMBX_SIZE = 256,
- };
- static inline u32
- sli_bmbx_write_hi(u64 addr) {
- u32 val;
- val = upper_32_bits(addr) & ~SLI4_BMBX_MASK_HI;
- val |= SLI4_BMBX_HI;
- return val;
- }
- static inline u32
- sli_bmbx_write_lo(u64 addr) {
- u32 val;
- val = (upper_32_bits(addr) & SLI4_BMBX_MASK_HI) << 30;
- val |= ((addr) & ~SLI4_BMBX_MASK_LO) >> 2;
- return val;
- }
- /* SLIPORT_CONTROL - SLI Port Control Register */
- #define SLI4_PORT_CTRL_REG 0x0408
- enum sli4_port_ctrl {
- SLI4_PORT_CTRL_IP = 1u << 27,
- SLI4_PORT_CTRL_IDIS = 1u << 22,
- SLI4_PORT_CTRL_FDD = 1u << 31,
- };
- /* SLI4_SLIPORT_ERROR - SLI Port Error Register */
- #define SLI4_PORT_ERROR1 0x040c
- #define SLI4_PORT_ERROR2 0x0410
- /* EQCQ_DOORBELL - EQ and CQ Doorbell Register */
- #define SLI4_EQCQ_DB_REG 0x120
- enum sli4_eqcq_e {
- SLI4_EQ_ID_LO_MASK = 0x01ff,
- SLI4_CQ_ID_LO_MASK = 0x03ff,
- SLI4_EQCQ_CI_EQ = 0x0200,
- SLI4_EQCQ_QT_EQ = 0x00000400,
- SLI4_EQCQ_QT_CQ = 0x00000000,
- SLI4_EQCQ_ID_HI_SHIFT = 11,
- SLI4_EQCQ_ID_HI_MASK = 0xf800,
- SLI4_EQCQ_NUM_SHIFT = 16,
- SLI4_EQCQ_NUM_MASK = 0x1fff0000,
- SLI4_EQCQ_ARM = 0x20000000,
- SLI4_EQCQ_UNARM = 0x00000000,
- };
- static inline u32
- sli_format_eq_db_data(u16 num_popped, u16 id, u32 arm) {
- u32 reg;
- reg = (id & SLI4_EQ_ID_LO_MASK) | SLI4_EQCQ_QT_EQ;
- reg |= (((id) >> 9) << SLI4_EQCQ_ID_HI_SHIFT) & SLI4_EQCQ_ID_HI_MASK;
- reg |= ((num_popped) << SLI4_EQCQ_NUM_SHIFT) & SLI4_EQCQ_NUM_MASK;
- reg |= arm | SLI4_EQCQ_CI_EQ;
- return reg;
- }
- static inline u32
- sli_format_cq_db_data(u16 num_popped, u16 id, u32 arm) {
- u32 reg;
- reg = ((id) & SLI4_CQ_ID_LO_MASK) | SLI4_EQCQ_QT_CQ;
- reg |= (((id) >> 10) << SLI4_EQCQ_ID_HI_SHIFT) & SLI4_EQCQ_ID_HI_MASK;
- reg |= ((num_popped) << SLI4_EQCQ_NUM_SHIFT) & SLI4_EQCQ_NUM_MASK;
- reg |= arm;
- return reg;
- }
- /* EQ_DOORBELL - EQ Doorbell Register for IF_TYPE = 6*/
- #define SLI4_IF6_EQ_DB_REG 0x120
- enum sli4_eq_e {
- SLI4_IF6_EQ_ID_MASK = 0x0fff,
- SLI4_IF6_EQ_NUM_SHIFT = 16,
- SLI4_IF6_EQ_NUM_MASK = 0x1fff0000,
- };
- static inline u32
- sli_format_if6_eq_db_data(u16 num_popped, u16 id, u32 arm) {
- u32 reg;
- reg = id & SLI4_IF6_EQ_ID_MASK;
- reg |= (num_popped << SLI4_IF6_EQ_NUM_SHIFT) & SLI4_IF6_EQ_NUM_MASK;
- reg |= arm;
- return reg;
- }
- /* CQ_DOORBELL - CQ Doorbell Register for IF_TYPE = 6 */
- #define SLI4_IF6_CQ_DB_REG 0xc0
- enum sli4_cq_e {
- SLI4_IF6_CQ_ID_MASK = 0xffff,
- SLI4_IF6_CQ_NUM_SHIFT = 16,
- SLI4_IF6_CQ_NUM_MASK = 0x1fff0000,
- };
- static inline u32
- sli_format_if6_cq_db_data(u16 num_popped, u16 id, u32 arm) {
- u32 reg;
- reg = id & SLI4_IF6_CQ_ID_MASK;
- reg |= ((num_popped) << SLI4_IF6_CQ_NUM_SHIFT) & SLI4_IF6_CQ_NUM_MASK;
- reg |= arm;
- return reg;
- }
- /* MQ_DOORBELL - MQ Doorbell Register */
- #define SLI4_MQ_DB_REG 0x0140
- #define SLI4_IF6_MQ_DB_REG 0x0160
- enum sli4_mq_e {
- SLI4_MQ_ID_MASK = 0xffff,
- SLI4_MQ_NUM_SHIFT = 16,
- SLI4_MQ_NUM_MASK = 0x3fff0000,
- };
- static inline u32
- sli_format_mq_db_data(u16 id) {
- u32 reg;
- reg = id & SLI4_MQ_ID_MASK;
- reg |= (1 << SLI4_MQ_NUM_SHIFT) & SLI4_MQ_NUM_MASK;
- return reg;
- }
- /* RQ_DOORBELL - RQ Doorbell Register */
- #define SLI4_RQ_DB_REG 0x0a0
- #define SLI4_IF6_RQ_DB_REG 0x0080
- enum sli4_rq_e {
- SLI4_RQ_DB_ID_MASK = 0xffff,
- SLI4_RQ_DB_NUM_SHIFT = 16,
- SLI4_RQ_DB_NUM_MASK = 0x3fff0000,
- };
- static inline u32
- sli_format_rq_db_data(u16 id) {
- u32 reg;
- reg = id & SLI4_RQ_DB_ID_MASK;
- reg |= (1 << SLI4_RQ_DB_NUM_SHIFT) & SLI4_RQ_DB_NUM_MASK;
- return reg;
- }
- /* WQ_DOORBELL - WQ Doorbell Register */
- #define SLI4_IO_WQ_DB_REG 0x040
- #define SLI4_IF6_WQ_DB_REG 0x040
- enum sli4_wq_e {
- SLI4_WQ_ID_MASK = 0xffff,
- SLI4_WQ_IDX_SHIFT = 16,
- SLI4_WQ_IDX_MASK = 0xff0000,
- SLI4_WQ_NUM_SHIFT = 24,
- SLI4_WQ_NUM_MASK = 0x0ff00000,
- };
- static inline u32
- sli_format_wq_db_data(u16 id) {
- u32 reg;
- reg = id & SLI4_WQ_ID_MASK;
- reg |= (1 << SLI4_WQ_NUM_SHIFT) & SLI4_WQ_NUM_MASK;
- return reg;
- }
- /* SLIPORT_STATUS - SLI Port Status Register */
- #define SLI4_PORT_STATUS_REGOFF 0x0404
- enum sli4_port_status {
- SLI4_PORT_STATUS_FDP = 1u << 21,
- SLI4_PORT_STATUS_RDY = 1u << 23,
- SLI4_PORT_STATUS_RN = 1u << 24,
- SLI4_PORT_STATUS_DIP = 1u << 25,
- SLI4_PORT_STATUS_OTI = 1u << 29,
- SLI4_PORT_STATUS_ERR = 1u << 31,
- };
- #define SLI4_PHYDEV_CTRL_REG 0x0414
- #define SLI4_PHYDEV_CTRL_FRST (1 << 1)
- #define SLI4_PHYDEV_CTRL_DD (1 << 2)
- /* Register name enums */
- enum sli4_regname_en {
- SLI4_REG_BMBX,
- SLI4_REG_EQ_DOORBELL,
- SLI4_REG_CQ_DOORBELL,
- SLI4_REG_RQ_DOORBELL,
- SLI4_REG_IO_WQ_DOORBELL,
- SLI4_REG_MQ_DOORBELL,
- SLI4_REG_PHYSDEV_CONTROL,
- SLI4_REG_PORT_CONTROL,
- SLI4_REG_PORT_ERROR1,
- SLI4_REG_PORT_ERROR2,
- SLI4_REG_PORT_SEMAPHORE,
- SLI4_REG_PORT_STATUS,
- SLI4_REG_UNKWOWN /* must be last */
- };
- struct sli4_reg {
- u32 rset;
- u32 off;
- };
- struct sli4_dmaaddr {
- __le32 low;
- __le32 high;
- };
- /*
- * a 3-word Buffer Descriptor Entry with
- * address 1st 2 words, length last word
- */
- struct sli4_bufptr {
- struct sli4_dmaaddr addr;
- __le32 length;
- };
- /* Buffer Descriptor Entry (BDE) */
- enum sli4_bde_e {
- SLI4_BDE_LEN_MASK = 0x00ffffff,
- SLI4_BDE_TYPE_MASK = 0xff000000,
- };
- struct sli4_bde {
- __le32 bde_type_buflen;
- union {
- struct sli4_dmaaddr data;
- struct {
- __le32 offset;
- __le32 rsvd2;
- } imm;
- struct sli4_dmaaddr blp;
- } u;
- };
- /* Buffer Descriptors */
- enum sli4_bde_type {
- SLI4_BDE_TYPE_SHIFT = 24,
- SLI4_BDE_TYPE_64 = 0x00, /* Generic 64-bit data */
- SLI4_BDE_TYPE_IMM = 0x01, /* Immediate data */
- SLI4_BDE_TYPE_BLP = 0x40, /* Buffer List Pointer */
- };
- #define SLI4_BDE_TYPE_VAL(type) \
- (SLI4_BDE_TYPE_##type << SLI4_BDE_TYPE_SHIFT)
- /* Scatter-Gather Entry (SGE) */
- #define SLI4_SGE_MAX_RESERVED 3
- enum sli4_sge_type {
- /* DW2 */
- SLI4_SGE_DATA_OFFSET_MASK = 0x07ffffff,
- /*DW2W1*/
- SLI4_SGE_TYPE_SHIFT = 27,
- SLI4_SGE_TYPE_MASK = 0x78000000,
- /*SGE Types*/
- SLI4_SGE_TYPE_DATA = 0x00,
- SLI4_SGE_TYPE_DIF = 0x04, /* Data Integrity Field */
- SLI4_SGE_TYPE_LSP = 0x05, /* List Segment Pointer */
- SLI4_SGE_TYPE_PEDIF = 0x06, /* Post Encryption Engine DIF */
- SLI4_SGE_TYPE_PESEED = 0x07, /* Post Encryption DIF Seed */
- SLI4_SGE_TYPE_DISEED = 0x08, /* DIF Seed */
- SLI4_SGE_TYPE_ENC = 0x09, /* Encryption */
- SLI4_SGE_TYPE_ATM = 0x0a, /* DIF Application Tag Mask */
- SLI4_SGE_TYPE_SKIP = 0x0c, /* SKIP */
- SLI4_SGE_LAST = 1u << 31,
- };
- struct sli4_sge {
- __le32 buffer_address_high;
- __le32 buffer_address_low;
- __le32 dw2_flags;
- __le32 buffer_length;
- };
- /* T10 DIF Scatter-Gather Entry (SGE) */
- struct sli4_dif_sge {
- __le32 buffer_address_high;
- __le32 buffer_address_low;
- __le32 dw2_flags;
- __le32 rsvd12;
- };
- /* Data Integrity Seed (DISEED) SGE */
- enum sli4_diseed_sge_flags {
- /* DW2W1 */
- SLI4_DISEED_SGE_HS = 1 << 2,
- SLI4_DISEED_SGE_WS = 1 << 3,
- SLI4_DISEED_SGE_IC = 1 << 4,
- SLI4_DISEED_SGE_ICS = 1 << 5,
- SLI4_DISEED_SGE_ATRT = 1 << 6,
- SLI4_DISEED_SGE_AT = 1 << 7,
- SLI4_DISEED_SGE_FAT = 1 << 8,
- SLI4_DISEED_SGE_NA = 1 << 9,
- SLI4_DISEED_SGE_HI = 1 << 10,
- /* DW3W1 */
- SLI4_DISEED_SGE_BS_MASK = 0x0007,
- SLI4_DISEED_SGE_AI = 1 << 3,
- SLI4_DISEED_SGE_ME = 1 << 4,
- SLI4_DISEED_SGE_RE = 1 << 5,
- SLI4_DISEED_SGE_CE = 1 << 6,
- SLI4_DISEED_SGE_NR = 1 << 7,
- SLI4_DISEED_SGE_OP_RX_SHIFT = 8,
- SLI4_DISEED_SGE_OP_RX_MASK = 0x0f00,
- SLI4_DISEED_SGE_OP_TX_SHIFT = 12,
- SLI4_DISEED_SGE_OP_TX_MASK = 0xf000,
- };
- /* Opcode values */
- enum sli4_diseed_sge_opcodes {
- SLI4_DISEED_SGE_OP_IN_NODIF_OUT_CRC,
- SLI4_DISEED_SGE_OP_IN_CRC_OUT_NODIF,
- SLI4_DISEED_SGE_OP_IN_NODIF_OUT_CSUM,
- SLI4_DISEED_SGE_OP_IN_CSUM_OUT_NODIF,
- SLI4_DISEED_SGE_OP_IN_CRC_OUT_CRC,
- SLI4_DISEED_SGE_OP_IN_CSUM_OUT_CSUM,
- SLI4_DISEED_SGE_OP_IN_CRC_OUT_CSUM,
- SLI4_DISEED_SGE_OP_IN_CSUM_OUT_CRC,
- SLI4_DISEED_SGE_OP_IN_RAW_OUT_RAW,
- };
- #define SLI4_DISEED_SGE_OP_RX_VALUE(stype) \
- (SLI4_DISEED_SGE_OP_##stype << SLI4_DISEED_SGE_OP_RX_SHIFT)
- #define SLI4_DISEED_SGE_OP_TX_VALUE(stype) \
- (SLI4_DISEED_SGE_OP_##stype << SLI4_DISEED_SGE_OP_TX_SHIFT)
- struct sli4_diseed_sge {
- __le32 ref_tag_cmp;
- __le32 ref_tag_repl;
- __le16 app_tag_repl;
- __le16 dw2w1_flags;
- __le16 app_tag_cmp;
- __le16 dw3w1_flags;
- };
- /* List Segment Pointer Scatter-Gather Entry (SGE) */
- #define SLI4_LSP_SGE_SEGLEN 0x00ffffff
- struct sli4_lsp_sge {
- __le32 buffer_address_high;
- __le32 buffer_address_low;
- __le32 dw2_flags;
- __le32 dw3_seglen;
- };
- enum sli4_eqe_e {
- SLI4_EQE_VALID = 1,
- SLI4_EQE_MJCODE = 0xe,
- SLI4_EQE_MNCODE = 0xfff0,
- };
- struct sli4_eqe {
- __le16 dw0w0_flags;
- __le16 resource_id;
- };
- #define SLI4_MAJOR_CODE_STANDARD 0
- #define SLI4_MAJOR_CODE_SENTINEL 1
- /* Sentinel EQE indicating the EQ is full */
- #define SLI4_EQE_STATUS_EQ_FULL 2
- enum sli4_mcqe_e {
- SLI4_MCQE_CONSUMED = 1u << 27,
- SLI4_MCQE_COMPLETED = 1u << 28,
- SLI4_MCQE_AE = 1u << 30,
- SLI4_MCQE_VALID = 1u << 31,
- };
- /* Entry was consumed but not completed */
- #define SLI4_MCQE_STATUS_NOT_COMPLETED -2
- struct sli4_mcqe {
- __le16 completion_status;
- __le16 extended_status;
- __le32 mqe_tag_low;
- __le32 mqe_tag_high;
- __le32 dw3_flags;
- };
- enum sli4_acqe_e {
- SLI4_ACQE_AE = 1 << 6, /* async event - this is an ACQE */
- SLI4_ACQE_VAL = 1 << 7, /* valid - contents of CQE are valid */
- };
- struct sli4_acqe {
- __le32 event_data[3];
- u8 rsvd12;
- u8 event_code;
- u8 event_type;
- u8 ae_val;
- };
- enum sli4_acqe_event_code {
- SLI4_ACQE_EVENT_CODE_LINK_STATE = 0x01,
- SLI4_ACQE_EVENT_CODE_FIP = 0x02,
- SLI4_ACQE_EVENT_CODE_DCBX = 0x03,
- SLI4_ACQE_EVENT_CODE_ISCSI = 0x04,
- SLI4_ACQE_EVENT_CODE_GRP_5 = 0x05,
- SLI4_ACQE_EVENT_CODE_FC_LINK_EVENT = 0x10,
- SLI4_ACQE_EVENT_CODE_SLI_PORT_EVENT = 0x11,
- SLI4_ACQE_EVENT_CODE_VF_EVENT = 0x12,
- SLI4_ACQE_EVENT_CODE_MR_EVENT = 0x13,
- };
- enum sli4_qtype {
- SLI4_QTYPE_EQ,
- SLI4_QTYPE_CQ,
- SLI4_QTYPE_MQ,
- SLI4_QTYPE_WQ,
- SLI4_QTYPE_RQ,
- SLI4_QTYPE_MAX, /* must be last */
- };
- #define SLI4_USER_MQ_COUNT 1
- #define SLI4_MAX_CQ_SET_COUNT 16
- #define SLI4_MAX_RQ_SET_COUNT 16
- enum sli4_qentry {
- SLI4_QENTRY_ASYNC,
- SLI4_QENTRY_MQ,
- SLI4_QENTRY_RQ,
- SLI4_QENTRY_WQ,
- SLI4_QENTRY_WQ_RELEASE,
- SLI4_QENTRY_OPT_WRITE_CMD,
- SLI4_QENTRY_OPT_WRITE_DATA,
- SLI4_QENTRY_XABT,
- SLI4_QENTRY_MAX /* must be last */
- };
- enum sli4_queue_flags {
- SLI4_QUEUE_FLAG_MQ = 1 << 0, /* CQ has MQ/Async completion */
- SLI4_QUEUE_FLAG_HDR = 1 << 1, /* RQ for packet headers */
- SLI4_QUEUE_FLAG_RQBATCH = 1 << 2, /* RQ index increment by 8 */
- };
- /* Generic Command Request header */
- enum sli4_cmd_version {
- CMD_V0,
- CMD_V1,
- CMD_V2,
- };
- struct sli4_rqst_hdr {
- u8 opcode;
- u8 subsystem;
- __le16 rsvd2;
- __le32 timeout;
- __le32 request_length;
- __le32 dw3_version;
- };
- /* Generic Command Response header */
- struct sli4_rsp_hdr {
- u8 opcode;
- u8 subsystem;
- __le16 rsvd2;
- u8 status;
- u8 additional_status;
- __le16 rsvd6;
- __le32 response_length;
- __le32 actual_response_length;
- };
- #define SLI4_QUEUE_RQ_BATCH 8
- #define SZ_DMAADDR sizeof(struct sli4_dmaaddr)
- #define SLI4_RQST_CMDSZ(stype) sizeof(struct sli4_rqst_##stype)
- #define SLI4_RQST_PYLD_LEN(stype) \
- cpu_to_le32(sizeof(struct sli4_rqst_##stype) - \
- sizeof(struct sli4_rqst_hdr))
- #define SLI4_RQST_PYLD_LEN_VAR(stype, varpyld) \
- cpu_to_le32((sizeof(struct sli4_rqst_##stype) + \
- varpyld) - sizeof(struct sli4_rqst_hdr))
- #define SLI4_CFG_PYLD_LENGTH(stype) \
- max(sizeof(struct sli4_rqst_##stype), \
- sizeof(struct sli4_rsp_##stype))
- enum sli4_create_cqv2_e {
- /* DW5_flags values*/
- SLI4_CREATE_CQV2_CLSWM_MASK = 0x00003000,
- SLI4_CREATE_CQV2_NODELAY = 0x00004000,
- SLI4_CREATE_CQV2_AUTOVALID = 0x00008000,
- SLI4_CREATE_CQV2_CQECNT_MASK = 0x18000000,
- SLI4_CREATE_CQV2_VALID = 0x20000000,
- SLI4_CREATE_CQV2_EVT = 0x80000000,
- /* DW6W1_flags values*/
- SLI4_CREATE_CQV2_ARM = 0x8000,
- };
- struct sli4_rqst_cmn_create_cq_v2 {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- u8 page_size;
- u8 rsvd19;
- __le32 dw5_flags;
- __le16 eq_id;
- __le16 dw6w1_arm;
- __le16 cqe_count;
- __le16 rsvd30;
- __le32 rsvd32;
- struct sli4_dmaaddr page_phys_addr[];
- };
- enum sli4_create_cqset_e {
- /* DW5_flags values*/
- SLI4_CREATE_CQSETV0_CLSWM_MASK = 0x00003000,
- SLI4_CREATE_CQSETV0_NODELAY = 0x00004000,
- SLI4_CREATE_CQSETV0_AUTOVALID = 0x00008000,
- SLI4_CREATE_CQSETV0_CQECNT_MASK = 0x18000000,
- SLI4_CREATE_CQSETV0_VALID = 0x20000000,
- SLI4_CREATE_CQSETV0_EVT = 0x80000000,
- /* DW5W1_flags values */
- SLI4_CREATE_CQSETV0_CQE_COUNT = 0x7fff,
- SLI4_CREATE_CQSETV0_ARM = 0x8000,
- };
- struct sli4_rqst_cmn_create_cq_set_v0 {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- u8 page_size;
- u8 rsvd19;
- __le32 dw5_flags;
- __le16 num_cq_req;
- __le16 dw6w1_flags;
- __le16 eq_id[16];
- struct sli4_dmaaddr page_phys_addr[];
- };
- /* CQE count */
- enum sli4_cq_cnt {
- SLI4_CQ_CNT_256,
- SLI4_CQ_CNT_512,
- SLI4_CQ_CNT_1024,
- SLI4_CQ_CNT_LARGE,
- };
- #define SLI4_CQ_CNT_SHIFT 27
- #define SLI4_CQ_CNT_VAL(type) (SLI4_CQ_CNT_##type << SLI4_CQ_CNT_SHIFT)
- #define SLI4_CQE_BYTES (4 * sizeof(u32))
- #define SLI4_CREATE_CQV2_MAX_PAGES 8
- /* Generic Common Create EQ/CQ/MQ/WQ/RQ Queue completion */
- struct sli4_rsp_cmn_create_queue {
- struct sli4_rsp_hdr hdr;
- __le16 q_id;
- u8 rsvd18;
- u8 ulp;
- __le32 db_offset;
- __le16 db_rs;
- __le16 db_fmt;
- };
- struct sli4_rsp_cmn_create_queue_set {
- struct sli4_rsp_hdr hdr;
- __le16 q_id;
- __le16 num_q_allocated;
- };
- /* Common Destroy Queue */
- struct sli4_rqst_cmn_destroy_q {
- struct sli4_rqst_hdr hdr;
- __le16 q_id;
- __le16 rsvd;
- };
- struct sli4_rsp_cmn_destroy_q {
- struct sli4_rsp_hdr hdr;
- };
- /* Modify the delay multiplier for EQs */
- struct sli4_eqdelay_rec {
- __le32 eq_id;
- __le32 phase;
- __le32 delay_multiplier;
- };
- struct sli4_rqst_cmn_modify_eq_delay {
- struct sli4_rqst_hdr hdr;
- __le32 num_eq;
- struct sli4_eqdelay_rec eq_delay_record[8];
- };
- struct sli4_rsp_cmn_modify_eq_delay {
- struct sli4_rsp_hdr hdr;
- };
- enum sli4_create_cq_e {
- /* DW5 */
- SLI4_CREATE_EQ_AUTOVALID = 1u << 28,
- SLI4_CREATE_EQ_VALID = 1u << 29,
- SLI4_CREATE_EQ_EQESZ = 1u << 31,
- /* DW6 */
- SLI4_CREATE_EQ_COUNT = 7 << 26,
- SLI4_CREATE_EQ_ARM = 1u << 31,
- /* DW7 */
- SLI4_CREATE_EQ_DELAYMULTI_SHIFT = 13,
- SLI4_CREATE_EQ_DELAYMULTI_MASK = 0x007fe000,
- SLI4_CREATE_EQ_DELAYMULTI = 0x00040000,
- };
- struct sli4_rqst_cmn_create_eq {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- __le16 rsvd18;
- __le32 dw5_flags;
- __le32 dw6_flags;
- __le32 dw7_delaymulti;
- __le32 rsvd32;
- struct sli4_dmaaddr page_address[8];
- };
- struct sli4_rsp_cmn_create_eq {
- struct sli4_rsp_cmn_create_queue q_rsp;
- };
- /* EQ count */
- enum sli4_eq_cnt {
- SLI4_EQ_CNT_256,
- SLI4_EQ_CNT_512,
- SLI4_EQ_CNT_1024,
- SLI4_EQ_CNT_2048,
- SLI4_EQ_CNT_4096 = 3,
- };
- #define SLI4_EQ_CNT_SHIFT 26
- #define SLI4_EQ_CNT_VAL(type) (SLI4_EQ_CNT_##type << SLI4_EQ_CNT_SHIFT)
- #define SLI4_EQE_SIZE_4 0
- #define SLI4_EQE_SIZE_16 1
- /* Create a Mailbox Queue; accommodate v0 and v1 forms. */
- enum sli4_create_mq_flags {
- /* DW6W1 */
- SLI4_CREATE_MQEXT_RINGSIZE = 0xf,
- SLI4_CREATE_MQEXT_CQID_SHIFT = 6,
- SLI4_CREATE_MQEXT_CQIDV0_MASK = 0xffc0,
- /* DW7 */
- SLI4_CREATE_MQEXT_VAL = 1u << 31,
- /* DW8 */
- SLI4_CREATE_MQEXT_ACQV = 1u << 0,
- SLI4_CREATE_MQEXT_ASYNC_CQIDV0 = 0x7fe,
- };
- struct sli4_rqst_cmn_create_mq_ext {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- __le16 cq_id_v1;
- __le32 async_event_bitmap;
- __le16 async_cq_id_v1;
- __le16 dw6w1_flags;
- __le32 dw7_val;
- __le32 dw8_flags;
- __le32 rsvd36;
- struct sli4_dmaaddr page_phys_addr[];
- };
- struct sli4_rsp_cmn_create_mq_ext {
- struct sli4_rsp_cmn_create_queue q_rsp;
- };
- enum sli4_mqe_size {
- SLI4_MQE_SIZE_16 = 0x05,
- SLI4_MQE_SIZE_32,
- SLI4_MQE_SIZE_64,
- SLI4_MQE_SIZE_128,
- };
- enum sli4_async_evt {
- SLI4_ASYNC_EVT_LINK_STATE = 1 << 1,
- SLI4_ASYNC_EVT_FIP = 1 << 2,
- SLI4_ASYNC_EVT_GRP5 = 1 << 5,
- SLI4_ASYNC_EVT_FC = 1 << 16,
- SLI4_ASYNC_EVT_SLI_PORT = 1 << 17,
- };
- #define SLI4_ASYNC_EVT_FC_ALL \
- (SLI4_ASYNC_EVT_LINK_STATE | \
- SLI4_ASYNC_EVT_FIP | \
- SLI4_ASYNC_EVT_GRP5 | \
- SLI4_ASYNC_EVT_FC | \
- SLI4_ASYNC_EVT_SLI_PORT)
- /* Create a Completion Queue. */
- struct sli4_rqst_cmn_create_cq_v0 {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- __le16 rsvd18;
- __le32 dw5_flags;
- __le32 dw6_flags;
- __le32 rsvd28;
- __le32 rsvd32;
- struct sli4_dmaaddr page_phys_addr[];
- };
- enum sli4_create_rq_e {
- SLI4_RQ_CREATE_DUA = 0x1,
- SLI4_RQ_CREATE_BQU = 0x2,
- SLI4_RQE_SIZE = 8,
- SLI4_RQE_SIZE_8 = 0x2,
- SLI4_RQE_SIZE_16 = 0x3,
- SLI4_RQE_SIZE_32 = 0x4,
- SLI4_RQE_SIZE_64 = 0x5,
- SLI4_RQE_SIZE_128 = 0x6,
- SLI4_RQ_PAGE_SIZE_4096 = 0x1,
- SLI4_RQ_PAGE_SIZE_8192 = 0x2,
- SLI4_RQ_PAGE_SIZE_16384 = 0x4,
- SLI4_RQ_PAGE_SIZE_32768 = 0x8,
- SLI4_RQ_PAGE_SIZE_64536 = 0x10,
- SLI4_RQ_CREATE_V0_MAX_PAGES = 8,
- SLI4_RQ_CREATE_V0_MIN_BUF_SIZE = 128,
- SLI4_RQ_CREATE_V0_MAX_BUF_SIZE = 2048,
- };
- struct sli4_rqst_rq_create {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- u8 dua_bqu_byte;
- u8 ulp;
- __le16 rsvd16;
- u8 rqe_count_byte;
- u8 rsvd19;
- __le32 rsvd20;
- __le16 buffer_size;
- __le16 cq_id;
- __le32 rsvd28;
- struct sli4_dmaaddr page_phys_addr[SLI4_RQ_CREATE_V0_MAX_PAGES];
- };
- struct sli4_rsp_rq_create {
- struct sli4_rsp_cmn_create_queue rsp;
- };
- enum sli4_create_rqv1_e {
- SLI4_RQ_CREATE_V1_DNB = 0x80,
- SLI4_RQ_CREATE_V1_MAX_PAGES = 8,
- SLI4_RQ_CREATE_V1_MIN_BUF_SIZE = 64,
- SLI4_RQ_CREATE_V1_MAX_BUF_SIZE = 2048,
- };
- struct sli4_rqst_rq_create_v1 {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- u8 rsvd14;
- u8 dim_dfd_dnb;
- u8 page_size;
- u8 rqe_size_byte;
- __le16 rqe_count;
- __le32 rsvd20;
- __le16 rsvd24;
- __le16 cq_id;
- __le32 buffer_size;
- struct sli4_dmaaddr page_phys_addr[SLI4_RQ_CREATE_V1_MAX_PAGES];
- };
- struct sli4_rsp_rq_create_v1 {
- struct sli4_rsp_cmn_create_queue rsp;
- };
- #define SLI4_RQCREATEV2_DNB 0x80
- struct sli4_rqst_rq_create_v2 {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- u8 rq_count;
- u8 dim_dfd_dnb;
- u8 page_size;
- u8 rqe_size_byte;
- __le16 rqe_count;
- __le16 hdr_buffer_size;
- __le16 payload_buffer_size;
- __le16 base_cq_id;
- __le16 rsvd26;
- __le32 rsvd42;
- struct sli4_dmaaddr page_phys_addr[];
- };
- struct sli4_rsp_rq_create_v2 {
- struct sli4_rsp_cmn_create_queue rsp;
- };
- #define SLI4_CQE_CODE_OFFSET 14
- enum sli4_cqe_code {
- SLI4_CQE_CODE_WORK_REQUEST_COMPLETION = 0x01,
- SLI4_CQE_CODE_RELEASE_WQE,
- SLI4_CQE_CODE_RSVD,
- SLI4_CQE_CODE_RQ_ASYNC,
- SLI4_CQE_CODE_XRI_ABORTED,
- SLI4_CQE_CODE_RQ_COALESCING,
- SLI4_CQE_CODE_RQ_CONSUMPTION,
- SLI4_CQE_CODE_MEASUREMENT_REPORTING,
- SLI4_CQE_CODE_RQ_ASYNC_V1,
- SLI4_CQE_CODE_RQ_COALESCING_V1,
- SLI4_CQE_CODE_OPTIMIZED_WRITE_CMD,
- SLI4_CQE_CODE_OPTIMIZED_WRITE_DATA,
- };
- #define SLI4_WQ_CREATE_MAX_PAGES 8
- struct sli4_rqst_wq_create {
- struct sli4_rqst_hdr hdr;
- __le16 num_pages;
- __le16 cq_id;
- u8 page_size;
- u8 wqe_size_byte;
- __le16 wqe_count;
- __le32 rsvd;
- struct sli4_dmaaddr page_phys_addr[SLI4_WQ_CREATE_MAX_PAGES];
- };
- struct sli4_rsp_wq_create {
- struct sli4_rsp_cmn_create_queue rsp;
- };
- enum sli4_link_attention_flags {
- SLI4_LNK_ATTN_TYPE_LINK_UP = 0x01,
- SLI4_LNK_ATTN_TYPE_LINK_DOWN = 0x02,
- SLI4_LNK_ATTN_TYPE_NO_HARD_ALPA = 0x03,
- SLI4_LNK_ATTN_P2P = 0x01,
- SLI4_LNK_ATTN_FC_AL = 0x02,
- SLI4_LNK_ATTN_INTERNAL_LOOPBACK = 0x03,
- SLI4_LNK_ATTN_SERDES_LOOPBACK = 0x04,
- };
- struct sli4_link_attention {
- u8 link_number;
- u8 attn_type;
- u8 topology;
- u8 port_speed;
- u8 port_fault;
- u8 shared_link_status;
- __le16 logical_link_speed;
- __le32 event_tag;
- u8 rsvd12;
- u8 event_code;
- u8 event_type;
- u8 flags;
- };
- enum sli4_link_event_type {
- SLI4_EVENT_LINK_ATTENTION = 0x01,
- SLI4_EVENT_SHARED_LINK_ATTENTION = 0x02,
- };
- enum sli4_wcqe_flags {
- SLI4_WCQE_XB = 0x10,
- SLI4_WCQE_QX = 0x80,
- };
- struct sli4_fc_wcqe {
- u8 hw_status;
- u8 status;
- __le16 request_tag;
- __le32 wqe_specific_1;
- __le32 wqe_specific_2;
- u8 rsvd12;
- u8 qx_byte;
- u8 code;
- u8 flags;
- };
- /* FC WQ consumed CQ queue entry */
- struct sli4_fc_wqec {
- __le32 rsvd0;
- __le32 rsvd1;
- __le16 wqe_index;
- __le16 wq_id;
- __le16 rsvd12;
- u8 code;
- u8 vld_byte;
- };
- /* FC Completion Status Codes. */
- enum sli4_wcqe_status {
- SLI4_FC_WCQE_STATUS_SUCCESS,
- SLI4_FC_WCQE_STATUS_FCP_RSP_FAILURE,
- SLI4_FC_WCQE_STATUS_REMOTE_STOP,
- SLI4_FC_WCQE_STATUS_LOCAL_REJECT,
- SLI4_FC_WCQE_STATUS_NPORT_RJT,
- SLI4_FC_WCQE_STATUS_FABRIC_RJT,
- SLI4_FC_WCQE_STATUS_NPORT_BSY,
- SLI4_FC_WCQE_STATUS_FABRIC_BSY,
- SLI4_FC_WCQE_STATUS_RSVD,
- SLI4_FC_WCQE_STATUS_LS_RJT,
- SLI4_FC_WCQE_STATUS_RX_BUF_OVERRUN,
- SLI4_FC_WCQE_STATUS_CMD_REJECT,
- SLI4_FC_WCQE_STATUS_FCP_TGT_LENCHECK,
- SLI4_FC_WCQE_STATUS_RSVD1,
- SLI4_FC_WCQE_STATUS_ELS_CMPLT_NO_AUTOREG,
- SLI4_FC_WCQE_STATUS_RSVD2,
- SLI4_FC_WCQE_STATUS_RQ_SUCCESS,
- SLI4_FC_WCQE_STATUS_RQ_BUF_LEN_EXCEEDED,
- SLI4_FC_WCQE_STATUS_RQ_INSUFF_BUF_NEEDED,
- SLI4_FC_WCQE_STATUS_RQ_INSUFF_FRM_DISC,
- SLI4_FC_WCQE_STATUS_RQ_DMA_FAILURE,
- SLI4_FC_WCQE_STATUS_FCP_RSP_TRUNCATE,
- SLI4_FC_WCQE_STATUS_DI_ERROR,
- SLI4_FC_WCQE_STATUS_BA_RJT,
- SLI4_FC_WCQE_STATUS_RQ_INSUFF_XRI_NEEDED,
- SLI4_FC_WCQE_STATUS_RQ_INSUFF_XRI_DISC,
- SLI4_FC_WCQE_STATUS_RX_ERROR_DETECT,
- SLI4_FC_WCQE_STATUS_RX_ABORT_REQUEST,
- /* driver generated status codes */
- SLI4_FC_WCQE_STATUS_DISPATCH_ERROR = 0xfd,
- SLI4_FC_WCQE_STATUS_SHUTDOWN = 0xfe,
- SLI4_FC_WCQE_STATUS_TARGET_WQE_TIMEOUT = 0xff,
- };
- /* DI_ERROR Extended Status */
- enum sli4_fc_di_error_status {
- SLI4_FC_DI_ERROR_GE = 1 << 0,
- SLI4_FC_DI_ERROR_AE = 1 << 1,
- SLI4_FC_DI_ERROR_RE = 1 << 2,
- SLI4_FC_DI_ERROR_TDPV = 1 << 3,
- SLI4_FC_DI_ERROR_UDB = 1 << 4,
- SLI4_FC_DI_ERROR_EDIR = 1 << 5,
- };
- /* WQE DIF field contents */
- enum sli4_dif_fields {
- SLI4_DIF_DISABLED,
- SLI4_DIF_PASS_THROUGH,
- SLI4_DIF_STRIP,
- SLI4_DIF_INSERT,
- };
- /* Work Queue Entry (WQE) types */
- enum sli4_wqe_types {
- SLI4_WQE_ABORT = 0x0f,
- SLI4_WQE_ELS_REQUEST64 = 0x8a,
- SLI4_WQE_FCP_IBIDIR64 = 0xac,
- SLI4_WQE_FCP_IREAD64 = 0x9a,
- SLI4_WQE_FCP_IWRITE64 = 0x98,
- SLI4_WQE_FCP_ICMND64 = 0x9c,
- SLI4_WQE_FCP_TRECEIVE64 = 0xa1,
- SLI4_WQE_FCP_CONT_TRECEIVE64 = 0xe5,
- SLI4_WQE_FCP_TRSP64 = 0xa3,
- SLI4_WQE_FCP_TSEND64 = 0x9f,
- SLI4_WQE_GEN_REQUEST64 = 0xc2,
- SLI4_WQE_SEND_FRAME = 0xe1,
- SLI4_WQE_XMIT_BCAST64 = 0x84,
- SLI4_WQE_XMIT_BLS_RSP = 0x97,
- SLI4_WQE_ELS_RSP64 = 0x95,
- SLI4_WQE_XMIT_SEQUENCE64 = 0x82,
- SLI4_WQE_REQUEUE_XRI = 0x93,
- };
- /* WQE command types */
- enum sli4_wqe_cmds {
- SLI4_CMD_FCP_IREAD64_WQE = 0x00,
- SLI4_CMD_FCP_ICMND64_WQE = 0x00,
- SLI4_CMD_FCP_IWRITE64_WQE = 0x01,
- SLI4_CMD_FCP_TRECEIVE64_WQE = 0x02,
- SLI4_CMD_FCP_TRSP64_WQE = 0x03,
- SLI4_CMD_FCP_TSEND64_WQE = 0x07,
- SLI4_CMD_GEN_REQUEST64_WQE = 0x08,
- SLI4_CMD_XMIT_BCAST64_WQE = 0x08,
- SLI4_CMD_XMIT_BLS_RSP64_WQE = 0x08,
- SLI4_CMD_ABORT_WQE = 0x08,
- SLI4_CMD_XMIT_SEQUENCE64_WQE = 0x08,
- SLI4_CMD_REQUEUE_XRI_WQE = 0x0a,
- SLI4_CMD_SEND_FRAME_WQE = 0x0a,
- };
- #define SLI4_WQE_SIZE 0x05
- #define SLI4_WQE_EXT_SIZE 0x06
- #define SLI4_WQE_BYTES (16 * sizeof(u32))
- #define SLI4_WQE_EXT_BYTES (32 * sizeof(u32))
- /* Mask for ccp (CS_CTL) */
- #define SLI4_MASK_CCP 0xfe
- /* Generic WQE */
- enum sli4_gen_wqe_flags {
- SLI4_GEN_WQE_EBDECNT = 0xf,
- SLI4_GEN_WQE_LEN_LOC = 0x3 << 7,
- SLI4_GEN_WQE_QOSD = 1 << 9,
- SLI4_GEN_WQE_XBL = 1 << 11,
- SLI4_GEN_WQE_HLM = 1 << 12,
- SLI4_GEN_WQE_IOD = 1 << 13,
- SLI4_GEN_WQE_DBDE = 1 << 14,
- SLI4_GEN_WQE_WQES = 1 << 15,
- SLI4_GEN_WQE_PRI = 0x7,
- SLI4_GEN_WQE_PV = 1 << 3,
- SLI4_GEN_WQE_EAT = 1 << 4,
- SLI4_GEN_WQE_XC = 1 << 5,
- SLI4_GEN_WQE_CCPE = 1 << 7,
- SLI4_GEN_WQE_CMDTYPE = 0xf,
- SLI4_GEN_WQE_WQEC = 1 << 7,
- };
- struct sli4_generic_wqe {
- __le32 cmd_spec0_5[6];
- __le16 xri_tag;
- __le16 context_tag;
- u8 ct_byte;
- u8 command;
- u8 class_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 rsvd34;
- __le16 dw10w0_flags;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmdtype_wqec_byte;
- u8 rsvd41;
- __le16 cq_id;
- };
- /* WQE used to abort exchanges. */
- enum sli4_abort_wqe_flags {
- SLI4_ABRT_WQE_IR = 0x02,
- SLI4_ABRT_WQE_EBDECNT = 0xf,
- SLI4_ABRT_WQE_LEN_LOC = 0x3 << 7,
- SLI4_ABRT_WQE_QOSD = 1 << 9,
- SLI4_ABRT_WQE_XBL = 1 << 11,
- SLI4_ABRT_WQE_IOD = 1 << 13,
- SLI4_ABRT_WQE_DBDE = 1 << 14,
- SLI4_ABRT_WQE_WQES = 1 << 15,
- SLI4_ABRT_WQE_PRI = 0x7,
- SLI4_ABRT_WQE_PV = 1 << 3,
- SLI4_ABRT_WQE_EAT = 1 << 4,
- SLI4_ABRT_WQE_XC = 1 << 5,
- SLI4_ABRT_WQE_CCPE = 1 << 7,
- SLI4_ABRT_WQE_CMDTYPE = 0xf,
- SLI4_ABRT_WQE_WQEC = 1 << 7,
- };
- struct sli4_abort_wqe {
- __le32 rsvd0;
- __le32 rsvd4;
- __le32 ext_t_tag;
- u8 ia_ir_byte;
- u8 criteria;
- __le16 rsvd10;
- __le32 ext_t_mask;
- __le32 t_mask;
- __le16 xri_tag;
- __le16 context_tag;
- u8 ct_byte;
- u8 command;
- u8 class_byte;
- u8 timer;
- __le32 t_tag;
- __le16 request_tag;
- __le16 rsvd34;
- __le16 dw10w0_flags;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmdtype_wqec_byte;
- u8 rsvd41;
- __le16 cq_id;
- };
- enum sli4_abort_criteria {
- SLI4_ABORT_CRITERIA_XRI_TAG = 0x01,
- SLI4_ABORT_CRITERIA_ABORT_TAG,
- SLI4_ABORT_CRITERIA_REQUEST_TAG,
- SLI4_ABORT_CRITERIA_EXT_ABORT_TAG,
- };
- enum sli4_abort_type {
- SLI4_ABORT_XRI,
- SLI4_ABORT_ABORT_ID,
- SLI4_ABORT_REQUEST_ID,
- SLI4_ABORT_MAX, /* must be last */
- };
- /* WQE used to create an ELS request. */
- enum sli4_els_req_wqe_flags {
- SLI4_REQ_WQE_QOSD = 0x2,
- SLI4_REQ_WQE_DBDE = 0x40,
- SLI4_REQ_WQE_XBL = 0x8,
- SLI4_REQ_WQE_XC = 0x20,
- SLI4_REQ_WQE_IOD = 0x20,
- SLI4_REQ_WQE_HLM = 0x10,
- SLI4_REQ_WQE_CCPE = 0x80,
- SLI4_REQ_WQE_EAT = 0x10,
- SLI4_REQ_WQE_WQES = 0x80,
- SLI4_REQ_WQE_PU_SHFT = 4,
- SLI4_REQ_WQE_CT_SHFT = 2,
- SLI4_REQ_WQE_CT = 0xc,
- SLI4_REQ_WQE_ELSID_SHFT = 4,
- SLI4_REQ_WQE_SP_SHFT = 24,
- SLI4_REQ_WQE_LEN_LOC_BIT1 = 0x80,
- SLI4_REQ_WQE_LEN_LOC_BIT2 = 0x1,
- };
- struct sli4_els_request64_wqe {
- struct sli4_bde els_request_payload;
- __le32 els_request_payload_length;
- __le32 sid_sp_dword;
- __le32 remote_id_dword;
- __le16 xri_tag;
- __le16 context_tag;
- u8 ct_byte;
- u8 command;
- u8 class_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 temporary_rpi;
- u8 len_loc1_byte;
- u8 qosd_xbl_hlm_iod_dbde_wqes;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmdtype_elsid_byte;
- u8 rsvd41;
- __le16 cq_id;
- struct sli4_bde els_response_payload_bde;
- __le32 max_response_payload_length;
- };
- /* WQE used to create an FCP initiator no data command. */
- enum sli4_icmd_wqe_flags {
- SLI4_ICMD_WQE_DBDE = 0x40,
- SLI4_ICMD_WQE_XBL = 0x8,
- SLI4_ICMD_WQE_XC = 0x20,
- SLI4_ICMD_WQE_IOD = 0x20,
- SLI4_ICMD_WQE_HLM = 0x10,
- SLI4_ICMD_WQE_CCPE = 0x80,
- SLI4_ICMD_WQE_EAT = 0x10,
- SLI4_ICMD_WQE_APPID = 0x10,
- SLI4_ICMD_WQE_WQES = 0x80,
- SLI4_ICMD_WQE_PU_SHFT = 4,
- SLI4_ICMD_WQE_CT_SHFT = 2,
- SLI4_ICMD_WQE_BS_SHFT = 4,
- SLI4_ICMD_WQE_LEN_LOC_BIT1 = 0x80,
- SLI4_ICMD_WQE_LEN_LOC_BIT2 = 0x1,
- };
- struct sli4_fcp_icmnd64_wqe {
- struct sli4_bde bde;
- __le16 payload_offset_length;
- __le16 fcp_cmd_buffer_length;
- __le32 rsvd12;
- __le32 remote_n_port_id_dword;
- __le16 xri_tag;
- __le16 context_tag;
- u8 dif_ct_bs_byte;
- u8 command;
- u8 class_pu_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 rsvd34;
- u8 len_loc1_byte;
- u8 qosd_xbl_hlm_iod_dbde_wqes;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd41;
- __le16 cq_id;
- __le32 rsvd44;
- __le32 rsvd48;
- __le32 rsvd52;
- __le32 rsvd56;
- };
- /* WQE used to create an FCP initiator read. */
- enum sli4_ir_wqe_flags {
- SLI4_IR_WQE_DBDE = 0x40,
- SLI4_IR_WQE_XBL = 0x8,
- SLI4_IR_WQE_XC = 0x20,
- SLI4_IR_WQE_IOD = 0x20,
- SLI4_IR_WQE_HLM = 0x10,
- SLI4_IR_WQE_CCPE = 0x80,
- SLI4_IR_WQE_EAT = 0x10,
- SLI4_IR_WQE_APPID = 0x10,
- SLI4_IR_WQE_WQES = 0x80,
- SLI4_IR_WQE_PU_SHFT = 4,
- SLI4_IR_WQE_CT_SHFT = 2,
- SLI4_IR_WQE_BS_SHFT = 4,
- SLI4_IR_WQE_LEN_LOC_BIT1 = 0x80,
- SLI4_IR_WQE_LEN_LOC_BIT2 = 0x1,
- };
- struct sli4_fcp_iread64_wqe {
- struct sli4_bde bde;
- __le16 payload_offset_length;
- __le16 fcp_cmd_buffer_length;
- __le32 total_transfer_length;
- __le32 remote_n_port_id_dword;
- __le16 xri_tag;
- __le16 context_tag;
- u8 dif_ct_bs_byte;
- u8 command;
- u8 class_pu_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 rsvd34;
- u8 len_loc1_byte;
- u8 qosd_xbl_hlm_iod_dbde_wqes;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd41;
- __le16 cq_id;
- __le32 rsvd44;
- struct sli4_bde first_data_bde;
- };
- /* WQE used to create an FCP initiator write. */
- enum sli4_iwr_wqe_flags {
- SLI4_IWR_WQE_DBDE = 0x40,
- SLI4_IWR_WQE_XBL = 0x8,
- SLI4_IWR_WQE_XC = 0x20,
- SLI4_IWR_WQE_IOD = 0x20,
- SLI4_IWR_WQE_HLM = 0x10,
- SLI4_IWR_WQE_DNRX = 0x10,
- SLI4_IWR_WQE_CCPE = 0x80,
- SLI4_IWR_WQE_EAT = 0x10,
- SLI4_IWR_WQE_APPID = 0x10,
- SLI4_IWR_WQE_WQES = 0x80,
- SLI4_IWR_WQE_PU_SHFT = 4,
- SLI4_IWR_WQE_CT_SHFT = 2,
- SLI4_IWR_WQE_BS_SHFT = 4,
- SLI4_IWR_WQE_LEN_LOC_BIT1 = 0x80,
- SLI4_IWR_WQE_LEN_LOC_BIT2 = 0x1,
- };
- struct sli4_fcp_iwrite64_wqe {
- struct sli4_bde bde;
- __le16 payload_offset_length;
- __le16 fcp_cmd_buffer_length;
- __le16 total_transfer_length;
- __le16 initial_transfer_length;
- __le16 xri_tag;
- __le16 context_tag;
- u8 dif_ct_bs_byte;
- u8 command;
- u8 class_pu_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 rsvd34;
- u8 len_loc1_byte;
- u8 qosd_xbl_hlm_iod_dbde_wqes;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd41;
- __le16 cq_id;
- __le32 remote_n_port_id_dword;
- struct sli4_bde first_data_bde;
- };
- struct sli4_fcp_128byte_wqe {
- u32 dw[32];
- };
- /* WQE used to create an FCP target receive */
- enum sli4_trcv_wqe_flags {
- SLI4_TRCV_WQE_DBDE = 0x40,
- SLI4_TRCV_WQE_XBL = 0x8,
- SLI4_TRCV_WQE_AR = 0x8,
- SLI4_TRCV_WQE_XC = 0x20,
- SLI4_TRCV_WQE_IOD = 0x20,
- SLI4_TRCV_WQE_HLM = 0x10,
- SLI4_TRCV_WQE_DNRX = 0x10,
- SLI4_TRCV_WQE_CCPE = 0x80,
- SLI4_TRCV_WQE_EAT = 0x10,
- SLI4_TRCV_WQE_APPID = 0x10,
- SLI4_TRCV_WQE_WQES = 0x80,
- SLI4_TRCV_WQE_PU_SHFT = 4,
- SLI4_TRCV_WQE_CT_SHFT = 2,
- SLI4_TRCV_WQE_BS_SHFT = 4,
- SLI4_TRCV_WQE_LEN_LOC_BIT2 = 0x1,
- };
- struct sli4_fcp_treceive64_wqe {
- struct sli4_bde bde;
- __le32 payload_offset_length;
- __le32 relative_offset;
- union {
- __le16 sec_xri_tag;
- __le16 rsvd;
- __le32 dword;
- } dword5;
- __le16 xri_tag;
- __le16 context_tag;
- u8 dif_ct_bs_byte;
- u8 command;
- u8 class_ar_pu_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 remote_xid;
- u8 lloc1_appid;
- u8 qosd_xbl_hlm_iod_dbde_wqes;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd41;
- __le16 cq_id;
- __le32 fcp_data_receive_length;
- struct sli4_bde first_data_bde;
- };
- /* WQE used to create an FCP target response */
- enum sli4_trsp_wqe_flags {
- SLI4_TRSP_WQE_AG = 0x8,
- SLI4_TRSP_WQE_DBDE = 0x40,
- SLI4_TRSP_WQE_XBL = 0x8,
- SLI4_TRSP_WQE_XC = 0x20,
- SLI4_TRSP_WQE_HLM = 0x10,
- SLI4_TRSP_WQE_DNRX = 0x10,
- SLI4_TRSP_WQE_CCPE = 0x80,
- SLI4_TRSP_WQE_EAT = 0x10,
- SLI4_TRSP_WQE_APPID = 0x10,
- SLI4_TRSP_WQE_WQES = 0x80,
- };
- struct sli4_fcp_trsp64_wqe {
- struct sli4_bde bde;
- __le32 fcp_response_length;
- __le32 rsvd12;
- __le32 dword5;
- __le16 xri_tag;
- __le16 rpi;
- u8 ct_dnrx_byte;
- u8 command;
- u8 class_ag_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 remote_xid;
- u8 lloc1_appid;
- u8 qosd_xbl_hlm_dbde_wqes;
- u8 eat_xc_ccpe;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd41;
- __le16 cq_id;
- __le32 rsvd44;
- __le32 rsvd48;
- __le32 rsvd52;
- __le32 rsvd56;
- };
- /* WQE used to create an FCP target send (DATA IN). */
- enum sli4_tsend_wqe_flags {
- SLI4_TSEND_WQE_XBL = 0x8,
- SLI4_TSEND_WQE_DBDE = 0x40,
- SLI4_TSEND_WQE_IOD = 0x20,
- SLI4_TSEND_WQE_QOSD = 0x2,
- SLI4_TSEND_WQE_HLM = 0x10,
- SLI4_TSEND_WQE_PU_SHFT = 4,
- SLI4_TSEND_WQE_AR = 0x8,
- SLI4_TSEND_CT_SHFT = 2,
- SLI4_TSEND_BS_SHFT = 4,
- SLI4_TSEND_LEN_LOC_BIT2 = 0x1,
- SLI4_TSEND_CCPE = 0x80,
- SLI4_TSEND_APPID_VALID = 0x20,
- SLI4_TSEND_WQES = 0x80,
- SLI4_TSEND_XC = 0x20,
- SLI4_TSEND_EAT = 0x10,
- };
- struct sli4_fcp_tsend64_wqe {
- struct sli4_bde bde;
- __le32 payload_offset_length;
- __le32 relative_offset;
- __le32 dword5;
- __le16 xri_tag;
- __le16 rpi;
- u8 ct_byte;
- u8 command;
- u8 class_pu_ar_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 remote_xid;
- u8 dw10byte0;
- u8 ll_qd_xbl_hlm_iod_dbde;
- u8 dw10byte2;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd45;
- __le16 cq_id;
- __le32 fcp_data_transmit_length;
- struct sli4_bde first_data_bde;
- };
- /* WQE used to create a general request. */
- enum sli4_gen_req_wqe_flags {
- SLI4_GEN_REQ64_WQE_XBL = 0x8,
- SLI4_GEN_REQ64_WQE_DBDE = 0x40,
- SLI4_GEN_REQ64_WQE_IOD = 0x20,
- SLI4_GEN_REQ64_WQE_QOSD = 0x2,
- SLI4_GEN_REQ64_WQE_HLM = 0x10,
- SLI4_GEN_REQ64_CT_SHFT = 2,
- };
- struct sli4_gen_request64_wqe {
- struct sli4_bde bde;
- __le32 request_payload_length;
- __le32 relative_offset;
- u8 rsvd17;
- u8 df_ctl;
- u8 type;
- u8 r_ctl;
- __le16 xri_tag;
- __le16 context_tag;
- u8 ct_byte;
- u8 command;
- u8 class_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 rsvd34;
- u8 dw10flags0;
- u8 dw10flags1;
- u8 dw10flags2;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd41;
- __le16 cq_id;
- __le32 remote_n_port_id_dword;
- __le32 rsvd48;
- __le32 rsvd52;
- __le32 max_response_payload_length;
- };
- /* WQE used to create a send frame request */
- enum sli4_sf_wqe_flags {
- SLI4_SF_WQE_DBDE = 0x40,
- SLI4_SF_PU = 0x30,
- SLI4_SF_CT = 0xc,
- SLI4_SF_QOSD = 0x2,
- SLI4_SF_LEN_LOC_BIT1 = 0x80,
- SLI4_SF_LEN_LOC_BIT2 = 0x1,
- SLI4_SF_XC = 0x20,
- SLI4_SF_XBL = 0x8,
- };
- struct sli4_send_frame_wqe {
- struct sli4_bde bde;
- __le32 frame_length;
- __le32 fc_header_0_1[2];
- __le16 xri_tag;
- __le16 context_tag;
- u8 ct_byte;
- u8 command;
- u8 dw7flags0;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- u8 eof;
- u8 sof;
- u8 dw10flags0;
- u8 dw10flags1;
- u8 dw10flags2;
- u8 ccp;
- u8 cmd_type_byte;
- u8 rsvd41;
- __le16 cq_id;
- __le32 fc_header_2_5[4];
- };
- /* WQE used to create a transmit sequence */
- enum sli4_seq_wqe_flags {
- SLI4_SEQ_WQE_DBDE = 0x4000,
- SLI4_SEQ_WQE_XBL = 0x800,
- SLI4_SEQ_WQE_SI = 0x4,
- SLI4_SEQ_WQE_FT = 0x8,
- SLI4_SEQ_WQE_XO = 0x40,
- SLI4_SEQ_WQE_LS = 0x80,
- SLI4_SEQ_WQE_DIF = 0x3,
- SLI4_SEQ_WQE_BS = 0x70,
- SLI4_SEQ_WQE_PU = 0x30,
- SLI4_SEQ_WQE_HLM = 0x1000,
- SLI4_SEQ_WQE_IOD_SHIFT = 13,
- SLI4_SEQ_WQE_CT_SHIFT = 2,
- SLI4_SEQ_WQE_LEN_LOC_SHIFT = 7,
- };
- struct sli4_xmit_sequence64_wqe {
- struct sli4_bde bde;
- __le32 remote_n_port_id_dword;
- __le32 relative_offset;
- u8 dw5flags0;
- u8 df_ctl;
- u8 type;
- u8 r_ctl;
- __le16 xri_tag;
- __le16 context_tag;
- u8 dw7flags0;
- u8 command;
- u8 dw7flags1;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 remote_xid;
- __le16 dw10w0;
- u8 dw10flags0;
- u8 ccp;
- u8 cmd_type_wqec_byte;
- u8 rsvd45;
- __le16 cq_id;
- __le32 sequence_payload_len;
- __le32 rsvd48;
- __le32 rsvd52;
- __le32 rsvd56;
- };
- /*
- * WQE used unblock the specified XRI and to release
- * it to the SLI Port's free pool.
- */
- enum sli4_requeue_wqe_flags {
- SLI4_REQU_XRI_WQE_XC = 0x20,
- SLI4_REQU_XRI_WQE_QOSD = 0x2,
- };
- struct sli4_requeue_xri_wqe {
- __le32 rsvd0;
- __le32 rsvd4;
- __le32 rsvd8;
- __le32 rsvd12;
- __le32 rsvd16;
- __le32 rsvd20;
- __le16 xri_tag;
- __le16 context_tag;
- u8 ct_byte;
- u8 command;
- u8 class_byte;
- u8 timer;
- __le32 rsvd32;
- __le16 request_tag;
- __le16 rsvd34;
- __le16 flags0;
- __le16 flags1;
- __le16 flags2;
- u8 ccp;
- u8 cmd_type_wqec_byte;
- u8 rsvd42;
- __le16 cq_id;
- __le32 rsvd44;
- __le32 rsvd48;
- __le32 rsvd52;
- __le32 rsvd56;
- };
- /* WQE used to create a BLS response */
- enum sli4_bls_rsp_wqe_flags {
- SLI4_BLS_RSP_RID = 0xffffff,
- SLI4_BLS_RSP_WQE_AR = 0x40000000,
- SLI4_BLS_RSP_WQE_CT_SHFT = 2,
- SLI4_BLS_RSP_WQE_QOSD = 0x2,
- SLI4_BLS_RSP_WQE_HLM = 0x10,
- };
- struct sli4_xmit_bls_rsp_wqe {
- __le32 payload_word0;
- __le16 rx_id;
- __le16 ox_id;
- __le16 high_seq_cnt;
- __le16 low_seq_cnt;
- __le32 rsvd12;
- __le32 local_n_port_id_dword;
- __le32 remote_id_dword;
- __le16 xri_tag;
- __le16 context_tag;
- u8 dw8flags0;
- u8 command;
- u8 dw8flags1;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 rsvd38;
- u8 dw11flags0;
- u8 dw11flags1;
- u8 dw11flags2;
- u8 ccp;
- u8 dw12flags0;
- u8 rsvd45;
- __le16 cq_id;
- __le16 temporary_rpi;
- u8 rsvd50;
- u8 rsvd51;
- __le32 rsvd52;
- __le32 rsvd56;
- __le32 rsvd60;
- };
- enum sli_bls_type {
- SLI4_SLI_BLS_ACC,
- SLI4_SLI_BLS_RJT,
- SLI4_SLI_BLS_MAX
- };
- struct sli_bls_payload {
- enum sli_bls_type type;
- __le16 ox_id;
- __le16 rx_id;
- union {
- struct {
- u8 seq_id_validity;
- u8 seq_id_last;
- u8 rsvd2;
- u8 rsvd3;
- u16 ox_id;
- u16 rx_id;
- __le16 low_seq_cnt;
- __le16 high_seq_cnt;
- } acc;
- struct {
- u8 vendor_unique;
- u8 reason_explanation;
- u8 reason_code;
- u8 rsvd3;
- } rjt;
- } u;
- };
- /* WQE used to create an ELS response */
- enum sli4_els_rsp_flags {
- SLI4_ELS_SID = 0xffffff,
- SLI4_ELS_RID = 0xffffff,
- SLI4_ELS_DBDE = 0x40,
- SLI4_ELS_XBL = 0x8,
- SLI4_ELS_IOD = 0x20,
- SLI4_ELS_QOSD = 0x2,
- SLI4_ELS_XC = 0x20,
- SLI4_ELS_CT_OFFSET = 0X2,
- SLI4_ELS_SP = 0X1000000,
- SLI4_ELS_HLM = 0X10,
- };
- struct sli4_xmit_els_rsp64_wqe {
- struct sli4_bde els_response_payload;
- __le32 els_response_payload_length;
- __le32 sid_dw;
- __le32 rid_dw;
- __le16 xri_tag;
- __le16 context_tag;
- u8 ct_byte;
- u8 command;
- u8 class_byte;
- u8 timer;
- __le32 abort_tag;
- __le16 request_tag;
- __le16 ox_id;
- u8 flags1;
- u8 flags2;
- u8 flags3;
- u8 flags4;
- u8 cmd_type_wqec;
- u8 rsvd34;
- __le16 cq_id;
- __le16 temporary_rpi;
- __le16 rsvd38;
- u32 rsvd40;
- u32 rsvd44;
- u32 rsvd48;
- };
- /* Local Reject Reason Codes */
- enum sli4_fc_local_rej_codes {
- SLI4_FC_LOCAL_REJECT_UNKNOWN,
- SLI4_FC_LOCAL_REJECT_MISSING_CONTINUE,
- SLI4_FC_LOCAL_REJECT_SEQUENCE_TIMEOUT,
- SLI4_FC_LOCAL_REJECT_INTERNAL_ERROR,
- SLI4_FC_LOCAL_REJECT_INVALID_RPI,
- SLI4_FC_LOCAL_REJECT_NO_XRI,
- SLI4_FC_LOCAL_REJECT_ILLEGAL_COMMAND,
- SLI4_FC_LOCAL_REJECT_XCHG_DROPPED,
- SLI4_FC_LOCAL_REJECT_ILLEGAL_FIELD,
- SLI4_FC_LOCAL_REJECT_RPI_SUSPENDED,
- SLI4_FC_LOCAL_REJECT_RSVD,
- SLI4_FC_LOCAL_REJECT_RSVD1,
- SLI4_FC_LOCAL_REJECT_NO_ABORT_MATCH,
- SLI4_FC_LOCAL_REJECT_TX_DMA_FAILED,
- SLI4_FC_LOCAL_REJECT_RX_DMA_FAILED,
- SLI4_FC_LOCAL_REJECT_ILLEGAL_FRAME,
- SLI4_FC_LOCAL_REJECT_RSVD2,
- SLI4_FC_LOCAL_REJECT_NO_RESOURCES, //0x11
- SLI4_FC_LOCAL_REJECT_FCP_CONF_FAILURE,
- SLI4_FC_LOCAL_REJECT_ILLEGAL_LENGTH,
- SLI4_FC_LOCAL_REJECT_UNSUPPORTED_FEATURE,
- SLI4_FC_LOCAL_REJECT_ABORT_IN_PROGRESS,
- SLI4_FC_LOCAL_REJECT_ABORT_REQUESTED,
- SLI4_FC_LOCAL_REJECT_RCV_BUFFER_TIMEOUT,
- SLI4_FC_LOCAL_REJECT_LOOP_OPEN_FAILURE,
- SLI4_FC_LOCAL_REJECT_RSVD3,
- SLI4_FC_LOCAL_REJECT_LINK_DOWN,
- SLI4_FC_LOCAL_REJECT_CORRUPTED_DATA,
- SLI4_FC_LOCAL_REJECT_CORRUPTED_RPI,
- SLI4_FC_LOCAL_REJECT_OUTOFORDER_DATA,
- SLI4_FC_LOCAL_REJECT_OUTOFORDER_ACK,
- SLI4_FC_LOCAL_REJECT_DUP_FRAME,
- SLI4_FC_LOCAL_REJECT_LINK_CONTROL_FRAME, //0x20
- SLI4_FC_LOCAL_REJECT_BAD_HOST_ADDRESS,
- SLI4_FC_LOCAL_REJECT_RSVD4,
- SLI4_FC_LOCAL_REJECT_MISSING_HDR_BUFFER,
- SLI4_FC_LOCAL_REJECT_MSEQ_CHAIN_CORRUPTED,
- SLI4_FC_LOCAL_REJECT_ABORTMULT_REQUESTED,
- SLI4_FC_LOCAL_REJECT_BUFFER_SHORTAGE = 0x28,
- SLI4_FC_LOCAL_REJECT_RCV_XRIBUF_WAITING,
- SLI4_FC_LOCAL_REJECT_INVALID_VPI = 0x2e,
- SLI4_FC_LOCAL_REJECT_NO_FPORT_DETECTED,
- SLI4_FC_LOCAL_REJECT_MISSING_XRIBUF,
- SLI4_FC_LOCAL_REJECT_RSVD5,
- SLI4_FC_LOCAL_REJECT_INVALID_XRI,
- SLI4_FC_LOCAL_REJECT_INVALID_RELOFFSET = 0x40,
- SLI4_FC_LOCAL_REJECT_MISSING_RELOFFSET,
- SLI4_FC_LOCAL_REJECT_INSUFF_BUFFERSPACE,
- SLI4_FC_LOCAL_REJECT_MISSING_SI,
- SLI4_FC_LOCAL_REJECT_MISSING_ES,
- SLI4_FC_LOCAL_REJECT_INCOMPLETE_XFER,
- SLI4_FC_LOCAL_REJECT_SLER_FAILURE,
- SLI4_FC_LOCAL_REJECT_SLER_CMD_RCV_FAILURE,
- SLI4_FC_LOCAL_REJECT_SLER_REC_RJT_ERR,
- SLI4_FC_LOCAL_REJECT_SLER_REC_SRR_RETRY_ERR,
- SLI4_FC_LOCAL_REJECT_SLER_SRR_RJT_ERR,
- SLI4_FC_LOCAL_REJECT_RSVD6,
- SLI4_FC_LOCAL_REJECT_SLER_RRQ_RJT_ERR,
- SLI4_FC_LOCAL_REJECT_SLER_RRQ_RETRY_ERR,
- SLI4_FC_LOCAL_REJECT_SLER_ABTS_ERR,
- };
- enum sli4_async_rcqe_flags {
- SLI4_RACQE_RQ_EL_INDX = 0xfff,
- SLI4_RACQE_FCFI = 0x3f,
- SLI4_RACQE_HDPL = 0x3f,
- SLI4_RACQE_RQ_ID = 0xffc0,
- };
- struct sli4_fc_async_rcqe {
- u8 rsvd0;
- u8 status;
- __le16 rq_elmt_indx_word;
- __le32 rsvd4;
- __le16 fcfi_rq_id_word;
- __le16 data_placement_length;
- u8 sof_byte;
- u8 eof_byte;
- u8 code;
- u8 hdpl_byte;
- };
- struct sli4_fc_async_rcqe_v1 {
- u8 rsvd0;
- u8 status;
- __le16 rq_elmt_indx_word;
- u8 fcfi_byte;
- u8 rsvd5;
- __le16 rsvd6;
- __le16 rq_id;
- __le16 data_placement_length;
- u8 sof_byte;
- u8 eof_byte;
- u8 code;
- u8 hdpl_byte;
- };
- enum sli4_fc_async_rq_status {
- SLI4_FC_ASYNC_RQ_SUCCESS = 0x10,
- SLI4_FC_ASYNC_RQ_BUF_LEN_EXCEEDED,
- SLI4_FC_ASYNC_RQ_INSUFF_BUF_NEEDED,
- SLI4_FC_ASYNC_RQ_INSUFF_BUF_FRM_DISC,
- SLI4_FC_ASYNC_RQ_DMA_FAILURE,
- };
- #define SLI4_RCQE_RQ_EL_INDX 0xfff
- struct sli4_fc_coalescing_rcqe {
- u8 rsvd0;
- u8 status;
- __le16 rq_elmt_indx_word;
- __le32 rsvd4;
- __le16 rq_id;
- __le16 seq_placement_length;
- __le16 rsvd14;
- u8 code;
- u8 vld_byte;
- };
- #define SLI4_FC_COALESCE_RQ_SUCCESS 0x10
- #define SLI4_FC_COALESCE_RQ_INSUFF_XRI_NEEDED 0x18
- enum sli4_optimized_write_cmd_cqe_flags {
- SLI4_OCQE_RQ_EL_INDX = 0x7f, /* DW0 bits 16:30 */
- SLI4_OCQE_FCFI = 0x3f, /* DW1 bits 0:6 */
- SLI4_OCQE_OOX = 1 << 6, /* DW1 bit 15 */
- SLI4_OCQE_AGXR = 1 << 7, /* DW1 bit 16 */
- SLI4_OCQE_HDPL = 0x3f, /* DW3 bits 24:29*/
- };
- struct sli4_fc_optimized_write_cmd_cqe {
- u8 rsvd0;
- u8 status;
- __le16 w1;
- u8 flags0;
- u8 flags1;
- __le16 xri;
- __le16 rq_id;
- __le16 data_placement_length;
- __le16 rpi;
- u8 code;
- u8 hdpl_vld;
- };
- #define SLI4_OCQE_XB 0x10
- struct sli4_fc_optimized_write_data_cqe {
- u8 hw_status;
- u8 status;
- __le16 xri;
- __le32 total_data_placed;
- __le32 extended_status;
- __le16 rsvd12;
- u8 code;
- u8 flags;
- };
- struct sli4_fc_xri_aborted_cqe {
- u8 rsvd0;
- u8 status;
- __le16 rsvd2;
- __le32 extended_status;
- __le16 xri;
- __le16 remote_xid;
- __le16 rsvd12;
- u8 code;
- u8 flags;
- };
- enum sli4_generic_ctx {
- SLI4_GENERIC_CONTEXT_RPI,
- SLI4_GENERIC_CONTEXT_VPI,
- SLI4_GENERIC_CONTEXT_VFI,
- SLI4_GENERIC_CONTEXT_FCFI,
- };
- #define SLI4_GENERIC_CLASS_CLASS_2 0x1
- #define SLI4_GENERIC_CLASS_CLASS_3 0x2
- #define SLI4_ELS_REQUEST64_DIR_WRITE 0x0
- #define SLI4_ELS_REQUEST64_DIR_READ 0x1
- enum sli4_els_request {
- SLI4_ELS_REQUEST64_OTHER,
- SLI4_ELS_REQUEST64_LOGO,
- SLI4_ELS_REQUEST64_FDISC,
- SLI4_ELS_REQUEST64_FLOGIN,
- SLI4_ELS_REQUEST64_PLOGI,
- };
- enum sli4_els_cmd_type {
- SLI4_ELS_REQUEST64_CMD_GEN = 0x08,
- SLI4_ELS_REQUEST64_CMD_NON_FABRIC = 0x0c,
- SLI4_ELS_REQUEST64_CMD_FABRIC = 0x0d,
- };
- #define SLI_PAGE_SIZE SZ_4K
- #define SLI4_BMBX_TIMEOUT_MSEC 30000
- #define SLI4_FW_READY_TIMEOUT_MSEC 30000
- #define SLI4_BMBX_DELAY_US 1000 /* 1 ms */
- #define SLI4_INIT_PORT_DELAY_US 10000 /* 10 ms */
- static inline u32
- sli_page_count(size_t bytes, u32 page_size)
- {
- if (!page_size)
- return 0;
- return (bytes + (page_size - 1)) >> __ffs(page_size);
- }
- /*************************************************************************
- * SLI-4 mailbox command formats and definitions
- */
- struct sli4_mbox_command_header {
- u8 resvd0;
- u8 command;
- __le16 status; /* Port writes to indicate success/fail */
- };
- enum sli4_mbx_cmd_value {
- SLI4_MBX_CMD_CONFIG_LINK = 0x07,
- SLI4_MBX_CMD_DUMP = 0x17,
- SLI4_MBX_CMD_DOWN_LINK = 0x06,
- SLI4_MBX_CMD_INIT_LINK = 0x05,
- SLI4_MBX_CMD_INIT_VFI = 0xa3,
- SLI4_MBX_CMD_INIT_VPI = 0xa4,
- SLI4_MBX_CMD_POST_XRI = 0xa7,
- SLI4_MBX_CMD_RELEASE_XRI = 0xac,
- SLI4_MBX_CMD_READ_CONFIG = 0x0b,
- SLI4_MBX_CMD_READ_STATUS = 0x0e,
- SLI4_MBX_CMD_READ_NVPARMS = 0x02,
- SLI4_MBX_CMD_READ_REV = 0x11,
- SLI4_MBX_CMD_READ_LNK_STAT = 0x12,
- SLI4_MBX_CMD_READ_SPARM64 = 0x8d,
- SLI4_MBX_CMD_READ_TOPOLOGY = 0x95,
- SLI4_MBX_CMD_REG_FCFI = 0xa0,
- SLI4_MBX_CMD_REG_FCFI_MRQ = 0xaf,
- SLI4_MBX_CMD_REG_RPI = 0x93,
- SLI4_MBX_CMD_REG_RX_RQ = 0xa6,
- SLI4_MBX_CMD_REG_VFI = 0x9f,
- SLI4_MBX_CMD_REG_VPI = 0x96,
- SLI4_MBX_CMD_RQST_FEATURES = 0x9d,
- SLI4_MBX_CMD_SLI_CONFIG = 0x9b,
- SLI4_MBX_CMD_UNREG_FCFI = 0xa2,
- SLI4_MBX_CMD_UNREG_RPI = 0x14,
- SLI4_MBX_CMD_UNREG_VFI = 0xa1,
- SLI4_MBX_CMD_UNREG_VPI = 0x97,
- SLI4_MBX_CMD_WRITE_NVPARMS = 0x03,
- SLI4_MBX_CMD_CFG_AUTO_XFER_RDY = 0xad,
- };
- enum sli4_mbx_status {
- SLI4_MBX_STATUS_SUCCESS = 0x0000,
- SLI4_MBX_STATUS_FAILURE = 0x0001,
- SLI4_MBX_STATUS_RPI_NOT_REG = 0x1400,
- };
- /* CONFIG_LINK - configure link-oriented parameters,
- * such as default N_Port_ID address and various timers
- */
- enum sli4_cmd_config_link_flags {
- SLI4_CFG_LINK_BBSCN = 0xf00,
- SLI4_CFG_LINK_CSCN = 0x1000,
- };
- struct sli4_cmd_config_link {
- struct sli4_mbox_command_header hdr;
- u8 maxbbc;
- u8 rsvd5;
- u8 rsvd6;
- u8 rsvd7;
- u8 alpa;
- __le16 n_port_id;
- u8 rsvd11;
- __le32 rsvd12;
- __le32 e_d_tov;
- __le32 lp_tov;
- __le32 r_a_tov;
- __le32 r_t_tov;
- __le32 al_tov;
- __le32 rsvd36;
- __le32 bbscn_dword;
- };
- #define SLI4_DUMP4_TYPE 0xf
- #define SLI4_WKI_TAG_SAT_TEM 0x1040
- struct sli4_cmd_dump4 {
- struct sli4_mbox_command_header hdr;
- __le32 type_dword;
- __le16 wki_selection;
- __le16 rsvd10;
- __le32 rsvd12;
- __le32 returned_byte_cnt;
- __le32 resp_data[59];
- };
- /* INIT_LINK - initialize the link for a FC port */
- enum sli4_init_link_flags {
- SLI4_INIT_LINK_F_LOOPBACK = 1 << 0,
- SLI4_INIT_LINK_F_P2P_ONLY = 1 << 1,
- SLI4_INIT_LINK_F_FCAL_ONLY = 2 << 1,
- SLI4_INIT_LINK_F_FCAL_FAIL_OVER = 0 << 1,
- SLI4_INIT_LINK_F_P2P_FAIL_OVER = 1 << 1,
- SLI4_INIT_LINK_F_UNFAIR = 1 << 6,
- SLI4_INIT_LINK_F_NO_LIRP = 1 << 7,
- SLI4_INIT_LINK_F_LOOP_VALID_CHK = 1 << 8,
- SLI4_INIT_LINK_F_NO_LISA = 1 << 9,
- SLI4_INIT_LINK_F_FAIL_OVER = 1 << 10,
- SLI4_INIT_LINK_F_FIXED_SPEED = 1 << 11,
- SLI4_INIT_LINK_F_PICK_HI_ALPA = 1 << 15,
- };
- enum sli4_fc_link_speed {
- SLI4_LINK_SPEED_1G = 1,
- SLI4_LINK_SPEED_2G,
- SLI4_LINK_SPEED_AUTO_1_2,
- SLI4_LINK_SPEED_4G,
- SLI4_LINK_SPEED_AUTO_4_1,
- SLI4_LINK_SPEED_AUTO_4_2,
- SLI4_LINK_SPEED_AUTO_4_2_1,
- SLI4_LINK_SPEED_8G,
- SLI4_LINK_SPEED_AUTO_8_1,
- SLI4_LINK_SPEED_AUTO_8_2,
- SLI4_LINK_SPEED_AUTO_8_2_1,
- SLI4_LINK_SPEED_AUTO_8_4,
- SLI4_LINK_SPEED_AUTO_8_4_1,
- SLI4_LINK_SPEED_AUTO_8_4_2,
- SLI4_LINK_SPEED_10G,
- SLI4_LINK_SPEED_16G,
- SLI4_LINK_SPEED_AUTO_16_8_4,
- SLI4_LINK_SPEED_AUTO_16_8,
- SLI4_LINK_SPEED_32G,
- SLI4_LINK_SPEED_AUTO_32_16_8,
- SLI4_LINK_SPEED_AUTO_32_16,
- SLI4_LINK_SPEED_64G,
- SLI4_LINK_SPEED_AUTO_64_32_16,
- SLI4_LINK_SPEED_AUTO_64_32,
- SLI4_LINK_SPEED_128G,
- SLI4_LINK_SPEED_AUTO_128_64_32,
- SLI4_LINK_SPEED_AUTO_128_64,
- };
- struct sli4_cmd_init_link {
- struct sli4_mbox_command_header hdr;
- __le32 sel_reset_al_pa_dword;
- __le32 flags0;
- __le32 link_speed_sel_code;
- };
- /* INIT_VFI - initialize the VFI resource */
- enum sli4_init_vfi_flags {
- SLI4_INIT_VFI_FLAG_VP = 0x1000,
- SLI4_INIT_VFI_FLAG_VF = 0x2000,
- SLI4_INIT_VFI_FLAG_VT = 0x4000,
- SLI4_INIT_VFI_FLAG_VR = 0x8000,
- SLI4_INIT_VFI_VFID = 0x1fff,
- SLI4_INIT_VFI_PRI = 0xe000,
- SLI4_INIT_VFI_HOP_COUNT = 0xff000000,
- };
- struct sli4_cmd_init_vfi {
- struct sli4_mbox_command_header hdr;
- __le16 vfi;
- __le16 flags0_word;
- __le16 fcfi;
- __le16 vpi;
- __le32 vf_id_pri_dword;
- __le32 hop_cnt_dword;
- };
- /* INIT_VPI - initialize the VPI resource */
- struct sli4_cmd_init_vpi {
- struct sli4_mbox_command_header hdr;
- __le16 vpi;
- __le16 vfi;
- };
- /* POST_XRI - post XRI resources to the SLI Port */
- enum sli4_post_xri_flags {
- SLI4_POST_XRI_COUNT = 0xfff,
- SLI4_POST_XRI_FLAG_ENX = 0x1000,
- SLI4_POST_XRI_FLAG_DL = 0x2000,
- SLI4_POST_XRI_FLAG_DI = 0x4000,
- SLI4_POST_XRI_FLAG_VAL = 0x8000,
- };
- struct sli4_cmd_post_xri {
- struct sli4_mbox_command_header hdr;
- __le16 xri_base;
- __le16 xri_count_flags;
- };
- /* RELEASE_XRI - Release XRI resources from the SLI Port */
- enum sli4_release_xri_flags {
- SLI4_RELEASE_XRI_REL_XRI_CNT = 0x1f,
- SLI4_RELEASE_XRI_COUNT = 0x1f,
- };
- struct sli4_cmd_release_xri {
- struct sli4_mbox_command_header hdr;
- __le16 rel_xri_count_word;
- __le16 xri_count_word;
- struct {
- __le16 xri_tag0;
- __le16 xri_tag1;
- } xri_tbl[62];
- };
- /* READ_CONFIG - read SLI port configuration parameters */
- struct sli4_cmd_read_config {
- struct sli4_mbox_command_header hdr;
- };
- enum sli4_read_cfg_resp_flags {
- SLI4_READ_CFG_RESP_RESOURCE_EXT = 0x80000000, /* DW1 */
- SLI4_READ_CFG_RESP_TOPOLOGY = 0xff000000, /* DW2 */
- };
- enum sli4_read_cfg_topo {
- SLI4_READ_CFG_TOPO_FC = 0x1, /* FC topology unknown */
- SLI4_READ_CFG_TOPO_NON_FC_AL = 0x2, /* FC point-to-point or fabric */
- SLI4_READ_CFG_TOPO_FC_AL = 0x3, /* FC-AL topology */
- };
- /* Link Module Type */
- enum sli4_read_cfg_lmt {
- SLI4_LINK_MODULE_TYPE_1GB = 0x0004,
- SLI4_LINK_MODULE_TYPE_2GB = 0x0008,
- SLI4_LINK_MODULE_TYPE_4GB = 0x0040,
- SLI4_LINK_MODULE_TYPE_8GB = 0x0080,
- SLI4_LINK_MODULE_TYPE_16GB = 0x0200,
- SLI4_LINK_MODULE_TYPE_32GB = 0x0400,
- SLI4_LINK_MODULE_TYPE_64GB = 0x0800,
- SLI4_LINK_MODULE_TYPE_128GB = 0x1000,
- };
- struct sli4_rsp_read_config {
- struct sli4_mbox_command_header hdr;
- __le32 ext_dword;
- __le32 topology_dword;
- __le32 resvd8;
- __le16 e_d_tov;
- __le16 resvd14;
- __le32 resvd16;
- __le16 r_a_tov;
- __le16 resvd22;
- __le32 resvd24;
- __le32 resvd28;
- __le16 lmt;
- __le16 resvd34;
- __le32 resvd36;
- __le32 resvd40;
- __le16 xri_base;
- __le16 xri_count;
- __le16 rpi_base;
- __le16 rpi_count;
- __le16 vpi_base;
- __le16 vpi_count;
- __le16 vfi_base;
- __le16 vfi_count;
- __le16 resvd60;
- __le16 fcfi_count;
- __le16 rq_count;
- __le16 eq_count;
- __le16 wq_count;
- __le16 cq_count;
- __le32 pad[45];
- };
- /* READ_NVPARMS - read SLI port configuration parameters */
- enum sli4_read_nvparms_flags {
- SLI4_READ_NVPARAMS_HARD_ALPA = 0xff,
- SLI4_READ_NVPARAMS_PREFERRED_D_ID = 0xffffff00,
- };
- struct sli4_cmd_read_nvparms {
- struct sli4_mbox_command_header hdr;
- __le32 resvd0;
- __le32 resvd4;
- __le32 resvd8;
- __le32 resvd12;
- u8 wwpn[8];
- u8 wwnn[8];
- __le32 hard_alpa_d_id;
- };
- /* WRITE_NVPARMS - write SLI port configuration parameters */
- struct sli4_cmd_write_nvparms {
- struct sli4_mbox_command_header hdr;
- __le32 resvd0;
- __le32 resvd4;
- __le32 resvd8;
- __le32 resvd12;
- u8 wwpn[8];
- u8 wwnn[8];
- __le32 hard_alpa_d_id;
- };
- /* READ_REV - read the Port revision levels */
- enum {
- SLI4_READ_REV_FLAG_SLI_LEVEL = 0xf,
- SLI4_READ_REV_FLAG_FCOEM = 0x10,
- SLI4_READ_REV_FLAG_CEEV = 0x60,
- SLI4_READ_REV_FLAG_VPD = 0x2000,
- SLI4_READ_REV_AVAILABLE_LENGTH = 0xffffff,
- };
- struct sli4_cmd_read_rev {
- struct sli4_mbox_command_header hdr;
- __le16 resvd0;
- __le16 flags0_word;
- __le32 first_hw_rev;
- __le32 second_hw_rev;
- __le32 resvd12;
- __le32 third_hw_rev;
- u8 fc_ph_low;
- u8 fc_ph_high;
- u8 feature_level_low;
- u8 feature_level_high;
- __le32 resvd24;
- __le32 first_fw_id;
- u8 first_fw_name[16];
- __le32 second_fw_id;
- u8 second_fw_name[16];
- __le32 rsvd18[30];
- __le32 available_length_dword;
- struct sli4_dmaaddr hostbuf;
- __le32 returned_vpd_length;
- __le32 actual_vpd_length;
- };
- /* READ_SPARM64 - read the Port service parameters */
- #define SLI4_READ_SPARM64_WWPN_OFFSET (4 * sizeof(u32))
- #define SLI4_READ_SPARM64_WWNN_OFFSET (6 * sizeof(u32))
- struct sli4_cmd_read_sparm64 {
- struct sli4_mbox_command_header hdr;
- __le32 resvd0;
- __le32 resvd4;
- struct sli4_bde bde_64;
- __le16 vpi;
- __le16 resvd22;
- __le16 port_name_start;
- __le16 port_name_len;
- __le16 node_name_start;
- __le16 node_name_len;
- };
- /* READ_TOPOLOGY - read the link event information */
- enum sli4_read_topo_e {
- SLI4_READTOPO_ATTEN_TYPE = 0xff,
- SLI4_READTOPO_FLAG_IL = 0x100,
- SLI4_READTOPO_FLAG_PB_RECVD = 0x200,
- SLI4_READTOPO_LINKSTATE_RECV = 0x3,
- SLI4_READTOPO_LINKSTATE_TRANS = 0xc,
- SLI4_READTOPO_LINKSTATE_MACHINE = 0xf0,
- SLI4_READTOPO_LINKSTATE_SPEED = 0xff00,
- SLI4_READTOPO_LINKSTATE_TF = 0x40000000,
- SLI4_READTOPO_LINKSTATE_LU = 0x80000000,
- SLI4_READTOPO_SCN_BBSCN = 0xf,
- SLI4_READTOPO_SCN_CBBSCN = 0xf0,
- SLI4_READTOPO_R_T_TOV = 0x1ff,
- SLI4_READTOPO_AL_TOV = 0xf000,
- SLI4_READTOPO_PB_FLAG = 0x80,
- SLI4_READTOPO_INIT_N_PORTID = 0xffffff,
- };
- #define SLI4_MIN_LOOP_MAP_BYTES 128
- struct sli4_cmd_read_topology {
- struct sli4_mbox_command_header hdr;
- __le32 event_tag;
- __le32 dw2_attentype;
- u8 topology;
- u8 lip_type;
- u8 lip_al_ps;
- u8 al_pa_granted;
- struct sli4_bde bde_loop_map;
- __le32 linkdown_state;
- __le32 currlink_state;
- u8 max_bbc;
- u8 init_bbc;
- u8 scn_flags;
- u8 rsvd39;
- __le16 dw10w0_al_rt_tov;
- __le16 lp_tov;
- u8 acquired_al_pa;
- u8 pb_flags;
- __le16 specified_al_pa;
- __le32 dw12_init_n_port_id;
- };
- enum sli4_read_topo_link {
- SLI4_READ_TOPOLOGY_LINK_UP = 0x1,
- SLI4_READ_TOPOLOGY_LINK_DOWN,
- SLI4_READ_TOPOLOGY_LINK_NO_ALPA,
- };
- enum sli4_read_topo {
- SLI4_READ_TOPO_UNKNOWN = 0x0,
- SLI4_READ_TOPO_NON_FC_AL,
- SLI4_READ_TOPO_FC_AL,
- };
- enum sli4_read_topo_speed {
- SLI4_READ_TOPOLOGY_SPEED_NONE = 0x00,
- SLI4_READ_TOPOLOGY_SPEED_1G = 0x04,
- SLI4_READ_TOPOLOGY_SPEED_2G = 0x08,
- SLI4_READ_TOPOLOGY_SPEED_4G = 0x10,
- SLI4_READ_TOPOLOGY_SPEED_8G = 0x20,
- SLI4_READ_TOPOLOGY_SPEED_10G = 0x40,
- SLI4_READ_TOPOLOGY_SPEED_16G = 0x80,
- SLI4_READ_TOPOLOGY_SPEED_32G = 0x90,
- SLI4_READ_TOPOLOGY_SPEED_64G = 0xa0,
- SLI4_READ_TOPOLOGY_SPEED_128G = 0xb0,
- };
- /* REG_FCFI - activate a FC Forwarder */
- struct sli4_cmd_reg_fcfi_rq_cfg {
- u8 r_ctl_mask;
- u8 r_ctl_match;
- u8 type_mask;
- u8 type_match;
- };
- enum sli4_regfcfi_tag {
- SLI4_REGFCFI_VLAN_TAG = 0xfff,
- SLI4_REGFCFI_VLANTAG_VALID = 0x1000,
- };
- #define SLI4_CMD_REG_FCFI_NUM_RQ_CFG 4
- struct sli4_cmd_reg_fcfi {
- struct sli4_mbox_command_header hdr;
- __le16 fcf_index;
- __le16 fcfi;
- __le16 rqid1;
- __le16 rqid0;
- __le16 rqid3;
- __le16 rqid2;
- struct sli4_cmd_reg_fcfi_rq_cfg
- rq_cfg[SLI4_CMD_REG_FCFI_NUM_RQ_CFG];
- __le32 dw8_vlan;
- };
- #define SLI4_CMD_REG_FCFI_MRQ_NUM_RQ_CFG 4
- #define SLI4_CMD_REG_FCFI_MRQ_MAX_NUM_RQ 32
- #define SLI4_CMD_REG_FCFI_SET_FCFI_MODE 0
- #define SLI4_CMD_REG_FCFI_SET_MRQ_MODE 1
- enum sli4_reg_fcfi_mrq {
- SLI4_REGFCFI_MRQ_VLAN_TAG = 0xfff,
- SLI4_REGFCFI_MRQ_VLANTAG_VALID = 0x1000,
- SLI4_REGFCFI_MRQ_MODE = 0x2000,
- SLI4_REGFCFI_MRQ_MASK_NUM_PAIRS = 0xff,
- SLI4_REGFCFI_MRQ_FILTER_BITMASK = 0xf00,
- SLI4_REGFCFI_MRQ_RQ_SEL_POLICY = 0xf000,
- };
- struct sli4_cmd_reg_fcfi_mrq {
- struct sli4_mbox_command_header hdr;
- __le16 fcf_index;
- __le16 fcfi;
- __le16 rqid1;
- __le16 rqid0;
- __le16 rqid3;
- __le16 rqid2;
- struct sli4_cmd_reg_fcfi_rq_cfg
- rq_cfg[SLI4_CMD_REG_FCFI_MRQ_NUM_RQ_CFG];
- __le32 dw8_vlan;
- __le32 dw9_mrqflags;
- };
- struct sli4_cmd_rq_cfg {
- __le16 rq_id;
- u8 r_ctl_mask;
- u8 r_ctl_match;
- u8 type_mask;
- u8 type_match;
- };
- /* REG_RPI - register a Remote Port Indicator */
- enum sli4_reg_rpi {
- SLI4_REGRPI_REMOTE_N_PORTID = 0xffffff, /* DW2 */
- SLI4_REGRPI_UPD = 0x1000000,
- SLI4_REGRPI_ETOW = 0x8000000,
- SLI4_REGRPI_TERP = 0x20000000,
- SLI4_REGRPI_CI = 0x80000000,
- };
- struct sli4_cmd_reg_rpi {
- struct sli4_mbox_command_header hdr;
- __le16 rpi;
- __le16 rsvd2;
- __le32 dw2_rportid_flags;
- struct sli4_bde bde_64;
- __le16 vpi;
- __le16 rsvd26;
- };
- #define SLI4_REG_RPI_BUF_LEN 0x70
- /* REG_VFI - register a Virtual Fabric Indicator */
- enum sli_reg_vfi {
- SLI4_REGVFI_VP = 0x1000, /* DW1 */
- SLI4_REGVFI_UPD = 0x2000,
- SLI4_REGVFI_LOCAL_N_PORTID = 0xffffff, /* DW10 */
- };
- struct sli4_cmd_reg_vfi {
- struct sli4_mbox_command_header hdr;
- __le16 vfi;
- __le16 dw0w1_flags;
- __le16 fcfi;
- __le16 vpi;
- u8 wwpn[8];
- struct sli4_bde sparm;
- __le32 e_d_tov;
- __le32 r_a_tov;
- __le32 dw10_lportid_flags;
- };
- /* REG_VPI - register a Virtual Port Indicator */
- enum sli4_reg_vpi {
- SLI4_REGVPI_LOCAL_N_PORTID = 0xffffff,
- SLI4_REGVPI_UPD = 0x1000000,
- };
- struct sli4_cmd_reg_vpi {
- struct sli4_mbox_command_header hdr;
- __le32 rsvd0;
- __le32 dw2_lportid_flags;
- u8 wwpn[8];
- __le32 rsvd12;
- __le16 vpi;
- __le16 vfi;
- };
- /* REQUEST_FEATURES - request / query SLI features */
- enum sli4_req_features_flags {
- SLI4_REQFEAT_QRY = 0x1, /* Dw1 */
- SLI4_REQFEAT_IAAB = 1 << 0, /* DW2 & DW3 */
- SLI4_REQFEAT_NPIV = 1 << 1,
- SLI4_REQFEAT_DIF = 1 << 2,
- SLI4_REQFEAT_VF = 1 << 3,
- SLI4_REQFEAT_FCPI = 1 << 4,
- SLI4_REQFEAT_FCPT = 1 << 5,
- SLI4_REQFEAT_FCPC = 1 << 6,
- SLI4_REQFEAT_RSVD = 1 << 7,
- SLI4_REQFEAT_RQD = 1 << 8,
- SLI4_REQFEAT_IAAR = 1 << 9,
- SLI4_REQFEAT_HLM = 1 << 10,
- SLI4_REQFEAT_PERFH = 1 << 11,
- SLI4_REQFEAT_RXSEQ = 1 << 12,
- SLI4_REQFEAT_RXRI = 1 << 13,
- SLI4_REQFEAT_DCL2 = 1 << 14,
- SLI4_REQFEAT_RSCO = 1 << 15,
- SLI4_REQFEAT_MRQP = 1 << 16,
- };
- struct sli4_cmd_request_features {
- struct sli4_mbox_command_header hdr;
- __le32 dw1_qry;
- __le32 cmd;
- __le32 resp;
- };
- /*
- * SLI_CONFIG - submit a configuration command to Port
- *
- * Command is either embedded as part of the payload (embed) or located
- * in a separate memory buffer (mem)
- */
- enum sli4_sli_config {
- SLI4_SLICONF_EMB = 0x1, /* DW1 */
- SLI4_SLICONF_PMDCMD_SHIFT = 3,
- SLI4_SLICONF_PMDCMD_MASK = 0xf8,
- SLI4_SLICONF_PMDCMD_VAL_1 = 8,
- SLI4_SLICONF_PMDCNT = 0xf8,
- SLI4_SLICONF_PMD_LEN = 0x00ffffff,
- };
- struct sli4_cmd_sli_config {
- struct sli4_mbox_command_header hdr;
- __le32 dw1_flags;
- __le32 payload_len;
- __le32 rsvd12[3];
- union {
- u8 embed[58 * sizeof(u32)];
- struct sli4_bufptr mem;
- } payload;
- };
- /* READ_STATUS - read tx/rx status of a particular port */
- #define SLI4_READSTATUS_CLEAR_COUNTERS 0x1
- struct sli4_cmd_read_status {
- struct sli4_mbox_command_header hdr;
- __le32 dw1_flags;
- __le32 rsvd4;
- __le32 trans_kbyte_cnt;
- __le32 recv_kbyte_cnt;
- __le32 trans_frame_cnt;
- __le32 recv_frame_cnt;
- __le32 trans_seq_cnt;
- __le32 recv_seq_cnt;
- __le32 tot_exchanges_orig;
- __le32 tot_exchanges_resp;
- __le32 recv_p_bsy_cnt;
- __le32 recv_f_bsy_cnt;
- __le32 no_rq_buf_dropped_frames_cnt;
- __le32 empty_rq_timeout_cnt;
- __le32 no_xri_dropped_frames_cnt;
- __le32 empty_xri_pool_cnt;
- };
- /* READ_LNK_STAT - read link status of a particular port */
- enum sli4_read_link_stats_flags {
- SLI4_READ_LNKSTAT_REC = 1u << 0,
- SLI4_READ_LNKSTAT_GEC = 1u << 1,
- SLI4_READ_LNKSTAT_W02OF = 1u << 2,
- SLI4_READ_LNKSTAT_W03OF = 1u << 3,
- SLI4_READ_LNKSTAT_W04OF = 1u << 4,
- SLI4_READ_LNKSTAT_W05OF = 1u << 5,
- SLI4_READ_LNKSTAT_W06OF = 1u << 6,
- SLI4_READ_LNKSTAT_W07OF = 1u << 7,
- SLI4_READ_LNKSTAT_W08OF = 1u << 8,
- SLI4_READ_LNKSTAT_W09OF = 1u << 9,
- SLI4_READ_LNKSTAT_W10OF = 1u << 10,
- SLI4_READ_LNKSTAT_W11OF = 1u << 11,
- SLI4_READ_LNKSTAT_W12OF = 1u << 12,
- SLI4_READ_LNKSTAT_W13OF = 1u << 13,
- SLI4_READ_LNKSTAT_W14OF = 1u << 14,
- SLI4_READ_LNKSTAT_W15OF = 1u << 15,
- SLI4_READ_LNKSTAT_W16OF = 1u << 16,
- SLI4_READ_LNKSTAT_W17OF = 1u << 17,
- SLI4_READ_LNKSTAT_W18OF = 1u << 18,
- SLI4_READ_LNKSTAT_W19OF = 1u << 19,
- SLI4_READ_LNKSTAT_W20OF = 1u << 20,
- SLI4_READ_LNKSTAT_W21OF = 1u << 21,
- SLI4_READ_LNKSTAT_CLRC = 1u << 30,
- SLI4_READ_LNKSTAT_CLOF = 1u << 31,
- };
- struct sli4_cmd_read_link_stats {
- struct sli4_mbox_command_header hdr;
- __le32 dw1_flags;
- __le32 linkfail_errcnt;
- __le32 losssync_errcnt;
- __le32 losssignal_errcnt;
- __le32 primseq_errcnt;
- __le32 inval_txword_errcnt;
- __le32 crc_errcnt;
- __le32 primseq_eventtimeout_cnt;
- __le32 elastic_bufoverrun_errcnt;
- __le32 arbit_fc_al_timeout_cnt;
- __le32 adv_rx_buftor_to_buf_credit;
- __le32 curr_rx_buf_to_buf_credit;
- __le32 adv_tx_buf_to_buf_credit;
- __le32 curr_tx_buf_to_buf_credit;
- __le32 rx_eofa_cnt;
- __le32 rx_eofdti_cnt;
- __le32 rx_eofni_cnt;
- __le32 rx_soff_cnt;
- __le32 rx_dropped_no_aer_cnt;
- __le32 rx_dropped_no_avail_rpi_rescnt;
- __le32 rx_dropped_no_avail_xri_rescnt;
- };
- /* Format a WQE with WQ_ID Association performance hint */
- static inline void
- sli_set_wq_id_association(void *entry, u16 q_id)
- {
- u32 *wqe = entry;
- /*
- * Set Word 10, bit 0 to zero
- * Set Word 10, bits 15:1 to the WQ ID
- */
- wqe[10] &= ~0xffff;
- wqe[10] |= q_id << 1;
- }
- /* UNREG_FCFI - unregister a FCFI */
- struct sli4_cmd_unreg_fcfi {
- struct sli4_mbox_command_header hdr;
- __le32 rsvd0;
- __le16 fcfi;
- __le16 rsvd6;
- };
- /* UNREG_RPI - unregister one or more RPI */
- enum sli4_unreg_rpi {
- SLI4_UNREG_RPI_DP = 0x2000,
- SLI4_UNREG_RPI_II_SHIFT = 14,
- SLI4_UNREG_RPI_II_MASK = 0xc000,
- SLI4_UNREG_RPI_II_RPI = 0x0000,
- SLI4_UNREG_RPI_II_VPI = 0x4000,
- SLI4_UNREG_RPI_II_VFI = 0x8000,
- SLI4_UNREG_RPI_II_FCFI = 0xc000,
- SLI4_UNREG_RPI_DEST_N_PORTID_MASK = 0x00ffffff,
- };
- struct sli4_cmd_unreg_rpi {
- struct sli4_mbox_command_header hdr;
- __le16 index;
- __le16 dw1w1_flags;
- __le32 dw2_dest_n_portid;
- };
- /* UNREG_VFI - unregister one or more VFI */
- enum sli4_unreg_vfi {
- SLI4_UNREG_VFI_II_SHIFT = 14,
- SLI4_UNREG_VFI_II_MASK = 0xc000,
- SLI4_UNREG_VFI_II_VFI = 0x0000,
- SLI4_UNREG_VFI_II_FCFI = 0xc000,
- };
- struct sli4_cmd_unreg_vfi {
- struct sli4_mbox_command_header hdr;
- __le32 rsvd0;
- __le16 index;
- __le16 dw2_flags;
- };
- enum sli4_unreg_type {
- SLI4_UNREG_TYPE_PORT,
- SLI4_UNREG_TYPE_DOMAIN,
- SLI4_UNREG_TYPE_FCF,
- SLI4_UNREG_TYPE_ALL
- };
- /* UNREG_VPI - unregister one or more VPI */
- enum sli4_unreg_vpi {
- SLI4_UNREG_VPI_II_SHIFT = 14,
- SLI4_UNREG_VPI_II_MASK = 0xc000,
- SLI4_UNREG_VPI_II_VPI = 0x0000,
- SLI4_UNREG_VPI_II_VFI = 0x8000,
- SLI4_UNREG_VPI_II_FCFI = 0xc000,
- };
- struct sli4_cmd_unreg_vpi {
- struct sli4_mbox_command_header hdr;
- __le32 rsvd0;
- __le16 index;
- __le16 dw2w0_flags;
- };
- /* AUTO_XFER_RDY - Configure the auto-generate XFER-RDY feature */
- struct sli4_cmd_config_auto_xfer_rdy {
- struct sli4_mbox_command_header hdr;
- __le32 rsvd0;
- __le32 max_burst_len;
- };
- #define SLI4_CONFIG_AUTO_XFERRDY_BLKSIZE 0xffff
- struct sli4_cmd_config_auto_xfer_rdy_hp {
- struct sli4_mbox_command_header hdr;
- __le32 rsvd0;
- __le32 max_burst_len;
- __le32 dw3_esoc_flags;
- __le16 block_size;
- __le16 rsvd14;
- };
- /*************************************************************************
- * SLI-4 common configuration command formats and definitions
- */
- /*
- * Subsystem values.
- */
- enum sli4_subsystem {
- SLI4_SUBSYSTEM_COMMON = 0x01,
- SLI4_SUBSYSTEM_LOWLEVEL = 0x0b,
- SLI4_SUBSYSTEM_FC = 0x0c,
- SLI4_SUBSYSTEM_DMTF = 0x11,
- };
- #define SLI4_OPC_LOWLEVEL_SET_WATCHDOG 0X36
- /*
- * Common opcode (OPC) values.
- */
- enum sli4_cmn_opcode {
- SLI4_CMN_FUNCTION_RESET = 0x3d,
- SLI4_CMN_CREATE_CQ = 0x0c,
- SLI4_CMN_CREATE_CQ_SET = 0x1d,
- SLI4_CMN_DESTROY_CQ = 0x36,
- SLI4_CMN_MODIFY_EQ_DELAY = 0x29,
- SLI4_CMN_CREATE_EQ = 0x0d,
- SLI4_CMN_DESTROY_EQ = 0x37,
- SLI4_CMN_CREATE_MQ_EXT = 0x5a,
- SLI4_CMN_DESTROY_MQ = 0x35,
- SLI4_CMN_GET_CNTL_ATTRIBUTES = 0x20,
- SLI4_CMN_NOP = 0x21,
- SLI4_CMN_GET_RSC_EXTENT_INFO = 0x9a,
- SLI4_CMN_GET_SLI4_PARAMS = 0xb5,
- SLI4_CMN_QUERY_FW_CONFIG = 0x3a,
- SLI4_CMN_GET_PORT_NAME = 0x4d,
- SLI4_CMN_WRITE_FLASHROM = 0x07,
- /* TRANSCEIVER Data */
- SLI4_CMN_READ_TRANS_DATA = 0x49,
- SLI4_CMN_GET_CNTL_ADDL_ATTRS = 0x79,
- SLI4_CMN_GET_FUNCTION_CFG = 0xa0,
- SLI4_CMN_GET_PROFILE_CFG = 0xa4,
- SLI4_CMN_SET_PROFILE_CFG = 0xa5,
- SLI4_CMN_GET_PROFILE_LIST = 0xa6,
- SLI4_CMN_GET_ACTIVE_PROFILE = 0xa7,
- SLI4_CMN_SET_ACTIVE_PROFILE = 0xa8,
- SLI4_CMN_READ_OBJECT = 0xab,
- SLI4_CMN_WRITE_OBJECT = 0xac,
- SLI4_CMN_DELETE_OBJECT = 0xae,
- SLI4_CMN_READ_OBJECT_LIST = 0xad,
- SLI4_CMN_SET_DUMP_LOCATION = 0xb8,
- SLI4_CMN_SET_FEATURES = 0xbf,
- SLI4_CMN_GET_RECFG_LINK_INFO = 0xc9,
- SLI4_CMN_SET_RECNG_LINK_ID = 0xca,
- };
- /* DMTF opcode (OPC) values */
- #define DMTF_EXEC_CLP_CMD 0x01
- /*
- * COMMON_FUNCTION_RESET
- *
- * Resets the Port, returning it to a power-on state. This configuration
- * command does not have a payload and should set/expect the lengths to
- * be zero.
- */
- struct sli4_rqst_cmn_function_reset {
- struct sli4_rqst_hdr hdr;
- };
- struct sli4_rsp_cmn_function_reset {
- struct sli4_rsp_hdr hdr;
- };
- /*
- * COMMON_GET_CNTL_ATTRIBUTES
- *
- * Query for information about the SLI Port
- */
- enum sli4_cntrl_attr_flags {
- SLI4_CNTL_ATTR_PORTNUM = 0x3f,
- SLI4_CNTL_ATTR_PORTTYPE = 0xc0,
- };
- struct sli4_rsp_cmn_get_cntl_attributes {
- struct sli4_rsp_hdr hdr;
- u8 version_str[32];
- u8 manufacturer_name[32];
- __le32 supported_modes;
- u8 eprom_version_lo;
- u8 eprom_version_hi;
- __le16 rsvd17;
- __le32 mbx_ds_version;
- __le32 ep_fw_ds_version;
- u8 ncsi_version_str[12];
- __le32 def_extended_timeout;
- u8 model_number[32];
- u8 description[64];
- u8 serial_number[32];
- u8 ip_version_str[32];
- u8 fw_version_str[32];
- u8 bios_version_str[32];
- u8 redboot_version_str[32];
- u8 driver_version_str[32];
- u8 fw_on_flash_version_str[32];
- __le32 functionalities_supported;
- __le16 max_cdb_length;
- u8 asic_revision;
- u8 generational_guid0;
- __le32 generational_guid1_12[3];
- __le16 generational_guid13_14;
- u8 generational_guid15;
- u8 hba_port_count;
- __le16 default_link_down_timeout;
- u8 iscsi_version_min_max;
- u8 multifunctional_device;
- u8 cache_valid;
- u8 hba_status;
- u8 max_domains_supported;
- u8 port_num_type_flags;
- __le32 firmware_post_status;
- __le32 hba_mtu;
- u8 iscsi_features;
- u8 rsvd121[3];
- __le16 pci_vendor_id;
- __le16 pci_device_id;
- __le16 pci_sub_vendor_id;
- __le16 pci_sub_system_id;
- u8 pci_bus_number;
- u8 pci_device_number;
- u8 pci_function_number;
- u8 interface_type;
- __le64 unique_identifier;
- u8 number_of_netfilters;
- u8 rsvd122[3];
- };
- /*
- * COMMON_GET_CNTL_ATTRIBUTES
- *
- * This command queries the controller information from the Flash ROM.
- */
- struct sli4_rqst_cmn_get_cntl_addl_attributes {
- struct sli4_rqst_hdr hdr;
- };
- struct sli4_rsp_cmn_get_cntl_addl_attributes {
- struct sli4_rsp_hdr hdr;
- __le16 ipl_file_number;
- u8 ipl_file_version;
- u8 rsvd4;
- u8 on_die_temperature;
- u8 rsvd5[3];
- __le32 driver_advanced_features_supported;
- __le32 rsvd7[4];
- char universal_bios_version[32];
- char x86_bios_version[32];
- char efi_bios_version[32];
- char fcode_version[32];
- char uefi_bios_version[32];
- char uefi_nic_version[32];
- char uefi_fcode_version[32];
- char uefi_iscsi_version[32];
- char iscsi_x86_bios_version[32];
- char pxe_x86_bios_version[32];
- u8 default_wwpn[8];
- u8 ext_phy_version[32];
- u8 fc_universal_bios_version[32];
- u8 fc_x86_bios_version[32];
- u8 fc_efi_bios_version[32];
- u8 fc_fcode_version[32];
- u8 ext_phy_crc_label[8];
- u8 ipl_file_name[16];
- u8 rsvd139[72];
- };
- /*
- * COMMON_NOP
- *
- * This command does not do anything; it only returns
- * the payload in the completion.
- */
- struct sli4_rqst_cmn_nop {
- struct sli4_rqst_hdr hdr;
- __le32 context[2];
- };
- struct sli4_rsp_cmn_nop {
- struct sli4_rsp_hdr hdr;
- __le32 context[2];
- };
- struct sli4_rqst_cmn_get_resource_extent_info {
- struct sli4_rqst_hdr hdr;
- __le16 resource_type;
- __le16 rsvd16;
- };
- enum sli4_rsc_type {
- SLI4_RSC_TYPE_VFI = 0x20,
- SLI4_RSC_TYPE_VPI = 0x21,
- SLI4_RSC_TYPE_RPI = 0x22,
- SLI4_RSC_TYPE_XRI = 0x23,
- };
- struct sli4_rsp_cmn_get_resource_extent_info {
- struct sli4_rsp_hdr hdr;
- __le16 resource_extent_count;
- __le16 resource_extent_size;
- };
- #define SLI4_128BYTE_WQE_SUPPORT 0x02
- #define GET_Q_CNT_METHOD(m) \
- (((m) & SLI4_PARAM_Q_CNT_MTHD_MASK) >> SLI4_PARAM_Q_CNT_MTHD_SHFT)
- #define GET_Q_CREATE_VERSION(v) \
- (((v) & SLI4_PARAM_QV_MASK) >> SLI4_PARAM_QV_SHIFT)
- enum sli4_rsp_get_params_e {
- /*GENERIC*/
- SLI4_PARAM_Q_CNT_MTHD_SHFT = 24,
- SLI4_PARAM_Q_CNT_MTHD_MASK = 0xf << 24,
- SLI4_PARAM_QV_SHIFT = 14,
- SLI4_PARAM_QV_MASK = 3 << 14,
- /* DW4 */
- SLI4_PARAM_PROTO_TYPE_MASK = 0xff,
- /* DW5 */
- SLI4_PARAM_FT = 1 << 0,
- SLI4_PARAM_SLI_REV_MASK = 0xf << 4,
- SLI4_PARAM_SLI_FAM_MASK = 0xf << 8,
- SLI4_PARAM_IF_TYPE_MASK = 0xf << 12,
- SLI4_PARAM_SLI_HINT1_MASK = 0xff << 16,
- SLI4_PARAM_SLI_HINT2_MASK = 0x1f << 24,
- /* DW6 */
- SLI4_PARAM_EQ_PAGE_CNT_MASK = 0xf << 0,
- SLI4_PARAM_EQE_SZS_MASK = 0xf << 8,
- SLI4_PARAM_EQ_PAGE_SZS_MASK = 0xff << 16,
- /* DW8 */
- SLI4_PARAM_CQ_PAGE_CNT_MASK = 0xf << 0,
- SLI4_PARAM_CQE_SZS_MASK = 0xf << 8,
- SLI4_PARAM_CQ_PAGE_SZS_MASK = 0xff << 16,
- /* DW10 */
- SLI4_PARAM_MQ_PAGE_CNT_MASK = 0xf << 0,
- SLI4_PARAM_MQ_PAGE_SZS_MASK = 0xff << 16,
- /* DW12 */
- SLI4_PARAM_WQ_PAGE_CNT_MASK = 0xf << 0,
- SLI4_PARAM_WQE_SZS_MASK = 0xf << 8,
- SLI4_PARAM_WQ_PAGE_SZS_MASK = 0xff << 16,
- /* DW14 */
- SLI4_PARAM_RQ_PAGE_CNT_MASK = 0xf << 0,
- SLI4_PARAM_RQE_SZS_MASK = 0xf << 8,
- SLI4_PARAM_RQ_PAGE_SZS_MASK = 0xff << 16,
- /* DW15W1*/
- SLI4_PARAM_RQ_DB_WINDOW_MASK = 0xf000,
- /* DW16 */
- SLI4_PARAM_FC = 1 << 0,
- SLI4_PARAM_EXT = 1 << 1,
- SLI4_PARAM_HDRR = 1 << 2,
- SLI4_PARAM_SGLR = 1 << 3,
- SLI4_PARAM_FBRR = 1 << 4,
- SLI4_PARAM_AREG = 1 << 5,
- SLI4_PARAM_TGT = 1 << 6,
- SLI4_PARAM_TERP = 1 << 7,
- SLI4_PARAM_ASSI = 1 << 8,
- SLI4_PARAM_WCHN = 1 << 9,
- SLI4_PARAM_TCCA = 1 << 10,
- SLI4_PARAM_TRTY = 1 << 11,
- SLI4_PARAM_TRIR = 1 << 12,
- SLI4_PARAM_PHOFF = 1 << 13,
- SLI4_PARAM_PHON = 1 << 14,
- SLI4_PARAM_PHWQ = 1 << 15,
- SLI4_PARAM_BOUND_4GA = 1 << 16,
- SLI4_PARAM_RXC = 1 << 17,
- SLI4_PARAM_HLM = 1 << 18,
- SLI4_PARAM_IPR = 1 << 19,
- SLI4_PARAM_RXRI = 1 << 20,
- SLI4_PARAM_SGLC = 1 << 21,
- SLI4_PARAM_TIMM = 1 << 22,
- SLI4_PARAM_TSMM = 1 << 23,
- SLI4_PARAM_OAS = 1 << 25,
- SLI4_PARAM_LC = 1 << 26,
- SLI4_PARAM_AGXF = 1 << 27,
- SLI4_PARAM_LOOPBACK_MASK = 0xf << 28,
- /* DW18 */
- SLI4_PARAM_SGL_PAGE_CNT_MASK = 0xf << 0,
- SLI4_PARAM_SGL_PAGE_SZS_MASK = 0xff << 8,
- SLI4_PARAM_SGL_PP_ALIGN_MASK = 0xff << 16,
- };
- struct sli4_rqst_cmn_get_sli4_params {
- struct sli4_rqst_hdr hdr;
- };
- struct sli4_rsp_cmn_get_sli4_params {
- struct sli4_rsp_hdr hdr;
- __le32 dw4_protocol_type;
- __le32 dw5_sli;
- __le32 dw6_eq_page_cnt;
- __le16 eqe_count_mask;
- __le16 rsvd26;
- __le32 dw8_cq_page_cnt;
- __le16 cqe_count_mask;
- __le16 rsvd34;
- __le32 dw10_mq_page_cnt;
- __le16 mqe_count_mask;
- __le16 rsvd42;
- __le32 dw12_wq_page_cnt;
- __le16 wqe_count_mask;
- __le16 rsvd50;
- __le32 dw14_rq_page_cnt;
- __le16 rqe_count_mask;
- __le16 dw15w1_rq_db_window;
- __le32 dw16_loopback_scope;
- __le32 sge_supported_length;
- __le32 dw18_sgl_page_cnt;
- __le16 min_rq_buffer_size;
- __le16 rsvd75;
- __le32 max_rq_buffer_size;
- __le16 physical_xri_max;
- __le16 physical_rpi_max;
- __le16 physical_vpi_max;
- __le16 physical_vfi_max;
- __le32 rsvd88;
- __le16 frag_num_field_offset;
- __le16 frag_num_field_size;
- __le16 sgl_index_field_offset;
- __le16 sgl_index_field_size;
- __le32 chain_sge_initial_value_lo;
- __le32 chain_sge_initial_value_hi;
- };
- /*Port Types*/
- enum sli4_port_types {
- SLI4_PORT_TYPE_ETH = 0,
- SLI4_PORT_TYPE_FC = 1,
- };
- struct sli4_rqst_cmn_get_port_name {
- struct sli4_rqst_hdr hdr;
- u8 port_type;
- u8 rsvd4[3];
- };
- struct sli4_rsp_cmn_get_port_name {
- struct sli4_rsp_hdr hdr;
- char port_name[4];
- };
- struct sli4_rqst_cmn_write_flashrom {
- struct sli4_rqst_hdr hdr;
- __le32 flash_rom_access_opcode;
- __le32 flash_rom_access_operation_type;
- __le32 data_buffer_size;
- __le32 offset;
- u8 data_buffer[4];
- };
- /*
- * COMMON_READ_TRANSCEIVER_DATA
- *
- * This command reads SFF transceiver data(Format is defined
- * by the SFF-8472 specification).
- */
- struct sli4_rqst_cmn_read_transceiver_data {
- struct sli4_rqst_hdr hdr;
- __le32 page_number;
- __le32 port;
- };
- struct sli4_rsp_cmn_read_transceiver_data {
- struct sli4_rsp_hdr hdr;
- __le32 page_number;
- __le32 port;
- u8 page_data[128];
- u8 page_data_2[128];
- };
- #define SLI4_REQ_DESIRE_READLEN 0xffffff
- struct sli4_rqst_cmn_read_object {
- struct sli4_rqst_hdr hdr;
- __le32 desired_read_length_dword;
- __le32 read_offset;
- u8 object_name[104];
- __le32 host_buffer_descriptor_count;
- struct sli4_bde host_buffer_descriptor[];
- };
- #define RSP_COM_READ_OBJ_EOF 0x80000000
- struct sli4_rsp_cmn_read_object {
- struct sli4_rsp_hdr hdr;
- __le32 actual_read_length;
- __le32 eof_dword;
- };
- enum sli4_rqst_write_object_flags {
- SLI4_RQ_DES_WRITE_LEN = 0xffffff,
- SLI4_RQ_DES_WRITE_LEN_NOC = 0x40000000,
- SLI4_RQ_DES_WRITE_LEN_EOF = 0x80000000,
- };
- struct sli4_rqst_cmn_write_object {
- struct sli4_rqst_hdr hdr;
- __le32 desired_write_len_dword;
- __le32 write_offset;
- u8 object_name[104];
- __le32 host_buffer_descriptor_count;
- struct sli4_bde host_buffer_descriptor[];
- };
- #define RSP_CHANGE_STATUS 0xff
- struct sli4_rsp_cmn_write_object {
- struct sli4_rsp_hdr hdr;
- __le32 actual_write_length;
- __le32 change_status_dword;
- };
- struct sli4_rqst_cmn_delete_object {
- struct sli4_rqst_hdr hdr;
- __le32 rsvd4;
- __le32 rsvd5;
- u8 object_name[104];
- };
- #define SLI4_RQ_OBJ_LIST_READ_LEN 0xffffff
- struct sli4_rqst_cmn_read_object_list {
- struct sli4_rqst_hdr hdr;
- __le32 desired_read_length_dword;
- __le32 read_offset;
- u8 object_name[104];
- __le32 host_buffer_descriptor_count;
- struct sli4_bde host_buffer_descriptor[];
- };
- enum sli4_rqst_set_dump_flags {
- SLI4_CMN_SET_DUMP_BUFFER_LEN = 0xffffff,
- SLI4_CMN_SET_DUMP_FDB = 0x20000000,
- SLI4_CMN_SET_DUMP_BLP = 0x40000000,
- SLI4_CMN_SET_DUMP_QRY = 0x80000000,
- };
- struct sli4_rqst_cmn_set_dump_location {
- struct sli4_rqst_hdr hdr;
- __le32 buffer_length_dword;
- __le32 buf_addr_low;
- __le32 buf_addr_high;
- };
- struct sli4_rsp_cmn_set_dump_location {
- struct sli4_rsp_hdr hdr;
- __le32 buffer_length_dword;
- };
- enum sli4_dump_level {
- SLI4_DUMP_LEVEL_NONE,
- SLI4_CHIP_LEVEL_DUMP,
- SLI4_FUNC_DESC_DUMP,
- };
- enum sli4_dump_state {
- SLI4_DUMP_STATE_NONE,
- SLI4_CHIP_DUMP_STATE_VALID,
- SLI4_FUNC_DUMP_STATE_VALID,
- };
- enum sli4_dump_status {
- SLI4_DUMP_READY_STATUS_NOT_READY,
- SLI4_DUMP_READY_STATUS_DD_PRESENT,
- SLI4_DUMP_READY_STATUS_FDB_PRESENT,
- SLI4_DUMP_READY_STATUS_SKIP_DUMP,
- SLI4_DUMP_READY_STATUS_FAILED = -1,
- };
- enum sli4_set_features {
- SLI4_SET_FEATURES_DIF_SEED = 0x01,
- SLI4_SET_FEATURES_XRI_TIMER = 0x03,
- SLI4_SET_FEATURES_MAX_PCIE_SPEED = 0x04,
- SLI4_SET_FEATURES_FCTL_CHECK = 0x05,
- SLI4_SET_FEATURES_FEC = 0x06,
- SLI4_SET_FEATURES_PCIE_RECV_DETECT = 0x07,
- SLI4_SET_FEATURES_DIF_MEMORY_MODE = 0x08,
- SLI4_SET_FEATURES_DISABLE_SLI_PORT_PAUSE_STATE = 0x09,
- SLI4_SET_FEATURES_ENABLE_PCIE_OPTIONS = 0x0a,
- SLI4_SET_FEAT_CFG_AUTO_XFER_RDY_T10PI = 0x0c,
- SLI4_SET_FEATURES_ENABLE_MULTI_RECEIVE_QUEUE = 0x0d,
- SLI4_SET_FEATURES_SET_FTD_XFER_HINT = 0x0f,
- SLI4_SET_FEATURES_SLI_PORT_HEALTH_CHECK = 0x11,
- };
- struct sli4_rqst_cmn_set_features {
- struct sli4_rqst_hdr hdr;
- __le32 feature;
- __le32 param_len;
- __le32 params[8];
- };
- struct sli4_rqst_cmn_set_features_dif_seed {
- __le16 seed;
- __le16 rsvd16;
- };
- enum sli4_rqst_set_mrq_features {
- SLI4_RQ_MULTIRQ_ISR = 0x1,
- SLI4_RQ_MULTIRQ_AUTOGEN_XFER_RDY = 0x2,
- SLI4_RQ_MULTIRQ_NUM_RQS = 0xff,
- SLI4_RQ_MULTIRQ_RQ_SELECT = 0xf00,
- };
- struct sli4_rqst_cmn_set_features_multirq {
- __le32 auto_gen_xfer_dword;
- __le32 num_rqs_dword;
- };
- enum sli4_rqst_health_check_flags {
- SLI4_RQ_HEALTH_CHECK_ENABLE = 0x1,
- SLI4_RQ_HEALTH_CHECK_QUERY = 0x2,
- };
- struct sli4_rqst_cmn_set_features_health_check {
- __le32 health_check_dword;
- };
- struct sli4_rqst_cmn_set_features_set_fdt_xfer_hint {
- __le32 fdt_xfer_hint;
- };
- struct sli4_rqst_dmtf_exec_clp_cmd {
- struct sli4_rqst_hdr hdr;
- __le32 cmd_buf_length;
- __le32 resp_buf_length;
- __le32 cmd_buf_addr_low;
- __le32 cmd_buf_addr_high;
- __le32 resp_buf_addr_low;
- __le32 resp_buf_addr_high;
- };
- struct sli4_rsp_dmtf_exec_clp_cmd {
- struct sli4_rsp_hdr hdr;
- __le32 rsvd4;
- __le32 resp_length;
- __le32 rsvd6;
- __le32 rsvd7;
- __le32 rsvd8;
- __le32 rsvd9;
- __le32 clp_status;
- __le32 clp_detailed_status;
- };
- #define SLI4_PROTOCOL_FC 0x10
- #define SLI4_PROTOCOL_DEFAULT 0xff
- struct sli4_rspource_descriptor_v1 {
- u8 descriptor_type;
- u8 descriptor_length;
- __le16 rsvd16;
- __le32 type_specific[];
- };
- enum sli4_pcie_desc_flags {
- SLI4_PCIE_DESC_IMM = 0x4000,
- SLI4_PCIE_DESC_NOSV = 0x8000,
- SLI4_PCIE_DESC_PF_NO = 0x3ff0000,
- SLI4_PCIE_DESC_MISSN_ROLE = 0xff,
- SLI4_PCIE_DESC_PCHG = 0x8000000,
- SLI4_PCIE_DESC_SCHG = 0x10000000,
- SLI4_PCIE_DESC_XCHG = 0x20000000,
- SLI4_PCIE_DESC_XROM = 0xc0000000
- };
- struct sli4_pcie_resource_descriptor_v1 {
- u8 descriptor_type;
- u8 descriptor_length;
- __le16 imm_nosv_dword;
- __le32 pf_number_dword;
- __le32 rsvd3;
- u8 sriov_state;
- u8 pf_state;
- u8 pf_type;
- u8 rsvd4;
- __le16 number_of_vfs;
- __le16 rsvd5;
- __le32 mission_roles_dword;
- __le32 rsvd7[16];
- };
- struct sli4_rqst_cmn_get_function_config {
- struct sli4_rqst_hdr hdr;
- };
- struct sli4_rsp_cmn_get_function_config {
- struct sli4_rsp_hdr hdr;
- __le32 desc_count;
- __le32 desc[54];
- };
- /* Link Config Descriptor for link config functions */
- struct sli4_link_config_descriptor {
- u8 link_config_id;
- u8 rsvd1[3];
- __le32 config_description[8];
- };
- #define MAX_LINK_DES 10
- struct sli4_rqst_cmn_get_reconfig_link_info {
- struct sli4_rqst_hdr hdr;
- };
- struct sli4_rsp_cmn_get_reconfig_link_info {
- struct sli4_rsp_hdr hdr;
- u8 active_link_config_id;
- u8 rsvd17;
- u8 next_link_config_id;
- u8 rsvd19;
- __le32 link_configuration_descriptor_count;
- struct sli4_link_config_descriptor
- desc[MAX_LINK_DES];
- };
- enum sli4_set_reconfig_link_flags {
- SLI4_SET_RECONFIG_LINKID_NEXT = 0xff,
- SLI4_SET_RECONFIG_LINKID_FD = 1u << 31,
- };
- struct sli4_rqst_cmn_set_reconfig_link_id {
- struct sli4_rqst_hdr hdr;
- __le32 dw4_flags;
- };
- struct sli4_rsp_cmn_set_reconfig_link_id {
- struct sli4_rsp_hdr hdr;
- };
- struct sli4_rqst_lowlevel_set_watchdog {
- struct sli4_rqst_hdr hdr;
- __le16 watchdog_timeout;
- __le16 rsvd18;
- };
- struct sli4_rsp_lowlevel_set_watchdog {
- struct sli4_rsp_hdr hdr;
- __le32 rsvd;
- };
- /* FC opcode (OPC) values */
- enum sli4_fc_opcodes {
- SLI4_OPC_WQ_CREATE = 0x1,
- SLI4_OPC_WQ_DESTROY = 0x2,
- SLI4_OPC_POST_SGL_PAGES = 0x3,
- SLI4_OPC_RQ_CREATE = 0x5,
- SLI4_OPC_RQ_DESTROY = 0x6,
- SLI4_OPC_READ_FCF_TABLE = 0x8,
- SLI4_OPC_POST_HDR_TEMPLATES = 0xb,
- SLI4_OPC_REDISCOVER_FCF = 0x10,
- };
- /* Use the default CQ associated with the WQ */
- #define SLI4_CQ_DEFAULT 0xffff
- /*
- * POST_SGL_PAGES
- *
- * Register the scatter gather list (SGL) memory and
- * associate it with an XRI.
- */
- struct sli4_rqst_post_sgl_pages {
- struct sli4_rqst_hdr hdr;
- __le16 xri_start;
- __le16 xri_count;
- struct {
- __le32 page0_low;
- __le32 page0_high;
- __le32 page1_low;
- __le32 page1_high;
- } page_set[10];
- };
- struct sli4_rsp_post_sgl_pages {
- struct sli4_rsp_hdr hdr;
- };
- struct sli4_rqst_post_hdr_templates {
- struct sli4_rqst_hdr hdr;
- __le16 rpi_offset;
- __le16 page_count;
- struct sli4_dmaaddr page_descriptor[];
- };
- #define SLI4_HDR_TEMPLATE_SIZE 64
- enum sli4_io_flags {
- /* The XRI associated with this IO is already active */
- SLI4_IO_CONTINUATION = 1 << 0,
- /* Automatically generate a good RSP frame */
- SLI4_IO_AUTO_GOOD_RESPONSE = 1 << 1,
- SLI4_IO_NO_ABORT = 1 << 2,
- /* Set the DNRX bit because no auto xref rdy buffer is posted */
- SLI4_IO_DNRX = 1 << 3,
- };
- enum sli4_callback {
- SLI4_CB_LINK,
- SLI4_CB_MAX,
- };
- enum sli4_link_status {
- SLI4_LINK_STATUS_UP,
- SLI4_LINK_STATUS_DOWN,
- SLI4_LINK_STATUS_NO_ALPA,
- SLI4_LINK_STATUS_MAX,
- };
- enum sli4_link_topology {
- SLI4_LINK_TOPO_NON_FC_AL = 1,
- SLI4_LINK_TOPO_FC_AL,
- SLI4_LINK_TOPO_LOOPBACK_INTERNAL,
- SLI4_LINK_TOPO_LOOPBACK_EXTERNAL,
- SLI4_LINK_TOPO_NONE,
- SLI4_LINK_TOPO_MAX,
- };
- enum sli4_link_medium {
- SLI4_LINK_MEDIUM_ETHERNET,
- SLI4_LINK_MEDIUM_FC,
- SLI4_LINK_MEDIUM_MAX,
- };
- /******Driver specific structures******/
- struct sli4_queue {
- /* Common to all queue types */
- struct efc_dma dma;
- spinlock_t lock; /* Lock to protect the doorbell register
- * writes and queue reads
- */
- u32 index; /* current host entry index */
- u16 size; /* entry size */
- u16 length; /* number of entries */
- u16 n_posted; /* number entries posted for CQ, EQ */
- u16 id; /* Port assigned xQ_ID */
- u8 type; /* queue type ie EQ, CQ, ... */
- void __iomem *db_regaddr; /* register address for the doorbell */
- u16 phase; /* For if_type = 6, this value toggle
- * for each iteration of the queue,
- * a queue entry is valid when a cqe
- * valid bit matches this value
- */
- u32 proc_limit; /* limit CQE processed per iteration */
- u32 posted_limit; /* CQE/EQE process before ring db */
- u32 max_num_processed;
- u64 max_process_time;
- union {
- u32 r_idx; /* "read" index (MQ only) */
- u32 flag;
- } u;
- };
- /* Parameters used to populate WQE*/
- struct sli_bls_params {
- u32 s_id;
- u32 d_id;
- u16 ox_id;
- u16 rx_id;
- u32 rpi;
- u32 vpi;
- bool rpi_registered;
- u8 payload[12];
- u16 xri;
- u16 tag;
- };
- struct sli_els_params {
- u32 s_id;
- u32 d_id;
- u16 ox_id;
- u32 rpi;
- u32 vpi;
- bool rpi_registered;
- u32 xmit_len;
- u32 rsp_len;
- u8 timeout;
- u8 cmd;
- u16 xri;
- u16 tag;
- };
- struct sli_ct_params {
- u8 r_ctl;
- u8 type;
- u8 df_ctl;
- u8 timeout;
- u16 ox_id;
- u32 d_id;
- u32 rpi;
- u32 vpi;
- bool rpi_registered;
- u32 xmit_len;
- u32 rsp_len;
- u16 xri;
- u16 tag;
- };
- struct sli_fcp_tgt_params {
- u32 s_id;
- u32 d_id;
- u32 rpi;
- u32 vpi;
- u32 offset;
- u16 ox_id;
- u16 flags;
- u8 cs_ctl;
- u8 timeout;
- u32 app_id;
- u32 xmit_len;
- u16 xri;
- u16 tag;
- };
- struct sli4_link_event {
- enum sli4_link_status status;
- enum sli4_link_topology topology;
- enum sli4_link_medium medium;
- u32 speed;
- u8 *loop_map;
- u32 fc_id;
- };
- enum sli4_resource {
- SLI4_RSRC_VFI,
- SLI4_RSRC_VPI,
- SLI4_RSRC_RPI,
- SLI4_RSRC_XRI,
- SLI4_RSRC_FCFI,
- SLI4_RSRC_MAX,
- };
- struct sli4_extent {
- u32 number;
- u32 size;
- u32 n_alloc;
- u32 *base;
- unsigned long *use_map;
- u32 map_size;
- };
- struct sli4_queue_info {
- u16 max_qcount[SLI4_QTYPE_MAX];
- u32 max_qentries[SLI4_QTYPE_MAX];
- u16 count_mask[SLI4_QTYPE_MAX];
- u16 count_method[SLI4_QTYPE_MAX];
- u32 qpage_count[SLI4_QTYPE_MAX];
- };
- struct sli4_params {
- u8 has_extents;
- u8 auto_reg;
- u8 auto_xfer_rdy;
- u8 hdr_template_req;
- u8 perf_hint;
- u8 perf_wq_id_association;
- u8 cq_create_version;
- u8 mq_create_version;
- u8 high_login_mode;
- u8 sgl_pre_registered;
- u8 sgl_pre_reg_required;
- u8 t10_dif_inline_capable;
- u8 t10_dif_separate_capable;
- };
- struct sli4 {
- void *os;
- struct pci_dev *pci;
- void __iomem *reg[PCI_STD_NUM_BARS];
- u32 sli_rev;
- u32 sli_family;
- u32 if_type;
- u16 asic_type;
- u16 asic_rev;
- u16 e_d_tov;
- u16 r_a_tov;
- struct sli4_queue_info qinfo;
- u16 link_module_type;
- u8 rq_batch;
- u8 port_number;
- char port_name[2];
- u16 rq_min_buf_size;
- u32 rq_max_buf_size;
- u8 topology;
- u8 wwpn[8];
- u8 wwnn[8];
- u32 fw_rev[2];
- u8 fw_name[2][16];
- char ipl_name[16];
- u32 hw_rev[3];
- char modeldesc[64];
- char bios_version_string[32];
- u32 wqe_size;
- u32 vpd_length;
- /*
- * Tracks the port resources using extents metaphor. For
- * devices that don't implement extents (i.e.
- * has_extents == FALSE), the code models each resource as
- * a single large extent.
- */
- struct sli4_extent ext[SLI4_RSRC_MAX];
- u32 features;
- struct sli4_params params;
- u32 sge_supported_length;
- u32 sgl_page_sizes;
- u32 max_sgl_pages;
- /*
- * Callback functions
- */
- int (*link)(void *ctx, void *event);
- void *link_arg;
- struct efc_dma bmbx;
- /* Save pointer to physical memory descriptor for non-embedded
- * SLI_CONFIG commands for BMBX dumping purposes
- */
- struct efc_dma *bmbx_non_emb_pmd;
- struct efc_dma vpd_data;
- };
- static inline void
- sli_cmd_fill_hdr(struct sli4_rqst_hdr *hdr, u8 opc, u8 sub, u32 ver, __le32 len)
- {
- hdr->opcode = opc;
- hdr->subsystem = sub;
- hdr->dw3_version = cpu_to_le32(ver);
- hdr->request_length = len;
- }
- /**
- * Get / set parameter functions
- */
- static inline u32
- sli_get_max_sge(struct sli4 *sli4)
- {
- return sli4->sge_supported_length;
- }
- static inline u32
- sli_get_max_sgl(struct sli4 *sli4)
- {
- if (sli4->sgl_page_sizes != 1) {
- efc_log_err(sli4, "unsupported SGL page sizes %#x\n",
- sli4->sgl_page_sizes);
- return 0;
- }
- return (sli4->max_sgl_pages * SLI_PAGE_SIZE) / sizeof(struct sli4_sge);
- }
- static inline enum sli4_link_medium
- sli_get_medium(struct sli4 *sli4)
- {
- switch (sli4->topology) {
- case SLI4_READ_CFG_TOPO_FC:
- case SLI4_READ_CFG_TOPO_FC_AL:
- case SLI4_READ_CFG_TOPO_NON_FC_AL:
- return SLI4_LINK_MEDIUM_FC;
- default:
- return SLI4_LINK_MEDIUM_MAX;
- }
- }
- static inline u32
- sli_get_lmt(struct sli4 *sli4)
- {
- return sli4->link_module_type;
- }
- static inline int
- sli_set_topology(struct sli4 *sli4, u32 value)
- {
- int rc = 0;
- switch (value) {
- case SLI4_READ_CFG_TOPO_FC:
- case SLI4_READ_CFG_TOPO_FC_AL:
- case SLI4_READ_CFG_TOPO_NON_FC_AL:
- sli4->topology = value;
- break;
- default:
- efc_log_err(sli4, "unsupported topology %#x\n", value);
- rc = -1;
- }
- return rc;
- }
- static inline u32
- sli_convert_mask_to_count(u32 method, u32 mask)
- {
- u32 count = 0;
- if (method) {
- count = 1 << (31 - __builtin_clz(mask));
- count *= 16;
- } else {
- count = mask;
- }
- return count;
- }
- static inline u32
- sli_reg_read_status(struct sli4 *sli)
- {
- return readl(sli->reg[0] + SLI4_PORT_STATUS_REGOFF);
- }
- static inline int
- sli_fw_error_status(struct sli4 *sli4)
- {
- return (sli_reg_read_status(sli4) & SLI4_PORT_STATUS_ERR) ? 1 : 0;
- }
- static inline u32
- sli_reg_read_err1(struct sli4 *sli)
- {
- return readl(sli->reg[0] + SLI4_PORT_ERROR1);
- }
- static inline u32
- sli_reg_read_err2(struct sli4 *sli)
- {
- return readl(sli->reg[0] + SLI4_PORT_ERROR2);
- }
- static inline int
- sli_fc_rqe_length(struct sli4 *sli4, void *cqe, u32 *len_hdr,
- u32 *len_data)
- {
- struct sli4_fc_async_rcqe *rcqe = cqe;
- *len_hdr = *len_data = 0;
- if (rcqe->status == SLI4_FC_ASYNC_RQ_SUCCESS) {
- *len_hdr = rcqe->hdpl_byte & SLI4_RACQE_HDPL;
- *len_data = le16_to_cpu(rcqe->data_placement_length);
- return 0;
- } else {
- return -1;
- }
- }
- static inline u8
- sli_fc_rqe_fcfi(struct sli4 *sli4, void *cqe)
- {
- u8 code = ((u8 *)cqe)[SLI4_CQE_CODE_OFFSET];
- u8 fcfi = U8_MAX;
- switch (code) {
- case SLI4_CQE_CODE_RQ_ASYNC: {
- struct sli4_fc_async_rcqe *rcqe = cqe;
- fcfi = le16_to_cpu(rcqe->fcfi_rq_id_word) & SLI4_RACQE_FCFI;
- break;
- }
- case SLI4_CQE_CODE_RQ_ASYNC_V1: {
- struct sli4_fc_async_rcqe_v1 *rcqev1 = cqe;
- fcfi = rcqev1->fcfi_byte & SLI4_RACQE_FCFI;
- break;
- }
- case SLI4_CQE_CODE_OPTIMIZED_WRITE_CMD: {
- struct sli4_fc_optimized_write_cmd_cqe *opt_wr = cqe;
- fcfi = opt_wr->flags0 & SLI4_OCQE_FCFI;
- break;
- }
- }
- return fcfi;
- }
- /****************************************************************************
- * Function prototypes
- */
- int
- sli_cmd_config_link(struct sli4 *sli4, void *buf);
- int
- sli_cmd_down_link(struct sli4 *sli4, void *buf);
- int
- sli_cmd_dump_type4(struct sli4 *sli4, void *buf, u16 wki);
- int
- sli_cmd_common_read_transceiver_data(struct sli4 *sli4, void *buf,
- u32 page_num, struct efc_dma *dma);
- int
- sli_cmd_read_link_stats(struct sli4 *sli4, void *buf, u8 req_stats,
- u8 clear_overflow_flags, u8 clear_all_counters);
- int
- sli_cmd_read_status(struct sli4 *sli4, void *buf, u8 clear);
- int
- sli_cmd_init_link(struct sli4 *sli4, void *buf, u32 speed,
- u8 reset_alpa);
- int
- sli_cmd_init_vfi(struct sli4 *sli4, void *buf, u16 vfi, u16 fcfi,
- u16 vpi);
- int
- sli_cmd_init_vpi(struct sli4 *sli4, void *buf, u16 vpi, u16 vfi);
- int
- sli_cmd_post_xri(struct sli4 *sli4, void *buf, u16 base, u16 cnt);
- int
- sli_cmd_release_xri(struct sli4 *sli4, void *buf, u8 num_xri);
- int
- sli_cmd_read_sparm64(struct sli4 *sli4, void *buf,
- struct efc_dma *dma, u16 vpi);
- int
- sli_cmd_read_topology(struct sli4 *sli4, void *buf, struct efc_dma *dma);
- int
- sli_cmd_read_nvparms(struct sli4 *sli4, void *buf);
- int
- sli_cmd_write_nvparms(struct sli4 *sli4, void *buf, u8 *wwpn,
- u8 *wwnn, u8 hard_alpa, u32 preferred_d_id);
- int
- sli_cmd_reg_fcfi(struct sli4 *sli4, void *buf, u16 index,
- struct sli4_cmd_rq_cfg *rq_cfg);
- int
- sli_cmd_reg_fcfi_mrq(struct sli4 *sli4, void *buf, u8 mode, u16 index,
- u8 rq_selection_policy, u8 mrq_bit_mask, u16 num_mrqs,
- struct sli4_cmd_rq_cfg *rq_cfg);
- int
- sli_cmd_reg_rpi(struct sli4 *sli4, void *buf, u32 rpi, u32 vpi, u32 fc_id,
- struct efc_dma *dma, u8 update, u8 enable_t10_pi);
- int
- sli_cmd_unreg_fcfi(struct sli4 *sli4, void *buf, u16 indicator);
- int
- sli_cmd_unreg_rpi(struct sli4 *sli4, void *buf, u16 indicator,
- enum sli4_resource which, u32 fc_id);
- int
- sli_cmd_reg_vpi(struct sli4 *sli4, void *buf, u32 fc_id,
- __be64 sli_wwpn, u16 vpi, u16 vfi, bool update);
- int
- sli_cmd_reg_vfi(struct sli4 *sli4, void *buf, size_t size,
- u16 vfi, u16 fcfi, struct efc_dma dma,
- u16 vpi, __be64 sli_wwpn, u32 fc_id);
- int
- sli_cmd_unreg_vpi(struct sli4 *sli4, void *buf, u16 id, u32 type);
- int
- sli_cmd_unreg_vfi(struct sli4 *sli4, void *buf, u16 idx, u32 type);
- int
- sli_cmd_common_nop(struct sli4 *sli4, void *buf, uint64_t context);
- int
- sli_cmd_common_get_resource_extent_info(struct sli4 *sli4, void *buf,
- u16 rtype);
- int
- sli_cmd_common_get_sli4_parameters(struct sli4 *sli4, void *buf);
- int
- sli_cmd_common_write_object(struct sli4 *sli4, void *buf, u16 noc,
- u16 eof, u32 len, u32 offset, char *name, struct efc_dma *dma);
- int
- sli_cmd_common_delete_object(struct sli4 *sli4, void *buf, char *object_name);
- int
- sli_cmd_common_read_object(struct sli4 *sli4, void *buf,
- u32 length, u32 offset, char *name, struct efc_dma *dma);
- int
- sli_cmd_dmtf_exec_clp_cmd(struct sli4 *sli4, void *buf,
- struct efc_dma *cmd, struct efc_dma *resp);
- int
- sli_cmd_common_set_dump_location(struct sli4 *sli4, void *buf,
- bool query, bool is_buffer_list, struct efc_dma *dma, u8 fdb);
- int
- sli_cmd_common_set_features(struct sli4 *sli4, void *buf,
- u32 feature, u32 param_len, void *parameter);
- int sli_cqe_mq(struct sli4 *sli4, void *buf);
- int sli_cqe_async(struct sli4 *sli4, void *buf);
- int
- sli_setup(struct sli4 *sli4, void *os, struct pci_dev *pdev, void __iomem *r[]);
- void sli_calc_max_qentries(struct sli4 *sli4);
- int sli_init(struct sli4 *sli4);
- int sli_reset(struct sli4 *sli4);
- int sli_fw_reset(struct sli4 *sli4);
- void sli_teardown(struct sli4 *sli4);
- int
- sli_callback(struct sli4 *sli4, enum sli4_callback cb, void *func, void *arg);
- int
- sli_bmbx_command(struct sli4 *sli4);
- int
- __sli_queue_init(struct sli4 *sli4, struct sli4_queue *q, u32 qtype,
- size_t size, u32 n_entries, u32 align);
- int
- __sli_create_queue(struct sli4 *sli4, struct sli4_queue *q);
- int
- sli_eq_modify_delay(struct sli4 *sli4, struct sli4_queue *eq, u32 num_eq,
- u32 shift, u32 delay_mult);
- int
- sli_queue_alloc(struct sli4 *sli4, u32 qtype, struct sli4_queue *q,
- u32 n_entries, struct sli4_queue *assoc);
- int
- sli_cq_alloc_set(struct sli4 *sli4, struct sli4_queue *qs[], u32 num_cqs,
- u32 n_entries, struct sli4_queue *eqs[]);
- int
- sli_get_queue_entry_size(struct sli4 *sli4, u32 qtype);
- int
- sli_queue_free(struct sli4 *sli4, struct sli4_queue *q, u32 destroy_queues,
- u32 free_memory);
- int
- sli_queue_eq_arm(struct sli4 *sli4, struct sli4_queue *q, bool arm);
- int
- sli_queue_arm(struct sli4 *sli4, struct sli4_queue *q, bool arm);
- int
- sli_wq_write(struct sli4 *sli4, struct sli4_queue *q, u8 *entry);
- int
- sli_mq_write(struct sli4 *sli4, struct sli4_queue *q, u8 *entry);
- int
- sli_rq_write(struct sli4 *sli4, struct sli4_queue *q, u8 *entry);
- int
- sli_eq_read(struct sli4 *sli4, struct sli4_queue *q, u8 *entry);
- int
- sli_cq_read(struct sli4 *sli4, struct sli4_queue *q, u8 *entry);
- int
- sli_mq_read(struct sli4 *sli4, struct sli4_queue *q, u8 *entry);
- int
- sli_resource_alloc(struct sli4 *sli4, enum sli4_resource rtype, u32 *rid,
- u32 *index);
- int
- sli_resource_free(struct sli4 *sli4, enum sli4_resource rtype, u32 rid);
- int
- sli_resource_reset(struct sli4 *sli4, enum sli4_resource rtype);
- int
- sli_eq_parse(struct sli4 *sli4, u8 *buf, u16 *cq_id);
- int
- sli_cq_parse(struct sli4 *sli4, struct sli4_queue *cq, u8 *cqe,
- enum sli4_qentry *etype, u16 *q_id);
- int sli_raise_ue(struct sli4 *sli4, u8 dump);
- int sli_dump_is_ready(struct sli4 *sli4);
- bool sli_reset_required(struct sli4 *sli4);
- bool sli_fw_ready(struct sli4 *sli4);
- int
- sli_fc_process_link_attention(struct sli4 *sli4, void *acqe);
- int
- sli_fc_cqe_parse(struct sli4 *sli4, struct sli4_queue *cq,
- u8 *cqe, enum sli4_qentry *etype,
- u16 *rid);
- u32 sli_fc_response_length(struct sli4 *sli4, u8 *cqe);
- u32 sli_fc_io_length(struct sli4 *sli4, u8 *cqe);
- int sli_fc_els_did(struct sli4 *sli4, u8 *cqe, u32 *d_id);
- u32 sli_fc_ext_status(struct sli4 *sli4, u8 *cqe);
- int
- sli_fc_rqe_rqid_and_index(struct sli4 *sli4, u8 *cqe, u16 *rq_id, u32 *index);
- int
- sli_cmd_wq_create(struct sli4 *sli4, void *buf,
- struct efc_dma *qmem, u16 cq_id);
- int sli_cmd_post_sgl_pages(struct sli4 *sli4, void *buf, u16 xri,
- u32 xri_count, struct efc_dma *page0[], struct efc_dma *page1[],
- struct efc_dma *dma);
- int
- sli_cmd_post_hdr_templates(struct sli4 *sli4, void *buf,
- struct efc_dma *dma, u16 rpi, struct efc_dma *payload_dma);
- int
- sli_fc_rq_alloc(struct sli4 *sli4, struct sli4_queue *q, u32 n_entries,
- u32 buffer_size, struct sli4_queue *cq, bool is_hdr);
- int
- sli_fc_rq_set_alloc(struct sli4 *sli4, u32 num_rq_pairs, struct sli4_queue *q[],
- u32 base_cq_id, u32 num, u32 hdr_buf_size, u32 data_buf_size);
- u32 sli_fc_get_rpi_requirements(struct sli4 *sli4, u32 n_rpi);
- int
- sli_abort_wqe(struct sli4 *sli4, void *buf, enum sli4_abort_type type,
- bool send_abts, u32 ids, u32 mask, u16 tag, u16 cq_id);
- int
- sli_send_frame_wqe(struct sli4 *sli4, void *buf, u8 sof, u8 eof,
- u32 *hdr, struct efc_dma *payload, u32 req_len, u8 timeout,
- u16 xri, u16 req_tag);
- int
- sli_xmit_els_rsp64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *rsp,
- struct sli_els_params *params);
- int
- sli_els_request64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *sgl,
- struct sli_els_params *params);
- int
- sli_fcp_icmnd64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *sgl, u16 xri,
- u16 tag, u16 cq_id, u32 rpi, u32 rnode_fcid, u8 timeout);
- int
- sli_fcp_iread64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *sgl,
- u32 first_data_sge, u32 xfer_len, u16 xri,
- u16 tag, u16 cq_id, u32 rpi, u32 rnode_fcid, u8 dif, u8 bs,
- u8 timeout);
- int
- sli_fcp_iwrite64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *sgl,
- u32 first_data_sge, u32 xfer_len,
- u32 first_burst, u16 xri, u16 tag, u16 cq_id, u32 rpi,
- u32 rnode_fcid, u8 dif, u8 bs, u8 timeout);
- int
- sli_fcp_treceive64_wqe(struct sli4 *sli, void *buf, struct efc_dma *sgl,
- u32 first_data_sge, u16 cq_id, u8 dif, u8 bs,
- struct sli_fcp_tgt_params *params);
- int
- sli_fcp_cont_treceive64_wqe(struct sli4 *sli, void *buf, struct efc_dma *sgl,
- u32 first_data_sge, u16 sec_xri, u16 cq_id, u8 dif,
- u8 bs, struct sli_fcp_tgt_params *params);
- int
- sli_fcp_trsp64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *sgl,
- u16 cq_id, u8 port_owned, struct sli_fcp_tgt_params *params);
- int
- sli_fcp_tsend64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *sgl,
- u32 first_data_sge, u16 cq_id, u8 dif, u8 bs,
- struct sli_fcp_tgt_params *params);
- int
- sli_gen_request64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *sgl,
- struct sli_ct_params *params);
- int
- sli_xmit_bls_rsp64_wqe(struct sli4 *sli4, void *buf,
- struct sli_bls_payload *payload, struct sli_bls_params *params);
- int
- sli_xmit_sequence64_wqe(struct sli4 *sli4, void *buf, struct efc_dma *payload,
- struct sli_ct_params *params);
- int
- sli_requeue_xri_wqe(struct sli4 *sli4, void *buf, u16 xri, u16 tag, u16 cq_id);
- void
- sli4_cmd_lowlevel_set_watchdog(struct sli4 *sli4, void *buf, size_t size,
- u16 timeout);
- const char *sli_fc_get_status_string(u32 status);
- #endif /* !_SLI4_H */
|