igc_main.c 194 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675
  1. // SPDX-License-Identifier: GPL-2.0
  2. /* Copyright (c) 2018 Intel Corporation */
  3. #include <linux/module.h>
  4. #include <linux/types.h>
  5. #include <linux/if_vlan.h>
  6. #include <linux/tcp.h>
  7. #include <linux/udp.h>
  8. #include <linux/ip.h>
  9. #include <linux/pm_runtime.h>
  10. #include <net/pkt_sched.h>
  11. #include <linux/bpf_trace.h>
  12. #include <net/xdp_sock_drv.h>
  13. #include <linux/pci.h>
  14. #include <linux/mdio.h>
  15. #include <net/ipv6.h>
  16. #include "igc.h"
  17. #include "igc_hw.h"
  18. #include "igc_tsn.h"
  19. #include "igc_xdp.h"
  20. #define DRV_SUMMARY "Intel(R) 2.5G Ethernet Linux Driver"
  21. #define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_LINK)
  22. #define IGC_XDP_PASS 0
  23. #define IGC_XDP_CONSUMED BIT(0)
  24. #define IGC_XDP_TX BIT(1)
  25. #define IGC_XDP_REDIRECT BIT(2)
  26. static int debug = -1;
  27. MODULE_DESCRIPTION(DRV_SUMMARY);
  28. MODULE_LICENSE("GPL v2");
  29. module_param(debug, int, 0);
  30. MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
  31. char igc_driver_name[] = "igc";
  32. static const char igc_driver_string[] = DRV_SUMMARY;
  33. static const char igc_copyright[] =
  34. "Copyright(c) 2018 Intel Corporation.";
  35. static const struct igc_info *igc_info_tbl[] = {
  36. [board_base] = &igc_base_info,
  37. };
  38. static const struct pci_device_id igc_pci_tbl[] = {
  39. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_LM), board_base },
  40. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_V), board_base },
  41. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_I), board_base },
  42. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I220_V), board_base },
  43. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_K), board_base },
  44. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_K2), board_base },
  45. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I226_K), board_base },
  46. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_LMVP), board_base },
  47. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I226_LMVP), board_base },
  48. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_IT), board_base },
  49. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I226_LM), board_base },
  50. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I226_V), board_base },
  51. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I226_IT), board_base },
  52. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I221_V), board_base },
  53. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I226_BLANK_NVM), board_base },
  54. { PCI_VDEVICE(INTEL, IGC_DEV_ID_I225_BLANK_NVM), board_base },
  55. /* required last entry */
  56. {0, }
  57. };
  58. MODULE_DEVICE_TABLE(pci, igc_pci_tbl);
  59. enum latency_range {
  60. lowest_latency = 0,
  61. low_latency = 1,
  62. bulk_latency = 2,
  63. latency_invalid = 255
  64. };
  65. void igc_reset(struct igc_adapter *adapter)
  66. {
  67. struct net_device *dev = adapter->netdev;
  68. struct igc_hw *hw = &adapter->hw;
  69. struct igc_fc_info *fc = &hw->fc;
  70. u32 pba, hwm;
  71. /* Repartition PBA for greater than 9k MTU if required */
  72. pba = IGC_PBA_34K;
  73. /* flow control settings
  74. * The high water mark must be low enough to fit one full frame
  75. * after transmitting the pause frame. As such we must have enough
  76. * space to allow for us to complete our current transmit and then
  77. * receive the frame that is in progress from the link partner.
  78. * Set it to:
  79. * - the full Rx FIFO size minus one full Tx plus one full Rx frame
  80. */
  81. hwm = (pba << 10) - (adapter->max_frame_size + MAX_JUMBO_FRAME_SIZE);
  82. fc->high_water = hwm & 0xFFFFFFF0; /* 16-byte granularity */
  83. fc->low_water = fc->high_water - 16;
  84. fc->pause_time = 0xFFFF;
  85. fc->send_xon = 1;
  86. fc->current_mode = fc->requested_mode;
  87. hw->mac.ops.reset_hw(hw);
  88. if (hw->mac.ops.init_hw(hw))
  89. netdev_err(dev, "Error on hardware initialization\n");
  90. /* Re-establish EEE setting */
  91. igc_set_eee_i225(hw, true, true, true);
  92. if (!netif_running(adapter->netdev))
  93. igc_power_down_phy_copper_base(&adapter->hw);
  94. /* Enable HW to recognize an 802.1Q VLAN Ethernet packet */
  95. wr32(IGC_VET, ETH_P_8021Q);
  96. /* Re-enable PTP, where applicable. */
  97. igc_ptp_reset(adapter);
  98. /* Re-enable TSN offloading, where applicable. */
  99. igc_tsn_reset(adapter);
  100. igc_get_phy_info(hw);
  101. }
  102. /**
  103. * igc_power_up_link - Power up the phy link
  104. * @adapter: address of board private structure
  105. */
  106. static void igc_power_up_link(struct igc_adapter *adapter)
  107. {
  108. igc_reset_phy(&adapter->hw);
  109. igc_power_up_phy_copper(&adapter->hw);
  110. igc_setup_link(&adapter->hw);
  111. }
  112. /**
  113. * igc_release_hw_control - release control of the h/w to f/w
  114. * @adapter: address of board private structure
  115. *
  116. * igc_release_hw_control resets CTRL_EXT:DRV_LOAD bit.
  117. * For ASF and Pass Through versions of f/w this means that the
  118. * driver is no longer loaded.
  119. */
  120. static void igc_release_hw_control(struct igc_adapter *adapter)
  121. {
  122. struct igc_hw *hw = &adapter->hw;
  123. u32 ctrl_ext;
  124. if (!pci_device_is_present(adapter->pdev))
  125. return;
  126. /* Let firmware take over control of h/w */
  127. ctrl_ext = rd32(IGC_CTRL_EXT);
  128. wr32(IGC_CTRL_EXT,
  129. ctrl_ext & ~IGC_CTRL_EXT_DRV_LOAD);
  130. }
  131. /**
  132. * igc_get_hw_control - get control of the h/w from f/w
  133. * @adapter: address of board private structure
  134. *
  135. * igc_get_hw_control sets CTRL_EXT:DRV_LOAD bit.
  136. * For ASF and Pass Through versions of f/w this means that
  137. * the driver is loaded.
  138. */
  139. static void igc_get_hw_control(struct igc_adapter *adapter)
  140. {
  141. struct igc_hw *hw = &adapter->hw;
  142. u32 ctrl_ext;
  143. /* Let firmware know the driver has taken over */
  144. ctrl_ext = rd32(IGC_CTRL_EXT);
  145. wr32(IGC_CTRL_EXT,
  146. ctrl_ext | IGC_CTRL_EXT_DRV_LOAD);
  147. }
  148. static void igc_unmap_tx_buffer(struct device *dev, struct igc_tx_buffer *buf)
  149. {
  150. dma_unmap_single(dev, dma_unmap_addr(buf, dma),
  151. dma_unmap_len(buf, len), DMA_TO_DEVICE);
  152. dma_unmap_len_set(buf, len, 0);
  153. }
  154. /**
  155. * igc_clean_tx_ring - Free Tx Buffers
  156. * @tx_ring: ring to be cleaned
  157. */
  158. static void igc_clean_tx_ring(struct igc_ring *tx_ring)
  159. {
  160. u16 i = tx_ring->next_to_clean;
  161. struct igc_tx_buffer *tx_buffer = &tx_ring->tx_buffer_info[i];
  162. u32 xsk_frames = 0;
  163. while (i != tx_ring->next_to_use) {
  164. union igc_adv_tx_desc *eop_desc, *tx_desc;
  165. switch (tx_buffer->type) {
  166. case IGC_TX_BUFFER_TYPE_XSK:
  167. xsk_frames++;
  168. break;
  169. case IGC_TX_BUFFER_TYPE_XDP:
  170. xdp_return_frame(tx_buffer->xdpf);
  171. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  172. break;
  173. case IGC_TX_BUFFER_TYPE_SKB:
  174. dev_kfree_skb_any(tx_buffer->skb);
  175. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  176. break;
  177. default:
  178. netdev_warn_once(tx_ring->netdev, "Unknown Tx buffer type\n");
  179. break;
  180. }
  181. /* check for eop_desc to determine the end of the packet */
  182. eop_desc = tx_buffer->next_to_watch;
  183. tx_desc = IGC_TX_DESC(tx_ring, i);
  184. /* unmap remaining buffers */
  185. while (tx_desc != eop_desc) {
  186. tx_buffer++;
  187. tx_desc++;
  188. i++;
  189. if (unlikely(i == tx_ring->count)) {
  190. i = 0;
  191. tx_buffer = tx_ring->tx_buffer_info;
  192. tx_desc = IGC_TX_DESC(tx_ring, 0);
  193. }
  194. /* unmap any remaining paged data */
  195. if (dma_unmap_len(tx_buffer, len))
  196. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  197. }
  198. tx_buffer->next_to_watch = NULL;
  199. /* move us one more past the eop_desc for start of next pkt */
  200. tx_buffer++;
  201. i++;
  202. if (unlikely(i == tx_ring->count)) {
  203. i = 0;
  204. tx_buffer = tx_ring->tx_buffer_info;
  205. }
  206. }
  207. if (tx_ring->xsk_pool && xsk_frames)
  208. xsk_tx_completed(tx_ring->xsk_pool, xsk_frames);
  209. /* reset BQL for queue */
  210. netdev_tx_reset_queue(txring_txq(tx_ring));
  211. /* Zero out the buffer ring */
  212. memset(tx_ring->tx_buffer_info, 0,
  213. sizeof(*tx_ring->tx_buffer_info) * tx_ring->count);
  214. /* Zero out the descriptor ring */
  215. memset(tx_ring->desc, 0, tx_ring->size);
  216. /* reset next_to_use and next_to_clean */
  217. tx_ring->next_to_use = 0;
  218. tx_ring->next_to_clean = 0;
  219. }
  220. /**
  221. * igc_free_tx_resources - Free Tx Resources per Queue
  222. * @tx_ring: Tx descriptor ring for a specific queue
  223. *
  224. * Free all transmit software resources
  225. */
  226. void igc_free_tx_resources(struct igc_ring *tx_ring)
  227. {
  228. igc_disable_tx_ring(tx_ring);
  229. vfree(tx_ring->tx_buffer_info);
  230. tx_ring->tx_buffer_info = NULL;
  231. /* if not set, then don't free */
  232. if (!tx_ring->desc)
  233. return;
  234. dma_free_coherent(tx_ring->dev, tx_ring->size,
  235. tx_ring->desc, tx_ring->dma);
  236. tx_ring->desc = NULL;
  237. }
  238. /**
  239. * igc_free_all_tx_resources - Free Tx Resources for All Queues
  240. * @adapter: board private structure
  241. *
  242. * Free all transmit software resources
  243. */
  244. static void igc_free_all_tx_resources(struct igc_adapter *adapter)
  245. {
  246. int i;
  247. for (i = 0; i < adapter->num_tx_queues; i++)
  248. igc_free_tx_resources(adapter->tx_ring[i]);
  249. }
  250. /**
  251. * igc_clean_all_tx_rings - Free Tx Buffers for all queues
  252. * @adapter: board private structure
  253. */
  254. static void igc_clean_all_tx_rings(struct igc_adapter *adapter)
  255. {
  256. int i;
  257. for (i = 0; i < adapter->num_tx_queues; i++)
  258. if (adapter->tx_ring[i])
  259. igc_clean_tx_ring(adapter->tx_ring[i]);
  260. }
  261. static void igc_disable_tx_ring_hw(struct igc_ring *ring)
  262. {
  263. struct igc_hw *hw = &ring->q_vector->adapter->hw;
  264. u8 idx = ring->reg_idx;
  265. u32 txdctl;
  266. txdctl = rd32(IGC_TXDCTL(idx));
  267. txdctl &= ~IGC_TXDCTL_QUEUE_ENABLE;
  268. txdctl |= IGC_TXDCTL_SWFLUSH;
  269. wr32(IGC_TXDCTL(idx), txdctl);
  270. }
  271. /**
  272. * igc_disable_all_tx_rings_hw - Disable all transmit queue operation
  273. * @adapter: board private structure
  274. */
  275. static void igc_disable_all_tx_rings_hw(struct igc_adapter *adapter)
  276. {
  277. int i;
  278. for (i = 0; i < adapter->num_tx_queues; i++) {
  279. struct igc_ring *tx_ring = adapter->tx_ring[i];
  280. igc_disable_tx_ring_hw(tx_ring);
  281. }
  282. }
  283. /**
  284. * igc_setup_tx_resources - allocate Tx resources (Descriptors)
  285. * @tx_ring: tx descriptor ring (for a specific queue) to setup
  286. *
  287. * Return 0 on success, negative on failure
  288. */
  289. int igc_setup_tx_resources(struct igc_ring *tx_ring)
  290. {
  291. struct net_device *ndev = tx_ring->netdev;
  292. struct device *dev = tx_ring->dev;
  293. int size = 0;
  294. size = sizeof(struct igc_tx_buffer) * tx_ring->count;
  295. tx_ring->tx_buffer_info = vzalloc(size);
  296. if (!tx_ring->tx_buffer_info)
  297. goto err;
  298. /* round up to nearest 4K */
  299. tx_ring->size = tx_ring->count * sizeof(union igc_adv_tx_desc);
  300. tx_ring->size = ALIGN(tx_ring->size, 4096);
  301. tx_ring->desc = dma_alloc_coherent(dev, tx_ring->size,
  302. &tx_ring->dma, GFP_KERNEL);
  303. if (!tx_ring->desc)
  304. goto err;
  305. tx_ring->next_to_use = 0;
  306. tx_ring->next_to_clean = 0;
  307. return 0;
  308. err:
  309. vfree(tx_ring->tx_buffer_info);
  310. netdev_err(ndev, "Unable to allocate memory for Tx descriptor ring\n");
  311. return -ENOMEM;
  312. }
  313. /**
  314. * igc_setup_all_tx_resources - wrapper to allocate Tx resources for all queues
  315. * @adapter: board private structure
  316. *
  317. * Return 0 on success, negative on failure
  318. */
  319. static int igc_setup_all_tx_resources(struct igc_adapter *adapter)
  320. {
  321. struct net_device *dev = adapter->netdev;
  322. int i, err = 0;
  323. for (i = 0; i < adapter->num_tx_queues; i++) {
  324. err = igc_setup_tx_resources(adapter->tx_ring[i]);
  325. if (err) {
  326. netdev_err(dev, "Error on Tx queue %u setup\n", i);
  327. for (i--; i >= 0; i--)
  328. igc_free_tx_resources(adapter->tx_ring[i]);
  329. break;
  330. }
  331. }
  332. return err;
  333. }
  334. static void igc_clean_rx_ring_page_shared(struct igc_ring *rx_ring)
  335. {
  336. u16 i = rx_ring->next_to_clean;
  337. dev_kfree_skb(rx_ring->skb);
  338. rx_ring->skb = NULL;
  339. /* Free all the Rx ring sk_buffs */
  340. while (i != rx_ring->next_to_alloc) {
  341. struct igc_rx_buffer *buffer_info = &rx_ring->rx_buffer_info[i];
  342. /* Invalidate cache lines that may have been written to by
  343. * device so that we avoid corrupting memory.
  344. */
  345. dma_sync_single_range_for_cpu(rx_ring->dev,
  346. buffer_info->dma,
  347. buffer_info->page_offset,
  348. igc_rx_bufsz(rx_ring),
  349. DMA_FROM_DEVICE);
  350. /* free resources associated with mapping */
  351. dma_unmap_page_attrs(rx_ring->dev,
  352. buffer_info->dma,
  353. igc_rx_pg_size(rx_ring),
  354. DMA_FROM_DEVICE,
  355. IGC_RX_DMA_ATTR);
  356. __page_frag_cache_drain(buffer_info->page,
  357. buffer_info->pagecnt_bias);
  358. i++;
  359. if (i == rx_ring->count)
  360. i = 0;
  361. }
  362. }
  363. static void igc_clean_rx_ring_xsk_pool(struct igc_ring *ring)
  364. {
  365. struct igc_rx_buffer *bi;
  366. u16 i;
  367. for (i = 0; i < ring->count; i++) {
  368. bi = &ring->rx_buffer_info[i];
  369. if (!bi->xdp)
  370. continue;
  371. xsk_buff_free(bi->xdp);
  372. bi->xdp = NULL;
  373. }
  374. }
  375. /**
  376. * igc_clean_rx_ring - Free Rx Buffers per Queue
  377. * @ring: ring to free buffers from
  378. */
  379. static void igc_clean_rx_ring(struct igc_ring *ring)
  380. {
  381. if (ring->xsk_pool)
  382. igc_clean_rx_ring_xsk_pool(ring);
  383. else
  384. igc_clean_rx_ring_page_shared(ring);
  385. clear_ring_uses_large_buffer(ring);
  386. ring->next_to_alloc = 0;
  387. ring->next_to_clean = 0;
  388. ring->next_to_use = 0;
  389. }
  390. /**
  391. * igc_clean_all_rx_rings - Free Rx Buffers for all queues
  392. * @adapter: board private structure
  393. */
  394. static void igc_clean_all_rx_rings(struct igc_adapter *adapter)
  395. {
  396. int i;
  397. for (i = 0; i < adapter->num_rx_queues; i++)
  398. if (adapter->rx_ring[i])
  399. igc_clean_rx_ring(adapter->rx_ring[i]);
  400. }
  401. /**
  402. * igc_free_rx_resources - Free Rx Resources
  403. * @rx_ring: ring to clean the resources from
  404. *
  405. * Free all receive software resources
  406. */
  407. void igc_free_rx_resources(struct igc_ring *rx_ring)
  408. {
  409. igc_clean_rx_ring(rx_ring);
  410. xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
  411. vfree(rx_ring->rx_buffer_info);
  412. rx_ring->rx_buffer_info = NULL;
  413. /* if not set, then don't free */
  414. if (!rx_ring->desc)
  415. return;
  416. dma_free_coherent(rx_ring->dev, rx_ring->size,
  417. rx_ring->desc, rx_ring->dma);
  418. rx_ring->desc = NULL;
  419. }
  420. /**
  421. * igc_free_all_rx_resources - Free Rx Resources for All Queues
  422. * @adapter: board private structure
  423. *
  424. * Free all receive software resources
  425. */
  426. static void igc_free_all_rx_resources(struct igc_adapter *adapter)
  427. {
  428. int i;
  429. for (i = 0; i < adapter->num_rx_queues; i++)
  430. igc_free_rx_resources(adapter->rx_ring[i]);
  431. }
  432. /**
  433. * igc_setup_rx_resources - allocate Rx resources (Descriptors)
  434. * @rx_ring: rx descriptor ring (for a specific queue) to setup
  435. *
  436. * Returns 0 on success, negative on failure
  437. */
  438. int igc_setup_rx_resources(struct igc_ring *rx_ring)
  439. {
  440. struct net_device *ndev = rx_ring->netdev;
  441. struct device *dev = rx_ring->dev;
  442. u8 index = rx_ring->queue_index;
  443. int size, desc_len, res;
  444. /* XDP RX-queue info */
  445. if (xdp_rxq_info_is_reg(&rx_ring->xdp_rxq))
  446. xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
  447. res = xdp_rxq_info_reg(&rx_ring->xdp_rxq, ndev, index,
  448. rx_ring->q_vector->napi.napi_id);
  449. if (res < 0) {
  450. netdev_err(ndev, "Failed to register xdp_rxq index %u\n",
  451. index);
  452. return res;
  453. }
  454. size = sizeof(struct igc_rx_buffer) * rx_ring->count;
  455. rx_ring->rx_buffer_info = vzalloc(size);
  456. if (!rx_ring->rx_buffer_info)
  457. goto err;
  458. desc_len = sizeof(union igc_adv_rx_desc);
  459. /* Round up to nearest 4K */
  460. rx_ring->size = rx_ring->count * desc_len;
  461. rx_ring->size = ALIGN(rx_ring->size, 4096);
  462. rx_ring->desc = dma_alloc_coherent(dev, rx_ring->size,
  463. &rx_ring->dma, GFP_KERNEL);
  464. if (!rx_ring->desc)
  465. goto err;
  466. rx_ring->next_to_alloc = 0;
  467. rx_ring->next_to_clean = 0;
  468. rx_ring->next_to_use = 0;
  469. return 0;
  470. err:
  471. xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
  472. vfree(rx_ring->rx_buffer_info);
  473. rx_ring->rx_buffer_info = NULL;
  474. netdev_err(ndev, "Unable to allocate memory for Rx descriptor ring\n");
  475. return -ENOMEM;
  476. }
  477. /**
  478. * igc_setup_all_rx_resources - wrapper to allocate Rx resources
  479. * (Descriptors) for all queues
  480. * @adapter: board private structure
  481. *
  482. * Return 0 on success, negative on failure
  483. */
  484. static int igc_setup_all_rx_resources(struct igc_adapter *adapter)
  485. {
  486. struct net_device *dev = adapter->netdev;
  487. int i, err = 0;
  488. for (i = 0; i < adapter->num_rx_queues; i++) {
  489. err = igc_setup_rx_resources(adapter->rx_ring[i]);
  490. if (err) {
  491. netdev_err(dev, "Error on Rx queue %u setup\n", i);
  492. for (i--; i >= 0; i--)
  493. igc_free_rx_resources(adapter->rx_ring[i]);
  494. break;
  495. }
  496. }
  497. return err;
  498. }
  499. static struct xsk_buff_pool *igc_get_xsk_pool(struct igc_adapter *adapter,
  500. struct igc_ring *ring)
  501. {
  502. if (!igc_xdp_is_enabled(adapter) ||
  503. !test_bit(IGC_RING_FLAG_AF_XDP_ZC, &ring->flags))
  504. return NULL;
  505. return xsk_get_pool_from_qid(ring->netdev, ring->queue_index);
  506. }
  507. /**
  508. * igc_configure_rx_ring - Configure a receive ring after Reset
  509. * @adapter: board private structure
  510. * @ring: receive ring to be configured
  511. *
  512. * Configure the Rx unit of the MAC after a reset.
  513. */
  514. static void igc_configure_rx_ring(struct igc_adapter *adapter,
  515. struct igc_ring *ring)
  516. {
  517. struct igc_hw *hw = &adapter->hw;
  518. union igc_adv_rx_desc *rx_desc;
  519. int reg_idx = ring->reg_idx;
  520. u32 srrctl = 0, rxdctl = 0;
  521. u64 rdba = ring->dma;
  522. u32 buf_size;
  523. xdp_rxq_info_unreg_mem_model(&ring->xdp_rxq);
  524. ring->xsk_pool = igc_get_xsk_pool(adapter, ring);
  525. if (ring->xsk_pool) {
  526. WARN_ON(xdp_rxq_info_reg_mem_model(&ring->xdp_rxq,
  527. MEM_TYPE_XSK_BUFF_POOL,
  528. NULL));
  529. xsk_pool_set_rxq_info(ring->xsk_pool, &ring->xdp_rxq);
  530. } else {
  531. WARN_ON(xdp_rxq_info_reg_mem_model(&ring->xdp_rxq,
  532. MEM_TYPE_PAGE_SHARED,
  533. NULL));
  534. }
  535. if (igc_xdp_is_enabled(adapter))
  536. set_ring_uses_large_buffer(ring);
  537. /* disable the queue */
  538. wr32(IGC_RXDCTL(reg_idx), 0);
  539. /* Set DMA base address registers */
  540. wr32(IGC_RDBAL(reg_idx),
  541. rdba & 0x00000000ffffffffULL);
  542. wr32(IGC_RDBAH(reg_idx), rdba >> 32);
  543. wr32(IGC_RDLEN(reg_idx),
  544. ring->count * sizeof(union igc_adv_rx_desc));
  545. /* initialize head and tail */
  546. ring->tail = adapter->io_addr + IGC_RDT(reg_idx);
  547. wr32(IGC_RDH(reg_idx), 0);
  548. writel(0, ring->tail);
  549. /* reset next-to- use/clean to place SW in sync with hardware */
  550. ring->next_to_clean = 0;
  551. ring->next_to_use = 0;
  552. if (ring->xsk_pool)
  553. buf_size = xsk_pool_get_rx_frame_size(ring->xsk_pool);
  554. else if (ring_uses_large_buffer(ring))
  555. buf_size = IGC_RXBUFFER_3072;
  556. else
  557. buf_size = IGC_RXBUFFER_2048;
  558. srrctl = rd32(IGC_SRRCTL(reg_idx));
  559. srrctl &= ~(IGC_SRRCTL_BSIZEPKT_MASK | IGC_SRRCTL_BSIZEHDR_MASK |
  560. IGC_SRRCTL_DESCTYPE_MASK);
  561. srrctl |= IGC_SRRCTL_BSIZEHDR(IGC_RX_HDR_LEN);
  562. srrctl |= IGC_SRRCTL_BSIZEPKT(buf_size);
  563. srrctl |= IGC_SRRCTL_DESCTYPE_ADV_ONEBUF;
  564. wr32(IGC_SRRCTL(reg_idx), srrctl);
  565. rxdctl |= IGC_RX_PTHRESH;
  566. rxdctl |= IGC_RX_HTHRESH << 8;
  567. rxdctl |= IGC_RX_WTHRESH << 16;
  568. /* initialize rx_buffer_info */
  569. memset(ring->rx_buffer_info, 0,
  570. sizeof(struct igc_rx_buffer) * ring->count);
  571. /* initialize Rx descriptor 0 */
  572. rx_desc = IGC_RX_DESC(ring, 0);
  573. rx_desc->wb.upper.length = 0;
  574. /* enable receive descriptor fetching */
  575. rxdctl |= IGC_RXDCTL_QUEUE_ENABLE;
  576. wr32(IGC_RXDCTL(reg_idx), rxdctl);
  577. }
  578. /**
  579. * igc_configure_rx - Configure receive Unit after Reset
  580. * @adapter: board private structure
  581. *
  582. * Configure the Rx unit of the MAC after a reset.
  583. */
  584. static void igc_configure_rx(struct igc_adapter *adapter)
  585. {
  586. int i;
  587. /* Setup the HW Rx Head and Tail Descriptor Pointers and
  588. * the Base and Length of the Rx Descriptor Ring
  589. */
  590. for (i = 0; i < adapter->num_rx_queues; i++)
  591. igc_configure_rx_ring(adapter, adapter->rx_ring[i]);
  592. }
  593. /**
  594. * igc_configure_tx_ring - Configure transmit ring after Reset
  595. * @adapter: board private structure
  596. * @ring: tx ring to configure
  597. *
  598. * Configure a transmit ring after a reset.
  599. */
  600. static void igc_configure_tx_ring(struct igc_adapter *adapter,
  601. struct igc_ring *ring)
  602. {
  603. struct igc_hw *hw = &adapter->hw;
  604. int reg_idx = ring->reg_idx;
  605. u64 tdba = ring->dma;
  606. u32 txdctl = 0;
  607. ring->xsk_pool = igc_get_xsk_pool(adapter, ring);
  608. /* disable the queue */
  609. wr32(IGC_TXDCTL(reg_idx), 0);
  610. wrfl();
  611. wr32(IGC_TDLEN(reg_idx),
  612. ring->count * sizeof(union igc_adv_tx_desc));
  613. wr32(IGC_TDBAL(reg_idx),
  614. tdba & 0x00000000ffffffffULL);
  615. wr32(IGC_TDBAH(reg_idx), tdba >> 32);
  616. ring->tail = adapter->io_addr + IGC_TDT(reg_idx);
  617. wr32(IGC_TDH(reg_idx), 0);
  618. writel(0, ring->tail);
  619. txdctl |= IGC_TX_PTHRESH;
  620. txdctl |= IGC_TX_HTHRESH << 8;
  621. txdctl |= IGC_TX_WTHRESH << 16;
  622. txdctl |= IGC_TXDCTL_QUEUE_ENABLE;
  623. wr32(IGC_TXDCTL(reg_idx), txdctl);
  624. }
  625. /**
  626. * igc_configure_tx - Configure transmit Unit after Reset
  627. * @adapter: board private structure
  628. *
  629. * Configure the Tx unit of the MAC after a reset.
  630. */
  631. static void igc_configure_tx(struct igc_adapter *adapter)
  632. {
  633. int i;
  634. for (i = 0; i < adapter->num_tx_queues; i++)
  635. igc_configure_tx_ring(adapter, adapter->tx_ring[i]);
  636. }
  637. /**
  638. * igc_setup_mrqc - configure the multiple receive queue control registers
  639. * @adapter: Board private structure
  640. */
  641. static void igc_setup_mrqc(struct igc_adapter *adapter)
  642. {
  643. struct igc_hw *hw = &adapter->hw;
  644. u32 j, num_rx_queues;
  645. u32 mrqc, rxcsum;
  646. u32 rss_key[10];
  647. netdev_rss_key_fill(rss_key, sizeof(rss_key));
  648. for (j = 0; j < 10; j++)
  649. wr32(IGC_RSSRK(j), rss_key[j]);
  650. num_rx_queues = adapter->rss_queues;
  651. if (adapter->rss_indir_tbl_init != num_rx_queues) {
  652. for (j = 0; j < IGC_RETA_SIZE; j++)
  653. adapter->rss_indir_tbl[j] =
  654. (j * num_rx_queues) / IGC_RETA_SIZE;
  655. adapter->rss_indir_tbl_init = num_rx_queues;
  656. }
  657. igc_write_rss_indir_tbl(adapter);
  658. /* Disable raw packet checksumming so that RSS hash is placed in
  659. * descriptor on writeback. No need to enable TCP/UDP/IP checksum
  660. * offloads as they are enabled by default
  661. */
  662. rxcsum = rd32(IGC_RXCSUM);
  663. rxcsum |= IGC_RXCSUM_PCSD;
  664. /* Enable Receive Checksum Offload for SCTP */
  665. rxcsum |= IGC_RXCSUM_CRCOFL;
  666. /* Don't need to set TUOFL or IPOFL, they default to 1 */
  667. wr32(IGC_RXCSUM, rxcsum);
  668. /* Generate RSS hash based on packet types, TCP/UDP
  669. * port numbers and/or IPv4/v6 src and dst addresses
  670. */
  671. mrqc = IGC_MRQC_RSS_FIELD_IPV4 |
  672. IGC_MRQC_RSS_FIELD_IPV4_TCP |
  673. IGC_MRQC_RSS_FIELD_IPV6 |
  674. IGC_MRQC_RSS_FIELD_IPV6_TCP |
  675. IGC_MRQC_RSS_FIELD_IPV6_TCP_EX;
  676. if (adapter->flags & IGC_FLAG_RSS_FIELD_IPV4_UDP)
  677. mrqc |= IGC_MRQC_RSS_FIELD_IPV4_UDP;
  678. if (adapter->flags & IGC_FLAG_RSS_FIELD_IPV6_UDP)
  679. mrqc |= IGC_MRQC_RSS_FIELD_IPV6_UDP;
  680. mrqc |= IGC_MRQC_ENABLE_RSS_MQ;
  681. wr32(IGC_MRQC, mrqc);
  682. }
  683. /**
  684. * igc_setup_rctl - configure the receive control registers
  685. * @adapter: Board private structure
  686. */
  687. static void igc_setup_rctl(struct igc_adapter *adapter)
  688. {
  689. struct igc_hw *hw = &adapter->hw;
  690. u32 rctl;
  691. rctl = rd32(IGC_RCTL);
  692. rctl &= ~(3 << IGC_RCTL_MO_SHIFT);
  693. rctl &= ~(IGC_RCTL_LBM_TCVR | IGC_RCTL_LBM_MAC);
  694. rctl |= IGC_RCTL_EN | IGC_RCTL_BAM | IGC_RCTL_RDMTS_HALF |
  695. (hw->mac.mc_filter_type << IGC_RCTL_MO_SHIFT);
  696. /* enable stripping of CRC. Newer features require
  697. * that the HW strips the CRC.
  698. */
  699. rctl |= IGC_RCTL_SECRC;
  700. /* disable store bad packets and clear size bits. */
  701. rctl &= ~(IGC_RCTL_SBP | IGC_RCTL_SZ_256);
  702. /* enable LPE to allow for reception of jumbo frames */
  703. rctl |= IGC_RCTL_LPE;
  704. /* disable queue 0 to prevent tail write w/o re-config */
  705. wr32(IGC_RXDCTL(0), 0);
  706. /* This is useful for sniffing bad packets. */
  707. if (adapter->netdev->features & NETIF_F_RXALL) {
  708. /* UPE and MPE will be handled by normal PROMISC logic
  709. * in set_rx_mode
  710. */
  711. rctl |= (IGC_RCTL_SBP | /* Receive bad packets */
  712. IGC_RCTL_BAM | /* RX All Bcast Pkts */
  713. IGC_RCTL_PMCF); /* RX All MAC Ctrl Pkts */
  714. rctl &= ~(IGC_RCTL_DPF | /* Allow filtered pause */
  715. IGC_RCTL_CFIEN); /* Disable VLAN CFIEN Filter */
  716. }
  717. wr32(IGC_RCTL, rctl);
  718. }
  719. /**
  720. * igc_setup_tctl - configure the transmit control registers
  721. * @adapter: Board private structure
  722. */
  723. static void igc_setup_tctl(struct igc_adapter *adapter)
  724. {
  725. struct igc_hw *hw = &adapter->hw;
  726. u32 tctl;
  727. /* disable queue 0 which icould be enabled by default */
  728. wr32(IGC_TXDCTL(0), 0);
  729. /* Program the Transmit Control Register */
  730. tctl = rd32(IGC_TCTL);
  731. tctl &= ~IGC_TCTL_CT;
  732. tctl |= IGC_TCTL_PSP | IGC_TCTL_RTLC |
  733. (IGC_COLLISION_THRESHOLD << IGC_CT_SHIFT);
  734. /* Enable transmits */
  735. tctl |= IGC_TCTL_EN;
  736. wr32(IGC_TCTL, tctl);
  737. }
  738. /**
  739. * igc_set_mac_filter_hw() - Set MAC address filter in hardware
  740. * @adapter: Pointer to adapter where the filter should be set
  741. * @index: Filter index
  742. * @type: MAC address filter type (source or destination)
  743. * @addr: MAC address
  744. * @queue: If non-negative, queue assignment feature is enabled and frames
  745. * matching the filter are enqueued onto 'queue'. Otherwise, queue
  746. * assignment is disabled.
  747. */
  748. static void igc_set_mac_filter_hw(struct igc_adapter *adapter, int index,
  749. enum igc_mac_filter_type type,
  750. const u8 *addr, int queue)
  751. {
  752. struct net_device *dev = adapter->netdev;
  753. struct igc_hw *hw = &adapter->hw;
  754. u32 ral, rah;
  755. if (WARN_ON(index >= hw->mac.rar_entry_count))
  756. return;
  757. ral = le32_to_cpup((__le32 *)(addr));
  758. rah = le16_to_cpup((__le16 *)(addr + 4));
  759. if (type == IGC_MAC_FILTER_TYPE_SRC) {
  760. rah &= ~IGC_RAH_ASEL_MASK;
  761. rah |= IGC_RAH_ASEL_SRC_ADDR;
  762. }
  763. if (queue >= 0) {
  764. rah &= ~IGC_RAH_QSEL_MASK;
  765. rah |= (queue << IGC_RAH_QSEL_SHIFT);
  766. rah |= IGC_RAH_QSEL_ENABLE;
  767. }
  768. rah |= IGC_RAH_AV;
  769. wr32(IGC_RAL(index), ral);
  770. wr32(IGC_RAH(index), rah);
  771. netdev_dbg(dev, "MAC address filter set in HW: index %d", index);
  772. }
  773. /**
  774. * igc_clear_mac_filter_hw() - Clear MAC address filter in hardware
  775. * @adapter: Pointer to adapter where the filter should be cleared
  776. * @index: Filter index
  777. */
  778. static void igc_clear_mac_filter_hw(struct igc_adapter *adapter, int index)
  779. {
  780. struct net_device *dev = adapter->netdev;
  781. struct igc_hw *hw = &adapter->hw;
  782. if (WARN_ON(index >= hw->mac.rar_entry_count))
  783. return;
  784. wr32(IGC_RAL(index), 0);
  785. wr32(IGC_RAH(index), 0);
  786. netdev_dbg(dev, "MAC address filter cleared in HW: index %d", index);
  787. }
  788. /* Set default MAC address for the PF in the first RAR entry */
  789. static void igc_set_default_mac_filter(struct igc_adapter *adapter)
  790. {
  791. struct net_device *dev = adapter->netdev;
  792. u8 *addr = adapter->hw.mac.addr;
  793. netdev_dbg(dev, "Set default MAC address filter: address %pM", addr);
  794. igc_set_mac_filter_hw(adapter, 0, IGC_MAC_FILTER_TYPE_DST, addr, -1);
  795. }
  796. /**
  797. * igc_set_mac - Change the Ethernet Address of the NIC
  798. * @netdev: network interface device structure
  799. * @p: pointer to an address structure
  800. *
  801. * Returns 0 on success, negative on failure
  802. */
  803. static int igc_set_mac(struct net_device *netdev, void *p)
  804. {
  805. struct igc_adapter *adapter = netdev_priv(netdev);
  806. struct igc_hw *hw = &adapter->hw;
  807. struct sockaddr *addr = p;
  808. if (!is_valid_ether_addr(addr->sa_data))
  809. return -EADDRNOTAVAIL;
  810. eth_hw_addr_set(netdev, addr->sa_data);
  811. memcpy(hw->mac.addr, addr->sa_data, netdev->addr_len);
  812. /* set the correct pool for the new PF MAC address in entry 0 */
  813. igc_set_default_mac_filter(adapter);
  814. return 0;
  815. }
  816. /**
  817. * igc_write_mc_addr_list - write multicast addresses to MTA
  818. * @netdev: network interface device structure
  819. *
  820. * Writes multicast address list to the MTA hash table.
  821. * Returns: -ENOMEM on failure
  822. * 0 on no addresses written
  823. * X on writing X addresses to MTA
  824. **/
  825. static int igc_write_mc_addr_list(struct net_device *netdev)
  826. {
  827. struct igc_adapter *adapter = netdev_priv(netdev);
  828. struct igc_hw *hw = &adapter->hw;
  829. struct netdev_hw_addr *ha;
  830. u8 *mta_list;
  831. int i;
  832. if (netdev_mc_empty(netdev)) {
  833. /* nothing to program, so clear mc list */
  834. igc_update_mc_addr_list(hw, NULL, 0);
  835. return 0;
  836. }
  837. mta_list = kcalloc(netdev_mc_count(netdev), 6, GFP_ATOMIC);
  838. if (!mta_list)
  839. return -ENOMEM;
  840. /* The shared function expects a packed array of only addresses. */
  841. i = 0;
  842. netdev_for_each_mc_addr(ha, netdev)
  843. memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN);
  844. igc_update_mc_addr_list(hw, mta_list, i);
  845. kfree(mta_list);
  846. return netdev_mc_count(netdev);
  847. }
  848. static __le32 igc_tx_launchtime(struct igc_ring *ring, ktime_t txtime,
  849. bool *first_flag, bool *insert_empty)
  850. {
  851. struct igc_adapter *adapter = netdev_priv(ring->netdev);
  852. ktime_t cycle_time = adapter->cycle_time;
  853. ktime_t base_time = adapter->base_time;
  854. ktime_t now = ktime_get_clocktai();
  855. ktime_t baset_est, end_of_cycle;
  856. s32 launchtime;
  857. s64 n;
  858. n = div64_s64(ktime_sub_ns(now, base_time), cycle_time);
  859. baset_est = ktime_add_ns(base_time, cycle_time * (n));
  860. end_of_cycle = ktime_add_ns(baset_est, cycle_time);
  861. if (ktime_compare(txtime, end_of_cycle) >= 0) {
  862. if (baset_est != ring->last_ff_cycle) {
  863. *first_flag = true;
  864. ring->last_ff_cycle = baset_est;
  865. if (ktime_compare(end_of_cycle, ring->last_tx_cycle) > 0)
  866. *insert_empty = true;
  867. }
  868. }
  869. /* Introducing a window at end of cycle on which packets
  870. * potentially not honor launchtime. Window of 5us chosen
  871. * considering software update the tail pointer and packets
  872. * are dma'ed to packet buffer.
  873. */
  874. if ((ktime_sub_ns(end_of_cycle, now) < 5 * NSEC_PER_USEC))
  875. netdev_warn(ring->netdev, "Packet with txtime=%llu may not be honoured\n",
  876. txtime);
  877. ring->last_tx_cycle = end_of_cycle;
  878. launchtime = ktime_sub_ns(txtime, baset_est);
  879. if (launchtime > 0)
  880. div_s64_rem(launchtime, cycle_time, &launchtime);
  881. else
  882. launchtime = 0;
  883. return cpu_to_le32(launchtime);
  884. }
  885. static int igc_init_empty_frame(struct igc_ring *ring,
  886. struct igc_tx_buffer *buffer,
  887. struct sk_buff *skb)
  888. {
  889. unsigned int size;
  890. dma_addr_t dma;
  891. size = skb_headlen(skb);
  892. dma = dma_map_single(ring->dev, skb->data, size, DMA_TO_DEVICE);
  893. if (dma_mapping_error(ring->dev, dma)) {
  894. netdev_err_once(ring->netdev, "Failed to map DMA for TX\n");
  895. return -ENOMEM;
  896. }
  897. buffer->type = IGC_TX_BUFFER_TYPE_SKB;
  898. buffer->skb = skb;
  899. buffer->protocol = 0;
  900. buffer->bytecount = skb->len;
  901. buffer->gso_segs = 1;
  902. buffer->time_stamp = jiffies;
  903. dma_unmap_len_set(buffer, len, skb->len);
  904. dma_unmap_addr_set(buffer, dma, dma);
  905. return 0;
  906. }
  907. static int igc_init_tx_empty_descriptor(struct igc_ring *ring,
  908. struct sk_buff *skb,
  909. struct igc_tx_buffer *first)
  910. {
  911. union igc_adv_tx_desc *desc;
  912. u32 cmd_type, olinfo_status;
  913. int err;
  914. if (!igc_desc_unused(ring))
  915. return -EBUSY;
  916. err = igc_init_empty_frame(ring, first, skb);
  917. if (err)
  918. return err;
  919. cmd_type = IGC_ADVTXD_DTYP_DATA | IGC_ADVTXD_DCMD_DEXT |
  920. IGC_ADVTXD_DCMD_IFCS | IGC_TXD_DCMD |
  921. first->bytecount;
  922. olinfo_status = first->bytecount << IGC_ADVTXD_PAYLEN_SHIFT;
  923. desc = IGC_TX_DESC(ring, ring->next_to_use);
  924. desc->read.cmd_type_len = cpu_to_le32(cmd_type);
  925. desc->read.olinfo_status = cpu_to_le32(olinfo_status);
  926. desc->read.buffer_addr = cpu_to_le64(dma_unmap_addr(first, dma));
  927. netdev_tx_sent_queue(txring_txq(ring), skb->len);
  928. first->next_to_watch = desc;
  929. ring->next_to_use++;
  930. if (ring->next_to_use == ring->count)
  931. ring->next_to_use = 0;
  932. return 0;
  933. }
  934. #define IGC_EMPTY_FRAME_SIZE 60
  935. static void igc_tx_ctxtdesc(struct igc_ring *tx_ring,
  936. __le32 launch_time, bool first_flag,
  937. u32 vlan_macip_lens, u32 type_tucmd,
  938. u32 mss_l4len_idx)
  939. {
  940. struct igc_adv_tx_context_desc *context_desc;
  941. u16 i = tx_ring->next_to_use;
  942. context_desc = IGC_TX_CTXTDESC(tx_ring, i);
  943. i++;
  944. tx_ring->next_to_use = (i < tx_ring->count) ? i : 0;
  945. /* set bits to identify this as an advanced context descriptor */
  946. type_tucmd |= IGC_TXD_CMD_DEXT | IGC_ADVTXD_DTYP_CTXT;
  947. /* For i225, context index must be unique per ring. */
  948. if (test_bit(IGC_RING_FLAG_TX_CTX_IDX, &tx_ring->flags))
  949. mss_l4len_idx |= tx_ring->reg_idx << 4;
  950. if (first_flag)
  951. mss_l4len_idx |= IGC_ADVTXD_TSN_CNTX_FIRST;
  952. context_desc->vlan_macip_lens = cpu_to_le32(vlan_macip_lens);
  953. context_desc->type_tucmd_mlhl = cpu_to_le32(type_tucmd);
  954. context_desc->mss_l4len_idx = cpu_to_le32(mss_l4len_idx);
  955. context_desc->launch_time = launch_time;
  956. }
  957. static void igc_tx_csum(struct igc_ring *tx_ring, struct igc_tx_buffer *first,
  958. __le32 launch_time, bool first_flag)
  959. {
  960. struct sk_buff *skb = first->skb;
  961. u32 vlan_macip_lens = 0;
  962. u32 type_tucmd = 0;
  963. if (skb->ip_summed != CHECKSUM_PARTIAL) {
  964. csum_failed:
  965. if (!(first->tx_flags & IGC_TX_FLAGS_VLAN) &&
  966. !tx_ring->launchtime_enable)
  967. return;
  968. goto no_csum;
  969. }
  970. switch (skb->csum_offset) {
  971. case offsetof(struct tcphdr, check):
  972. type_tucmd = IGC_ADVTXD_TUCMD_L4T_TCP;
  973. fallthrough;
  974. case offsetof(struct udphdr, check):
  975. break;
  976. case offsetof(struct sctphdr, checksum):
  977. /* validate that this is actually an SCTP request */
  978. if (skb_csum_is_sctp(skb)) {
  979. type_tucmd = IGC_ADVTXD_TUCMD_L4T_SCTP;
  980. break;
  981. }
  982. fallthrough;
  983. default:
  984. skb_checksum_help(skb);
  985. goto csum_failed;
  986. }
  987. /* update TX checksum flag */
  988. first->tx_flags |= IGC_TX_FLAGS_CSUM;
  989. vlan_macip_lens = skb_checksum_start_offset(skb) -
  990. skb_network_offset(skb);
  991. no_csum:
  992. vlan_macip_lens |= skb_network_offset(skb) << IGC_ADVTXD_MACLEN_SHIFT;
  993. vlan_macip_lens |= first->tx_flags & IGC_TX_FLAGS_VLAN_MASK;
  994. igc_tx_ctxtdesc(tx_ring, launch_time, first_flag,
  995. vlan_macip_lens, type_tucmd, 0);
  996. }
  997. static int __igc_maybe_stop_tx(struct igc_ring *tx_ring, const u16 size)
  998. {
  999. struct net_device *netdev = tx_ring->netdev;
  1000. netif_stop_subqueue(netdev, tx_ring->queue_index);
  1001. /* memory barriier comment */
  1002. smp_mb();
  1003. /* We need to check again in a case another CPU has just
  1004. * made room available.
  1005. */
  1006. if (igc_desc_unused(tx_ring) < size)
  1007. return -EBUSY;
  1008. /* A reprieve! */
  1009. netif_wake_subqueue(netdev, tx_ring->queue_index);
  1010. u64_stats_update_begin(&tx_ring->tx_syncp2);
  1011. tx_ring->tx_stats.restart_queue2++;
  1012. u64_stats_update_end(&tx_ring->tx_syncp2);
  1013. return 0;
  1014. }
  1015. static inline int igc_maybe_stop_tx(struct igc_ring *tx_ring, const u16 size)
  1016. {
  1017. if (igc_desc_unused(tx_ring) >= size)
  1018. return 0;
  1019. return __igc_maybe_stop_tx(tx_ring, size);
  1020. }
  1021. #define IGC_SET_FLAG(_input, _flag, _result) \
  1022. (((_flag) <= (_result)) ? \
  1023. ((u32)((_input) & (_flag)) * ((_result) / (_flag))) : \
  1024. ((u32)((_input) & (_flag)) / ((_flag) / (_result))))
  1025. static u32 igc_tx_cmd_type(struct sk_buff *skb, u32 tx_flags)
  1026. {
  1027. /* set type for advanced descriptor with frame checksum insertion */
  1028. u32 cmd_type = IGC_ADVTXD_DTYP_DATA |
  1029. IGC_ADVTXD_DCMD_DEXT |
  1030. IGC_ADVTXD_DCMD_IFCS;
  1031. /* set HW vlan bit if vlan is present */
  1032. cmd_type |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_VLAN,
  1033. IGC_ADVTXD_DCMD_VLE);
  1034. /* set segmentation bits for TSO */
  1035. cmd_type |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_TSO,
  1036. (IGC_ADVTXD_DCMD_TSE));
  1037. /* set timestamp bit if present, will select the register set
  1038. * based on the _TSTAMP(_X) bit.
  1039. */
  1040. cmd_type |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_TSTAMP,
  1041. (IGC_ADVTXD_MAC_TSTAMP));
  1042. cmd_type |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_TSTAMP_1,
  1043. (IGC_ADVTXD_TSTAMP_REG_1));
  1044. cmd_type |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_TSTAMP_2,
  1045. (IGC_ADVTXD_TSTAMP_REG_2));
  1046. cmd_type |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_TSTAMP_3,
  1047. (IGC_ADVTXD_TSTAMP_REG_3));
  1048. /* insert frame checksum */
  1049. cmd_type ^= IGC_SET_FLAG(skb->no_fcs, 1, IGC_ADVTXD_DCMD_IFCS);
  1050. return cmd_type;
  1051. }
  1052. static void igc_tx_olinfo_status(struct igc_ring *tx_ring,
  1053. union igc_adv_tx_desc *tx_desc,
  1054. u32 tx_flags, unsigned int paylen)
  1055. {
  1056. u32 olinfo_status = paylen << IGC_ADVTXD_PAYLEN_SHIFT;
  1057. /* insert L4 checksum */
  1058. olinfo_status |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_CSUM,
  1059. (IGC_TXD_POPTS_TXSM << 8));
  1060. /* insert IPv4 checksum */
  1061. olinfo_status |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_IPV4,
  1062. (IGC_TXD_POPTS_IXSM << 8));
  1063. /* Use the second timer (free running, in general) for the timestamp */
  1064. olinfo_status |= IGC_SET_FLAG(tx_flags, IGC_TX_FLAGS_TSTAMP_TIMER_1,
  1065. IGC_TXD_PTP2_TIMER_1);
  1066. tx_desc->read.olinfo_status = cpu_to_le32(olinfo_status);
  1067. }
  1068. static int igc_tx_map(struct igc_ring *tx_ring,
  1069. struct igc_tx_buffer *first,
  1070. const u8 hdr_len)
  1071. {
  1072. struct sk_buff *skb = first->skb;
  1073. struct igc_tx_buffer *tx_buffer;
  1074. union igc_adv_tx_desc *tx_desc;
  1075. u32 tx_flags = first->tx_flags;
  1076. skb_frag_t *frag;
  1077. u16 i = tx_ring->next_to_use;
  1078. unsigned int data_len, size;
  1079. dma_addr_t dma;
  1080. u32 cmd_type;
  1081. cmd_type = igc_tx_cmd_type(skb, tx_flags);
  1082. tx_desc = IGC_TX_DESC(tx_ring, i);
  1083. igc_tx_olinfo_status(tx_ring, tx_desc, tx_flags, skb->len - hdr_len);
  1084. size = skb_headlen(skb);
  1085. data_len = skb->data_len;
  1086. dma = dma_map_single(tx_ring->dev, skb->data, size, DMA_TO_DEVICE);
  1087. tx_buffer = first;
  1088. for (frag = &skb_shinfo(skb)->frags[0];; frag++) {
  1089. if (dma_mapping_error(tx_ring->dev, dma))
  1090. goto dma_error;
  1091. /* record length, and DMA address */
  1092. dma_unmap_len_set(tx_buffer, len, size);
  1093. dma_unmap_addr_set(tx_buffer, dma, dma);
  1094. tx_desc->read.buffer_addr = cpu_to_le64(dma);
  1095. while (unlikely(size > IGC_MAX_DATA_PER_TXD)) {
  1096. tx_desc->read.cmd_type_len =
  1097. cpu_to_le32(cmd_type ^ IGC_MAX_DATA_PER_TXD);
  1098. i++;
  1099. tx_desc++;
  1100. if (i == tx_ring->count) {
  1101. tx_desc = IGC_TX_DESC(tx_ring, 0);
  1102. i = 0;
  1103. }
  1104. tx_desc->read.olinfo_status = 0;
  1105. dma += IGC_MAX_DATA_PER_TXD;
  1106. size -= IGC_MAX_DATA_PER_TXD;
  1107. tx_desc->read.buffer_addr = cpu_to_le64(dma);
  1108. }
  1109. if (likely(!data_len))
  1110. break;
  1111. tx_desc->read.cmd_type_len = cpu_to_le32(cmd_type ^ size);
  1112. i++;
  1113. tx_desc++;
  1114. if (i == tx_ring->count) {
  1115. tx_desc = IGC_TX_DESC(tx_ring, 0);
  1116. i = 0;
  1117. }
  1118. tx_desc->read.olinfo_status = 0;
  1119. size = skb_frag_size(frag);
  1120. data_len -= size;
  1121. dma = skb_frag_dma_map(tx_ring->dev, frag, 0,
  1122. size, DMA_TO_DEVICE);
  1123. tx_buffer = &tx_ring->tx_buffer_info[i];
  1124. }
  1125. /* write last descriptor with RS and EOP bits */
  1126. cmd_type |= size | IGC_TXD_DCMD;
  1127. tx_desc->read.cmd_type_len = cpu_to_le32(cmd_type);
  1128. netdev_tx_sent_queue(txring_txq(tx_ring), first->bytecount);
  1129. /* set the timestamp */
  1130. first->time_stamp = jiffies;
  1131. skb_tx_timestamp(skb);
  1132. /* Force memory writes to complete before letting h/w know there
  1133. * are new descriptors to fetch. (Only applicable for weak-ordered
  1134. * memory model archs, such as IA-64).
  1135. *
  1136. * We also need this memory barrier to make certain all of the
  1137. * status bits have been updated before next_to_watch is written.
  1138. */
  1139. wmb();
  1140. /* set next_to_watch value indicating a packet is present */
  1141. first->next_to_watch = tx_desc;
  1142. i++;
  1143. if (i == tx_ring->count)
  1144. i = 0;
  1145. tx_ring->next_to_use = i;
  1146. /* Make sure there is space in the ring for the next send. */
  1147. igc_maybe_stop_tx(tx_ring, DESC_NEEDED);
  1148. if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
  1149. writel(i, tx_ring->tail);
  1150. }
  1151. return 0;
  1152. dma_error:
  1153. netdev_err(tx_ring->netdev, "TX DMA map failed\n");
  1154. tx_buffer = &tx_ring->tx_buffer_info[i];
  1155. /* clear dma mappings for failed tx_buffer_info map */
  1156. while (tx_buffer != first) {
  1157. if (dma_unmap_len(tx_buffer, len))
  1158. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  1159. if (i-- == 0)
  1160. i += tx_ring->count;
  1161. tx_buffer = &tx_ring->tx_buffer_info[i];
  1162. }
  1163. if (dma_unmap_len(tx_buffer, len))
  1164. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  1165. dev_kfree_skb_any(tx_buffer->skb);
  1166. tx_buffer->skb = NULL;
  1167. tx_ring->next_to_use = i;
  1168. return -1;
  1169. }
  1170. static int igc_tso(struct igc_ring *tx_ring,
  1171. struct igc_tx_buffer *first,
  1172. __le32 launch_time, bool first_flag,
  1173. u8 *hdr_len)
  1174. {
  1175. u32 vlan_macip_lens, type_tucmd, mss_l4len_idx;
  1176. struct sk_buff *skb = first->skb;
  1177. union {
  1178. struct iphdr *v4;
  1179. struct ipv6hdr *v6;
  1180. unsigned char *hdr;
  1181. } ip;
  1182. union {
  1183. struct tcphdr *tcp;
  1184. struct udphdr *udp;
  1185. unsigned char *hdr;
  1186. } l4;
  1187. u32 paylen, l4_offset;
  1188. int err;
  1189. if (skb->ip_summed != CHECKSUM_PARTIAL)
  1190. return 0;
  1191. if (!skb_is_gso(skb))
  1192. return 0;
  1193. err = skb_cow_head(skb, 0);
  1194. if (err < 0)
  1195. return err;
  1196. ip.hdr = skb_network_header(skb);
  1197. l4.hdr = skb_checksum_start(skb);
  1198. /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */
  1199. type_tucmd = IGC_ADVTXD_TUCMD_L4T_TCP;
  1200. /* initialize outer IP header fields */
  1201. if (ip.v4->version == 4) {
  1202. unsigned char *csum_start = skb_checksum_start(skb);
  1203. unsigned char *trans_start = ip.hdr + (ip.v4->ihl * 4);
  1204. /* IP header will have to cancel out any data that
  1205. * is not a part of the outer IP header
  1206. */
  1207. ip.v4->check = csum_fold(csum_partial(trans_start,
  1208. csum_start - trans_start,
  1209. 0));
  1210. type_tucmd |= IGC_ADVTXD_TUCMD_IPV4;
  1211. ip.v4->tot_len = 0;
  1212. first->tx_flags |= IGC_TX_FLAGS_TSO |
  1213. IGC_TX_FLAGS_CSUM |
  1214. IGC_TX_FLAGS_IPV4;
  1215. } else {
  1216. ip.v6->payload_len = 0;
  1217. first->tx_flags |= IGC_TX_FLAGS_TSO |
  1218. IGC_TX_FLAGS_CSUM;
  1219. }
  1220. /* determine offset of inner transport header */
  1221. l4_offset = l4.hdr - skb->data;
  1222. /* remove payload length from inner checksum */
  1223. paylen = skb->len - l4_offset;
  1224. if (type_tucmd & IGC_ADVTXD_TUCMD_L4T_TCP) {
  1225. /* compute length of segmentation header */
  1226. *hdr_len = (l4.tcp->doff * 4) + l4_offset;
  1227. csum_replace_by_diff(&l4.tcp->check,
  1228. (__force __wsum)htonl(paylen));
  1229. } else {
  1230. /* compute length of segmentation header */
  1231. *hdr_len = sizeof(*l4.udp) + l4_offset;
  1232. csum_replace_by_diff(&l4.udp->check,
  1233. (__force __wsum)htonl(paylen));
  1234. }
  1235. /* update gso size and bytecount with header size */
  1236. first->gso_segs = skb_shinfo(skb)->gso_segs;
  1237. first->bytecount += (first->gso_segs - 1) * *hdr_len;
  1238. /* MSS L4LEN IDX */
  1239. mss_l4len_idx = (*hdr_len - l4_offset) << IGC_ADVTXD_L4LEN_SHIFT;
  1240. mss_l4len_idx |= skb_shinfo(skb)->gso_size << IGC_ADVTXD_MSS_SHIFT;
  1241. /* VLAN MACLEN IPLEN */
  1242. vlan_macip_lens = l4.hdr - ip.hdr;
  1243. vlan_macip_lens |= (ip.hdr - skb->data) << IGC_ADVTXD_MACLEN_SHIFT;
  1244. vlan_macip_lens |= first->tx_flags & IGC_TX_FLAGS_VLAN_MASK;
  1245. igc_tx_ctxtdesc(tx_ring, launch_time, first_flag,
  1246. vlan_macip_lens, type_tucmd, mss_l4len_idx);
  1247. return 1;
  1248. }
  1249. static bool igc_request_tx_tstamp(struct igc_adapter *adapter, struct sk_buff *skb, u32 *flags)
  1250. {
  1251. int i;
  1252. for (i = 0; i < IGC_MAX_TX_TSTAMP_REGS; i++) {
  1253. struct igc_tx_timestamp_request *tstamp = &adapter->tx_tstamp[i];
  1254. if (tstamp->skb)
  1255. continue;
  1256. tstamp->skb = skb_get(skb);
  1257. tstamp->start = jiffies;
  1258. *flags = tstamp->flags;
  1259. return true;
  1260. }
  1261. return false;
  1262. }
  1263. static netdev_tx_t igc_xmit_frame_ring(struct sk_buff *skb,
  1264. struct igc_ring *tx_ring)
  1265. {
  1266. struct igc_adapter *adapter = netdev_priv(tx_ring->netdev);
  1267. bool first_flag = false, insert_empty = false;
  1268. u16 count = TXD_USE_COUNT(skb_headlen(skb));
  1269. __be16 protocol = vlan_get_protocol(skb);
  1270. struct igc_tx_buffer *first;
  1271. __le32 launch_time = 0;
  1272. u32 tx_flags = 0;
  1273. unsigned short f;
  1274. ktime_t txtime;
  1275. u8 hdr_len = 0;
  1276. int tso = 0;
  1277. /* need: 1 descriptor per page * PAGE_SIZE/IGC_MAX_DATA_PER_TXD,
  1278. * + 1 desc for skb_headlen/IGC_MAX_DATA_PER_TXD,
  1279. * + 2 desc gap to keep tail from touching head,
  1280. * + 1 desc for context descriptor,
  1281. * otherwise try next time
  1282. */
  1283. for (f = 0; f < skb_shinfo(skb)->nr_frags; f++)
  1284. count += TXD_USE_COUNT(skb_frag_size(
  1285. &skb_shinfo(skb)->frags[f]));
  1286. if (igc_maybe_stop_tx(tx_ring, count + 5)) {
  1287. /* this is a hard error */
  1288. return NETDEV_TX_BUSY;
  1289. }
  1290. if (!tx_ring->launchtime_enable)
  1291. goto done;
  1292. txtime = skb->tstamp;
  1293. skb->tstamp = ktime_set(0, 0);
  1294. launch_time = igc_tx_launchtime(tx_ring, txtime, &first_flag, &insert_empty);
  1295. if (insert_empty) {
  1296. struct igc_tx_buffer *empty_info;
  1297. struct sk_buff *empty;
  1298. void *data;
  1299. empty_info = &tx_ring->tx_buffer_info[tx_ring->next_to_use];
  1300. empty = alloc_skb(IGC_EMPTY_FRAME_SIZE, GFP_ATOMIC);
  1301. if (!empty)
  1302. goto done;
  1303. data = skb_put(empty, IGC_EMPTY_FRAME_SIZE);
  1304. memset(data, 0, IGC_EMPTY_FRAME_SIZE);
  1305. igc_tx_ctxtdesc(tx_ring, 0, false, 0, 0, 0);
  1306. if (igc_init_tx_empty_descriptor(tx_ring,
  1307. empty,
  1308. empty_info) < 0)
  1309. dev_kfree_skb_any(empty);
  1310. }
  1311. done:
  1312. /* record the location of the first descriptor for this packet */
  1313. first = &tx_ring->tx_buffer_info[tx_ring->next_to_use];
  1314. first->type = IGC_TX_BUFFER_TYPE_SKB;
  1315. first->skb = skb;
  1316. first->bytecount = skb->len;
  1317. first->gso_segs = 1;
  1318. if (adapter->qbv_transition || tx_ring->oper_gate_closed)
  1319. goto out_drop;
  1320. if (tx_ring->max_sdu > 0 && first->bytecount > tx_ring->max_sdu) {
  1321. adapter->stats.txdrop++;
  1322. goto out_drop;
  1323. }
  1324. if (unlikely(test_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags) &&
  1325. skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
  1326. unsigned long flags;
  1327. u32 tstamp_flags;
  1328. spin_lock_irqsave(&adapter->ptp_tx_lock, flags);
  1329. if (igc_request_tx_tstamp(adapter, skb, &tstamp_flags)) {
  1330. skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
  1331. tx_flags |= IGC_TX_FLAGS_TSTAMP | tstamp_flags;
  1332. if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP_USE_CYCLES)
  1333. tx_flags |= IGC_TX_FLAGS_TSTAMP_TIMER_1;
  1334. } else {
  1335. adapter->tx_hwtstamp_skipped++;
  1336. }
  1337. spin_unlock_irqrestore(&adapter->ptp_tx_lock, flags);
  1338. }
  1339. if (skb_vlan_tag_present(skb)) {
  1340. tx_flags |= IGC_TX_FLAGS_VLAN;
  1341. tx_flags |= (skb_vlan_tag_get(skb) << IGC_TX_FLAGS_VLAN_SHIFT);
  1342. }
  1343. /* record initial flags and protocol */
  1344. first->tx_flags = tx_flags;
  1345. first->protocol = protocol;
  1346. tso = igc_tso(tx_ring, first, launch_time, first_flag, &hdr_len);
  1347. if (tso < 0)
  1348. goto out_drop;
  1349. else if (!tso)
  1350. igc_tx_csum(tx_ring, first, launch_time, first_flag);
  1351. igc_tx_map(tx_ring, first, hdr_len);
  1352. return NETDEV_TX_OK;
  1353. out_drop:
  1354. dev_kfree_skb_any(first->skb);
  1355. first->skb = NULL;
  1356. return NETDEV_TX_OK;
  1357. }
  1358. static inline struct igc_ring *igc_tx_queue_mapping(struct igc_adapter *adapter,
  1359. struct sk_buff *skb)
  1360. {
  1361. unsigned int r_idx = skb->queue_mapping;
  1362. if (r_idx >= adapter->num_tx_queues)
  1363. r_idx = r_idx % adapter->num_tx_queues;
  1364. return adapter->tx_ring[r_idx];
  1365. }
  1366. static netdev_tx_t igc_xmit_frame(struct sk_buff *skb,
  1367. struct net_device *netdev)
  1368. {
  1369. struct igc_adapter *adapter = netdev_priv(netdev);
  1370. /* The minimum packet size with TCTL.PSP set is 17 so pad the skb
  1371. * in order to meet this minimum size requirement.
  1372. */
  1373. if (skb->len < 17) {
  1374. if (skb_padto(skb, 17))
  1375. return NETDEV_TX_OK;
  1376. skb->len = 17;
  1377. }
  1378. return igc_xmit_frame_ring(skb, igc_tx_queue_mapping(adapter, skb));
  1379. }
  1380. static void igc_rx_checksum(struct igc_ring *ring,
  1381. union igc_adv_rx_desc *rx_desc,
  1382. struct sk_buff *skb)
  1383. {
  1384. skb_checksum_none_assert(skb);
  1385. /* Ignore Checksum bit is set */
  1386. if (igc_test_staterr(rx_desc, IGC_RXD_STAT_IXSM))
  1387. return;
  1388. /* Rx checksum disabled via ethtool */
  1389. if (!(ring->netdev->features & NETIF_F_RXCSUM))
  1390. return;
  1391. /* TCP/UDP checksum error bit is set */
  1392. if (igc_test_staterr(rx_desc,
  1393. IGC_RXDEXT_STATERR_L4E |
  1394. IGC_RXDEXT_STATERR_IPE)) {
  1395. /* work around errata with sctp packets where the TCPE aka
  1396. * L4E bit is set incorrectly on 64 byte (60 byte w/o crc)
  1397. * packets (aka let the stack check the crc32c)
  1398. */
  1399. if (!(skb->len == 60 &&
  1400. test_bit(IGC_RING_FLAG_RX_SCTP_CSUM, &ring->flags))) {
  1401. u64_stats_update_begin(&ring->rx_syncp);
  1402. ring->rx_stats.csum_err++;
  1403. u64_stats_update_end(&ring->rx_syncp);
  1404. }
  1405. /* let the stack verify checksum errors */
  1406. return;
  1407. }
  1408. /* It must be a TCP or UDP packet with a valid checksum */
  1409. if (igc_test_staterr(rx_desc, IGC_RXD_STAT_TCPCS |
  1410. IGC_RXD_STAT_UDPCS))
  1411. skb->ip_summed = CHECKSUM_UNNECESSARY;
  1412. netdev_dbg(ring->netdev, "cksum success: bits %08X\n",
  1413. le32_to_cpu(rx_desc->wb.upper.status_error));
  1414. }
  1415. /* Mapping HW RSS Type to enum pkt_hash_types */
  1416. static const enum pkt_hash_types igc_rss_type_table[IGC_RSS_TYPE_MAX_TABLE] = {
  1417. [IGC_RSS_TYPE_NO_HASH] = PKT_HASH_TYPE_L2,
  1418. [IGC_RSS_TYPE_HASH_TCP_IPV4] = PKT_HASH_TYPE_L4,
  1419. [IGC_RSS_TYPE_HASH_IPV4] = PKT_HASH_TYPE_L3,
  1420. [IGC_RSS_TYPE_HASH_TCP_IPV6] = PKT_HASH_TYPE_L4,
  1421. [IGC_RSS_TYPE_HASH_IPV6_EX] = PKT_HASH_TYPE_L3,
  1422. [IGC_RSS_TYPE_HASH_IPV6] = PKT_HASH_TYPE_L3,
  1423. [IGC_RSS_TYPE_HASH_TCP_IPV6_EX] = PKT_HASH_TYPE_L4,
  1424. [IGC_RSS_TYPE_HASH_UDP_IPV4] = PKT_HASH_TYPE_L4,
  1425. [IGC_RSS_TYPE_HASH_UDP_IPV6] = PKT_HASH_TYPE_L4,
  1426. [IGC_RSS_TYPE_HASH_UDP_IPV6_EX] = PKT_HASH_TYPE_L4,
  1427. [10] = PKT_HASH_TYPE_NONE, /* RSS Type above 9 "Reserved" by HW */
  1428. [11] = PKT_HASH_TYPE_NONE, /* keep array sized for SW bit-mask */
  1429. [12] = PKT_HASH_TYPE_NONE, /* to handle future HW revisons */
  1430. [13] = PKT_HASH_TYPE_NONE,
  1431. [14] = PKT_HASH_TYPE_NONE,
  1432. [15] = PKT_HASH_TYPE_NONE,
  1433. };
  1434. static inline void igc_rx_hash(struct igc_ring *ring,
  1435. union igc_adv_rx_desc *rx_desc,
  1436. struct sk_buff *skb)
  1437. {
  1438. if (ring->netdev->features & NETIF_F_RXHASH) {
  1439. u32 rss_hash = le32_to_cpu(rx_desc->wb.lower.hi_dword.rss);
  1440. u32 rss_type = igc_rss_type(rx_desc);
  1441. skb_set_hash(skb, rss_hash, igc_rss_type_table[rss_type]);
  1442. }
  1443. }
  1444. static void igc_rx_vlan(struct igc_ring *rx_ring,
  1445. union igc_adv_rx_desc *rx_desc,
  1446. struct sk_buff *skb)
  1447. {
  1448. struct net_device *dev = rx_ring->netdev;
  1449. u16 vid;
  1450. if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
  1451. igc_test_staterr(rx_desc, IGC_RXD_STAT_VP)) {
  1452. if (igc_test_staterr(rx_desc, IGC_RXDEXT_STATERR_LB) &&
  1453. test_bit(IGC_RING_FLAG_RX_LB_VLAN_BSWAP, &rx_ring->flags))
  1454. vid = be16_to_cpu((__force __be16)rx_desc->wb.upper.vlan);
  1455. else
  1456. vid = le16_to_cpu(rx_desc->wb.upper.vlan);
  1457. __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vid);
  1458. }
  1459. }
  1460. /**
  1461. * igc_process_skb_fields - Populate skb header fields from Rx descriptor
  1462. * @rx_ring: rx descriptor ring packet is being transacted on
  1463. * @rx_desc: pointer to the EOP Rx descriptor
  1464. * @skb: pointer to current skb being populated
  1465. *
  1466. * This function checks the ring, descriptor, and packet information in order
  1467. * to populate the hash, checksum, VLAN, protocol, and other fields within the
  1468. * skb.
  1469. */
  1470. static void igc_process_skb_fields(struct igc_ring *rx_ring,
  1471. union igc_adv_rx_desc *rx_desc,
  1472. struct sk_buff *skb)
  1473. {
  1474. igc_rx_hash(rx_ring, rx_desc, skb);
  1475. igc_rx_checksum(rx_ring, rx_desc, skb);
  1476. igc_rx_vlan(rx_ring, rx_desc, skb);
  1477. skb_record_rx_queue(skb, rx_ring->queue_index);
  1478. skb->protocol = eth_type_trans(skb, rx_ring->netdev);
  1479. }
  1480. static void igc_vlan_mode(struct net_device *netdev, netdev_features_t features)
  1481. {
  1482. bool enable = !!(features & NETIF_F_HW_VLAN_CTAG_RX);
  1483. struct igc_adapter *adapter = netdev_priv(netdev);
  1484. struct igc_hw *hw = &adapter->hw;
  1485. u32 ctrl;
  1486. ctrl = rd32(IGC_CTRL);
  1487. if (enable) {
  1488. /* enable VLAN tag insert/strip */
  1489. ctrl |= IGC_CTRL_VME;
  1490. } else {
  1491. /* disable VLAN tag insert/strip */
  1492. ctrl &= ~IGC_CTRL_VME;
  1493. }
  1494. wr32(IGC_CTRL, ctrl);
  1495. }
  1496. static void igc_restore_vlan(struct igc_adapter *adapter)
  1497. {
  1498. igc_vlan_mode(adapter->netdev, adapter->netdev->features);
  1499. }
  1500. static struct igc_rx_buffer *igc_get_rx_buffer(struct igc_ring *rx_ring,
  1501. const unsigned int size,
  1502. int *rx_buffer_pgcnt)
  1503. {
  1504. struct igc_rx_buffer *rx_buffer;
  1505. rx_buffer = &rx_ring->rx_buffer_info[rx_ring->next_to_clean];
  1506. *rx_buffer_pgcnt =
  1507. #if (PAGE_SIZE < 8192)
  1508. page_count(rx_buffer->page);
  1509. #else
  1510. 0;
  1511. #endif
  1512. prefetchw(rx_buffer->page);
  1513. /* we are reusing so sync this buffer for CPU use */
  1514. dma_sync_single_range_for_cpu(rx_ring->dev,
  1515. rx_buffer->dma,
  1516. rx_buffer->page_offset,
  1517. size,
  1518. DMA_FROM_DEVICE);
  1519. rx_buffer->pagecnt_bias--;
  1520. return rx_buffer;
  1521. }
  1522. static void igc_rx_buffer_flip(struct igc_rx_buffer *buffer,
  1523. unsigned int truesize)
  1524. {
  1525. #if (PAGE_SIZE < 8192)
  1526. buffer->page_offset ^= truesize;
  1527. #else
  1528. buffer->page_offset += truesize;
  1529. #endif
  1530. }
  1531. static unsigned int igc_get_rx_frame_truesize(struct igc_ring *ring,
  1532. unsigned int size)
  1533. {
  1534. unsigned int truesize;
  1535. #if (PAGE_SIZE < 8192)
  1536. truesize = igc_rx_pg_size(ring) / 2;
  1537. #else
  1538. truesize = ring_uses_build_skb(ring) ?
  1539. SKB_DATA_ALIGN(sizeof(struct skb_shared_info)) +
  1540. SKB_DATA_ALIGN(IGC_SKB_PAD + size) :
  1541. SKB_DATA_ALIGN(size);
  1542. #endif
  1543. return truesize;
  1544. }
  1545. /**
  1546. * igc_add_rx_frag - Add contents of Rx buffer to sk_buff
  1547. * @rx_ring: rx descriptor ring to transact packets on
  1548. * @rx_buffer: buffer containing page to add
  1549. * @skb: sk_buff to place the data into
  1550. * @size: size of buffer to be added
  1551. *
  1552. * This function will add the data contained in rx_buffer->page to the skb.
  1553. */
  1554. static void igc_add_rx_frag(struct igc_ring *rx_ring,
  1555. struct igc_rx_buffer *rx_buffer,
  1556. struct sk_buff *skb,
  1557. unsigned int size)
  1558. {
  1559. unsigned int truesize;
  1560. #if (PAGE_SIZE < 8192)
  1561. truesize = igc_rx_pg_size(rx_ring) / 2;
  1562. #else
  1563. truesize = ring_uses_build_skb(rx_ring) ?
  1564. SKB_DATA_ALIGN(IGC_SKB_PAD + size) :
  1565. SKB_DATA_ALIGN(size);
  1566. #endif
  1567. skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, rx_buffer->page,
  1568. rx_buffer->page_offset, size, truesize);
  1569. igc_rx_buffer_flip(rx_buffer, truesize);
  1570. }
  1571. static struct sk_buff *igc_build_skb(struct igc_ring *rx_ring,
  1572. struct igc_rx_buffer *rx_buffer,
  1573. struct xdp_buff *xdp)
  1574. {
  1575. unsigned int size = xdp->data_end - xdp->data;
  1576. unsigned int truesize = igc_get_rx_frame_truesize(rx_ring, size);
  1577. unsigned int metasize = xdp->data - xdp->data_meta;
  1578. struct sk_buff *skb;
  1579. /* prefetch first cache line of first page */
  1580. net_prefetch(xdp->data_meta);
  1581. /* build an skb around the page buffer */
  1582. skb = napi_build_skb(xdp->data_hard_start, truesize);
  1583. if (unlikely(!skb))
  1584. return NULL;
  1585. /* update pointers within the skb to store the data */
  1586. skb_reserve(skb, xdp->data - xdp->data_hard_start);
  1587. __skb_put(skb, size);
  1588. if (metasize)
  1589. skb_metadata_set(skb, metasize);
  1590. igc_rx_buffer_flip(rx_buffer, truesize);
  1591. return skb;
  1592. }
  1593. static struct sk_buff *igc_construct_skb(struct igc_ring *rx_ring,
  1594. struct igc_rx_buffer *rx_buffer,
  1595. struct igc_xdp_buff *ctx)
  1596. {
  1597. struct xdp_buff *xdp = &ctx->xdp;
  1598. unsigned int metasize = xdp->data - xdp->data_meta;
  1599. unsigned int size = xdp->data_end - xdp->data;
  1600. unsigned int truesize = igc_get_rx_frame_truesize(rx_ring, size);
  1601. void *va = xdp->data;
  1602. unsigned int headlen;
  1603. struct sk_buff *skb;
  1604. /* prefetch first cache line of first page */
  1605. net_prefetch(xdp->data_meta);
  1606. /* allocate a skb to store the frags */
  1607. skb = napi_alloc_skb(&rx_ring->q_vector->napi,
  1608. IGC_RX_HDR_LEN + metasize);
  1609. if (unlikely(!skb))
  1610. return NULL;
  1611. if (ctx->rx_ts) {
  1612. skb_shinfo(skb)->tx_flags |= SKBTX_HW_TSTAMP_NETDEV;
  1613. skb_hwtstamps(skb)->netdev_data = ctx->rx_ts;
  1614. }
  1615. /* Determine available headroom for copy */
  1616. headlen = size;
  1617. if (headlen > IGC_RX_HDR_LEN)
  1618. headlen = eth_get_headlen(skb->dev, va, IGC_RX_HDR_LEN);
  1619. /* align pull length to size of long to optimize memcpy performance */
  1620. memcpy(__skb_put(skb, headlen + metasize), xdp->data_meta,
  1621. ALIGN(headlen + metasize, sizeof(long)));
  1622. if (metasize) {
  1623. skb_metadata_set(skb, metasize);
  1624. __skb_pull(skb, metasize);
  1625. }
  1626. /* update all of the pointers */
  1627. size -= headlen;
  1628. if (size) {
  1629. skb_add_rx_frag(skb, 0, rx_buffer->page,
  1630. (va + headlen) - page_address(rx_buffer->page),
  1631. size, truesize);
  1632. igc_rx_buffer_flip(rx_buffer, truesize);
  1633. } else {
  1634. rx_buffer->pagecnt_bias++;
  1635. }
  1636. return skb;
  1637. }
  1638. /**
  1639. * igc_reuse_rx_page - page flip buffer and store it back on the ring
  1640. * @rx_ring: rx descriptor ring to store buffers on
  1641. * @old_buff: donor buffer to have page reused
  1642. *
  1643. * Synchronizes page for reuse by the adapter
  1644. */
  1645. static void igc_reuse_rx_page(struct igc_ring *rx_ring,
  1646. struct igc_rx_buffer *old_buff)
  1647. {
  1648. u16 nta = rx_ring->next_to_alloc;
  1649. struct igc_rx_buffer *new_buff;
  1650. new_buff = &rx_ring->rx_buffer_info[nta];
  1651. /* update, and store next to alloc */
  1652. nta++;
  1653. rx_ring->next_to_alloc = (nta < rx_ring->count) ? nta : 0;
  1654. /* Transfer page from old buffer to new buffer.
  1655. * Move each member individually to avoid possible store
  1656. * forwarding stalls.
  1657. */
  1658. new_buff->dma = old_buff->dma;
  1659. new_buff->page = old_buff->page;
  1660. new_buff->page_offset = old_buff->page_offset;
  1661. new_buff->pagecnt_bias = old_buff->pagecnt_bias;
  1662. }
  1663. static bool igc_can_reuse_rx_page(struct igc_rx_buffer *rx_buffer,
  1664. int rx_buffer_pgcnt)
  1665. {
  1666. unsigned int pagecnt_bias = rx_buffer->pagecnt_bias;
  1667. struct page *page = rx_buffer->page;
  1668. /* avoid re-using remote and pfmemalloc pages */
  1669. if (!dev_page_is_reusable(page))
  1670. return false;
  1671. #if (PAGE_SIZE < 8192)
  1672. /* if we are only owner of page we can reuse it */
  1673. if (unlikely((rx_buffer_pgcnt - pagecnt_bias) > 1))
  1674. return false;
  1675. #else
  1676. #define IGC_LAST_OFFSET \
  1677. (SKB_WITH_OVERHEAD(PAGE_SIZE) - IGC_RXBUFFER_2048)
  1678. if (rx_buffer->page_offset > IGC_LAST_OFFSET)
  1679. return false;
  1680. #endif
  1681. /* If we have drained the page fragment pool we need to update
  1682. * the pagecnt_bias and page count so that we fully restock the
  1683. * number of references the driver holds.
  1684. */
  1685. if (unlikely(pagecnt_bias == 1)) {
  1686. page_ref_add(page, USHRT_MAX - 1);
  1687. rx_buffer->pagecnt_bias = USHRT_MAX;
  1688. }
  1689. return true;
  1690. }
  1691. /**
  1692. * igc_is_non_eop - process handling of non-EOP buffers
  1693. * @rx_ring: Rx ring being processed
  1694. * @rx_desc: Rx descriptor for current buffer
  1695. *
  1696. * This function updates next to clean. If the buffer is an EOP buffer
  1697. * this function exits returning false, otherwise it will place the
  1698. * sk_buff in the next buffer to be chained and return true indicating
  1699. * that this is in fact a non-EOP buffer.
  1700. */
  1701. static bool igc_is_non_eop(struct igc_ring *rx_ring,
  1702. union igc_adv_rx_desc *rx_desc)
  1703. {
  1704. u32 ntc = rx_ring->next_to_clean + 1;
  1705. /* fetch, update, and store next to clean */
  1706. ntc = (ntc < rx_ring->count) ? ntc : 0;
  1707. rx_ring->next_to_clean = ntc;
  1708. prefetch(IGC_RX_DESC(rx_ring, ntc));
  1709. if (likely(igc_test_staterr(rx_desc, IGC_RXD_STAT_EOP)))
  1710. return false;
  1711. return true;
  1712. }
  1713. /**
  1714. * igc_cleanup_headers - Correct corrupted or empty headers
  1715. * @rx_ring: rx descriptor ring packet is being transacted on
  1716. * @rx_desc: pointer to the EOP Rx descriptor
  1717. * @skb: pointer to current skb being fixed
  1718. *
  1719. * Address the case where we are pulling data in on pages only
  1720. * and as such no data is present in the skb header.
  1721. *
  1722. * In addition if skb is not at least 60 bytes we need to pad it so that
  1723. * it is large enough to qualify as a valid Ethernet frame.
  1724. *
  1725. * Returns true if an error was encountered and skb was freed.
  1726. */
  1727. static bool igc_cleanup_headers(struct igc_ring *rx_ring,
  1728. union igc_adv_rx_desc *rx_desc,
  1729. struct sk_buff *skb)
  1730. {
  1731. /* XDP packets use error pointer so abort at this point */
  1732. if (IS_ERR(skb))
  1733. return true;
  1734. if (unlikely(igc_test_staterr(rx_desc, IGC_RXDEXT_STATERR_RXE))) {
  1735. struct net_device *netdev = rx_ring->netdev;
  1736. if (!(netdev->features & NETIF_F_RXALL)) {
  1737. dev_kfree_skb_any(skb);
  1738. return true;
  1739. }
  1740. }
  1741. /* if eth_skb_pad returns an error the skb was freed */
  1742. if (eth_skb_pad(skb))
  1743. return true;
  1744. return false;
  1745. }
  1746. static void igc_put_rx_buffer(struct igc_ring *rx_ring,
  1747. struct igc_rx_buffer *rx_buffer,
  1748. int rx_buffer_pgcnt)
  1749. {
  1750. if (igc_can_reuse_rx_page(rx_buffer, rx_buffer_pgcnt)) {
  1751. /* hand second half of page back to the ring */
  1752. igc_reuse_rx_page(rx_ring, rx_buffer);
  1753. } else {
  1754. /* We are not reusing the buffer so unmap it and free
  1755. * any references we are holding to it
  1756. */
  1757. dma_unmap_page_attrs(rx_ring->dev, rx_buffer->dma,
  1758. igc_rx_pg_size(rx_ring), DMA_FROM_DEVICE,
  1759. IGC_RX_DMA_ATTR);
  1760. __page_frag_cache_drain(rx_buffer->page,
  1761. rx_buffer->pagecnt_bias);
  1762. }
  1763. /* clear contents of rx_buffer */
  1764. rx_buffer->page = NULL;
  1765. }
  1766. static inline unsigned int igc_rx_offset(struct igc_ring *rx_ring)
  1767. {
  1768. struct igc_adapter *adapter = rx_ring->q_vector->adapter;
  1769. if (ring_uses_build_skb(rx_ring))
  1770. return IGC_SKB_PAD;
  1771. if (igc_xdp_is_enabled(adapter))
  1772. return XDP_PACKET_HEADROOM;
  1773. return 0;
  1774. }
  1775. static bool igc_alloc_mapped_page(struct igc_ring *rx_ring,
  1776. struct igc_rx_buffer *bi)
  1777. {
  1778. struct page *page = bi->page;
  1779. dma_addr_t dma;
  1780. /* since we are recycling buffers we should seldom need to alloc */
  1781. if (likely(page))
  1782. return true;
  1783. /* alloc new page for storage */
  1784. page = dev_alloc_pages(igc_rx_pg_order(rx_ring));
  1785. if (unlikely(!page)) {
  1786. rx_ring->rx_stats.alloc_failed++;
  1787. set_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags);
  1788. return false;
  1789. }
  1790. /* map page for use */
  1791. dma = dma_map_page_attrs(rx_ring->dev, page, 0,
  1792. igc_rx_pg_size(rx_ring),
  1793. DMA_FROM_DEVICE,
  1794. IGC_RX_DMA_ATTR);
  1795. /* if mapping failed free memory back to system since
  1796. * there isn't much point in holding memory we can't use
  1797. */
  1798. if (dma_mapping_error(rx_ring->dev, dma)) {
  1799. __free_page(page);
  1800. rx_ring->rx_stats.alloc_failed++;
  1801. set_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags);
  1802. return false;
  1803. }
  1804. bi->dma = dma;
  1805. bi->page = page;
  1806. bi->page_offset = igc_rx_offset(rx_ring);
  1807. page_ref_add(page, USHRT_MAX - 1);
  1808. bi->pagecnt_bias = USHRT_MAX;
  1809. return true;
  1810. }
  1811. /**
  1812. * igc_alloc_rx_buffers - Replace used receive buffers; packet split
  1813. * @rx_ring: rx descriptor ring
  1814. * @cleaned_count: number of buffers to clean
  1815. */
  1816. static void igc_alloc_rx_buffers(struct igc_ring *rx_ring, u16 cleaned_count)
  1817. {
  1818. union igc_adv_rx_desc *rx_desc;
  1819. u16 i = rx_ring->next_to_use;
  1820. struct igc_rx_buffer *bi;
  1821. u16 bufsz;
  1822. /* nothing to do */
  1823. if (!cleaned_count)
  1824. return;
  1825. rx_desc = IGC_RX_DESC(rx_ring, i);
  1826. bi = &rx_ring->rx_buffer_info[i];
  1827. i -= rx_ring->count;
  1828. bufsz = igc_rx_bufsz(rx_ring);
  1829. do {
  1830. if (!igc_alloc_mapped_page(rx_ring, bi))
  1831. break;
  1832. /* sync the buffer for use by the device */
  1833. dma_sync_single_range_for_device(rx_ring->dev, bi->dma,
  1834. bi->page_offset, bufsz,
  1835. DMA_FROM_DEVICE);
  1836. /* Refresh the desc even if buffer_addrs didn't change
  1837. * because each write-back erases this info.
  1838. */
  1839. rx_desc->read.pkt_addr = cpu_to_le64(bi->dma + bi->page_offset);
  1840. rx_desc++;
  1841. bi++;
  1842. i++;
  1843. if (unlikely(!i)) {
  1844. rx_desc = IGC_RX_DESC(rx_ring, 0);
  1845. bi = rx_ring->rx_buffer_info;
  1846. i -= rx_ring->count;
  1847. }
  1848. /* clear the length for the next_to_use descriptor */
  1849. rx_desc->wb.upper.length = 0;
  1850. cleaned_count--;
  1851. } while (cleaned_count);
  1852. i += rx_ring->count;
  1853. if (rx_ring->next_to_use != i) {
  1854. /* record the next descriptor to use */
  1855. rx_ring->next_to_use = i;
  1856. /* update next to alloc since we have filled the ring */
  1857. rx_ring->next_to_alloc = i;
  1858. /* Force memory writes to complete before letting h/w
  1859. * know there are new descriptors to fetch. (Only
  1860. * applicable for weak-ordered memory model archs,
  1861. * such as IA-64).
  1862. */
  1863. wmb();
  1864. writel(i, rx_ring->tail);
  1865. }
  1866. }
  1867. static bool igc_alloc_rx_buffers_zc(struct igc_ring *ring, u16 count)
  1868. {
  1869. union igc_adv_rx_desc *desc;
  1870. u16 i = ring->next_to_use;
  1871. struct igc_rx_buffer *bi;
  1872. dma_addr_t dma;
  1873. bool ok = true;
  1874. if (!count)
  1875. return ok;
  1876. XSK_CHECK_PRIV_TYPE(struct igc_xdp_buff);
  1877. desc = IGC_RX_DESC(ring, i);
  1878. bi = &ring->rx_buffer_info[i];
  1879. i -= ring->count;
  1880. do {
  1881. bi->xdp = xsk_buff_alloc(ring->xsk_pool);
  1882. if (!bi->xdp) {
  1883. ok = false;
  1884. break;
  1885. }
  1886. dma = xsk_buff_xdp_get_dma(bi->xdp);
  1887. desc->read.pkt_addr = cpu_to_le64(dma);
  1888. desc++;
  1889. bi++;
  1890. i++;
  1891. if (unlikely(!i)) {
  1892. desc = IGC_RX_DESC(ring, 0);
  1893. bi = ring->rx_buffer_info;
  1894. i -= ring->count;
  1895. }
  1896. /* Clear the length for the next_to_use descriptor. */
  1897. desc->wb.upper.length = 0;
  1898. count--;
  1899. } while (count);
  1900. i += ring->count;
  1901. if (ring->next_to_use != i) {
  1902. ring->next_to_use = i;
  1903. /* Force memory writes to complete before letting h/w
  1904. * know there are new descriptors to fetch. (Only
  1905. * applicable for weak-ordered memory model archs,
  1906. * such as IA-64).
  1907. */
  1908. wmb();
  1909. writel(i, ring->tail);
  1910. }
  1911. return ok;
  1912. }
  1913. /* This function requires __netif_tx_lock is held by the caller. */
  1914. static int igc_xdp_init_tx_descriptor(struct igc_ring *ring,
  1915. struct xdp_frame *xdpf)
  1916. {
  1917. struct skb_shared_info *sinfo = xdp_get_shared_info_from_frame(xdpf);
  1918. u8 nr_frags = unlikely(xdp_frame_has_frags(xdpf)) ? sinfo->nr_frags : 0;
  1919. u16 count, index = ring->next_to_use;
  1920. struct igc_tx_buffer *head = &ring->tx_buffer_info[index];
  1921. struct igc_tx_buffer *buffer = head;
  1922. union igc_adv_tx_desc *desc = IGC_TX_DESC(ring, index);
  1923. u32 olinfo_status, len = xdpf->len, cmd_type;
  1924. void *data = xdpf->data;
  1925. u16 i;
  1926. count = TXD_USE_COUNT(len);
  1927. for (i = 0; i < nr_frags; i++)
  1928. count += TXD_USE_COUNT(skb_frag_size(&sinfo->frags[i]));
  1929. if (igc_maybe_stop_tx(ring, count + 3)) {
  1930. /* this is a hard error */
  1931. return -EBUSY;
  1932. }
  1933. i = 0;
  1934. head->bytecount = xdp_get_frame_len(xdpf);
  1935. head->type = IGC_TX_BUFFER_TYPE_XDP;
  1936. head->gso_segs = 1;
  1937. head->xdpf = xdpf;
  1938. olinfo_status = head->bytecount << IGC_ADVTXD_PAYLEN_SHIFT;
  1939. desc->read.olinfo_status = cpu_to_le32(olinfo_status);
  1940. for (;;) {
  1941. dma_addr_t dma;
  1942. dma = dma_map_single(ring->dev, data, len, DMA_TO_DEVICE);
  1943. if (dma_mapping_error(ring->dev, dma)) {
  1944. netdev_err_once(ring->netdev,
  1945. "Failed to map DMA for TX\n");
  1946. goto unmap;
  1947. }
  1948. dma_unmap_len_set(buffer, len, len);
  1949. dma_unmap_addr_set(buffer, dma, dma);
  1950. cmd_type = IGC_ADVTXD_DTYP_DATA | IGC_ADVTXD_DCMD_DEXT |
  1951. IGC_ADVTXD_DCMD_IFCS | len;
  1952. desc->read.cmd_type_len = cpu_to_le32(cmd_type);
  1953. desc->read.buffer_addr = cpu_to_le64(dma);
  1954. buffer->protocol = 0;
  1955. if (++index == ring->count)
  1956. index = 0;
  1957. if (i == nr_frags)
  1958. break;
  1959. buffer = &ring->tx_buffer_info[index];
  1960. desc = IGC_TX_DESC(ring, index);
  1961. desc->read.olinfo_status = 0;
  1962. data = skb_frag_address(&sinfo->frags[i]);
  1963. len = skb_frag_size(&sinfo->frags[i]);
  1964. i++;
  1965. }
  1966. desc->read.cmd_type_len |= cpu_to_le32(IGC_TXD_DCMD);
  1967. netdev_tx_sent_queue(txring_txq(ring), head->bytecount);
  1968. /* set the timestamp */
  1969. head->time_stamp = jiffies;
  1970. /* set next_to_watch value indicating a packet is present */
  1971. head->next_to_watch = desc;
  1972. ring->next_to_use = index;
  1973. return 0;
  1974. unmap:
  1975. for (;;) {
  1976. buffer = &ring->tx_buffer_info[index];
  1977. if (dma_unmap_len(buffer, len))
  1978. dma_unmap_page(ring->dev,
  1979. dma_unmap_addr(buffer, dma),
  1980. dma_unmap_len(buffer, len),
  1981. DMA_TO_DEVICE);
  1982. dma_unmap_len_set(buffer, len, 0);
  1983. if (buffer == head)
  1984. break;
  1985. if (!index)
  1986. index += ring->count;
  1987. index--;
  1988. }
  1989. return -ENOMEM;
  1990. }
  1991. static struct igc_ring *igc_xdp_get_tx_ring(struct igc_adapter *adapter,
  1992. int cpu)
  1993. {
  1994. int index = cpu;
  1995. if (unlikely(index < 0))
  1996. index = 0;
  1997. while (index >= adapter->num_tx_queues)
  1998. index -= adapter->num_tx_queues;
  1999. return adapter->tx_ring[index];
  2000. }
  2001. static int igc_xdp_xmit_back(struct igc_adapter *adapter, struct xdp_buff *xdp)
  2002. {
  2003. struct xdp_frame *xdpf = xdp_convert_buff_to_frame(xdp);
  2004. int cpu = smp_processor_id();
  2005. struct netdev_queue *nq;
  2006. struct igc_ring *ring;
  2007. int res;
  2008. if (unlikely(!xdpf))
  2009. return -EFAULT;
  2010. ring = igc_xdp_get_tx_ring(adapter, cpu);
  2011. nq = txring_txq(ring);
  2012. __netif_tx_lock(nq, cpu);
  2013. /* Avoid transmit queue timeout since we share it with the slow path */
  2014. txq_trans_cond_update(nq);
  2015. res = igc_xdp_init_tx_descriptor(ring, xdpf);
  2016. __netif_tx_unlock(nq);
  2017. return res;
  2018. }
  2019. /* This function assumes rcu_read_lock() is held by the caller. */
  2020. static int __igc_xdp_run_prog(struct igc_adapter *adapter,
  2021. struct bpf_prog *prog,
  2022. struct xdp_buff *xdp)
  2023. {
  2024. u32 act = bpf_prog_run_xdp(prog, xdp);
  2025. switch (act) {
  2026. case XDP_PASS:
  2027. return IGC_XDP_PASS;
  2028. case XDP_TX:
  2029. if (igc_xdp_xmit_back(adapter, xdp) < 0)
  2030. goto out_failure;
  2031. return IGC_XDP_TX;
  2032. case XDP_REDIRECT:
  2033. if (xdp_do_redirect(adapter->netdev, xdp, prog) < 0)
  2034. goto out_failure;
  2035. return IGC_XDP_REDIRECT;
  2036. break;
  2037. default:
  2038. bpf_warn_invalid_xdp_action(adapter->netdev, prog, act);
  2039. fallthrough;
  2040. case XDP_ABORTED:
  2041. out_failure:
  2042. trace_xdp_exception(adapter->netdev, prog, act);
  2043. fallthrough;
  2044. case XDP_DROP:
  2045. return IGC_XDP_CONSUMED;
  2046. }
  2047. }
  2048. static struct sk_buff *igc_xdp_run_prog(struct igc_adapter *adapter,
  2049. struct xdp_buff *xdp)
  2050. {
  2051. struct bpf_prog *prog;
  2052. int res;
  2053. prog = READ_ONCE(adapter->xdp_prog);
  2054. if (!prog) {
  2055. res = IGC_XDP_PASS;
  2056. goto out;
  2057. }
  2058. res = __igc_xdp_run_prog(adapter, prog, xdp);
  2059. out:
  2060. return ERR_PTR(-res);
  2061. }
  2062. /* This function assumes __netif_tx_lock is held by the caller. */
  2063. static void igc_flush_tx_descriptors(struct igc_ring *ring)
  2064. {
  2065. /* Once tail pointer is updated, hardware can fetch the descriptors
  2066. * any time so we issue a write membar here to ensure all memory
  2067. * writes are complete before the tail pointer is updated.
  2068. */
  2069. wmb();
  2070. writel(ring->next_to_use, ring->tail);
  2071. }
  2072. static void igc_finalize_xdp(struct igc_adapter *adapter, int status)
  2073. {
  2074. int cpu = smp_processor_id();
  2075. struct netdev_queue *nq;
  2076. struct igc_ring *ring;
  2077. if (status & IGC_XDP_TX) {
  2078. ring = igc_xdp_get_tx_ring(adapter, cpu);
  2079. nq = txring_txq(ring);
  2080. __netif_tx_lock(nq, cpu);
  2081. igc_flush_tx_descriptors(ring);
  2082. __netif_tx_unlock(nq);
  2083. }
  2084. if (status & IGC_XDP_REDIRECT)
  2085. xdp_do_flush();
  2086. }
  2087. static void igc_update_rx_stats(struct igc_q_vector *q_vector,
  2088. unsigned int packets, unsigned int bytes)
  2089. {
  2090. struct igc_ring *ring = q_vector->rx.ring;
  2091. u64_stats_update_begin(&ring->rx_syncp);
  2092. ring->rx_stats.packets += packets;
  2093. ring->rx_stats.bytes += bytes;
  2094. u64_stats_update_end(&ring->rx_syncp);
  2095. q_vector->rx.total_packets += packets;
  2096. q_vector->rx.total_bytes += bytes;
  2097. }
  2098. static int igc_clean_rx_irq(struct igc_q_vector *q_vector, const int budget)
  2099. {
  2100. unsigned int total_bytes = 0, total_packets = 0;
  2101. struct igc_adapter *adapter = q_vector->adapter;
  2102. struct igc_ring *rx_ring = q_vector->rx.ring;
  2103. struct sk_buff *skb = rx_ring->skb;
  2104. u16 cleaned_count = igc_desc_unused(rx_ring);
  2105. int xdp_status = 0, rx_buffer_pgcnt;
  2106. while (likely(total_packets < budget)) {
  2107. struct igc_xdp_buff ctx = { .rx_ts = NULL };
  2108. struct igc_rx_buffer *rx_buffer;
  2109. union igc_adv_rx_desc *rx_desc;
  2110. unsigned int size, truesize;
  2111. int pkt_offset = 0;
  2112. void *pktbuf;
  2113. /* return some buffers to hardware, one at a time is too slow */
  2114. if (cleaned_count >= IGC_RX_BUFFER_WRITE) {
  2115. igc_alloc_rx_buffers(rx_ring, cleaned_count);
  2116. cleaned_count = 0;
  2117. }
  2118. rx_desc = IGC_RX_DESC(rx_ring, rx_ring->next_to_clean);
  2119. size = le16_to_cpu(rx_desc->wb.upper.length);
  2120. if (!size)
  2121. break;
  2122. /* This memory barrier is needed to keep us from reading
  2123. * any other fields out of the rx_desc until we know the
  2124. * descriptor has been written back
  2125. */
  2126. dma_rmb();
  2127. rx_buffer = igc_get_rx_buffer(rx_ring, size, &rx_buffer_pgcnt);
  2128. truesize = igc_get_rx_frame_truesize(rx_ring, size);
  2129. pktbuf = page_address(rx_buffer->page) + rx_buffer->page_offset;
  2130. if (igc_test_staterr(rx_desc, IGC_RXDADV_STAT_TSIP)) {
  2131. ctx.rx_ts = pktbuf;
  2132. pkt_offset = IGC_TS_HDR_LEN;
  2133. size -= IGC_TS_HDR_LEN;
  2134. }
  2135. if (!skb) {
  2136. xdp_init_buff(&ctx.xdp, truesize, &rx_ring->xdp_rxq);
  2137. xdp_prepare_buff(&ctx.xdp, pktbuf - igc_rx_offset(rx_ring),
  2138. igc_rx_offset(rx_ring) + pkt_offset,
  2139. size, true);
  2140. xdp_buff_clear_frags_flag(&ctx.xdp);
  2141. ctx.rx_desc = rx_desc;
  2142. skb = igc_xdp_run_prog(adapter, &ctx.xdp);
  2143. }
  2144. if (IS_ERR(skb)) {
  2145. unsigned int xdp_res = -PTR_ERR(skb);
  2146. switch (xdp_res) {
  2147. case IGC_XDP_CONSUMED:
  2148. rx_buffer->pagecnt_bias++;
  2149. break;
  2150. case IGC_XDP_TX:
  2151. case IGC_XDP_REDIRECT:
  2152. igc_rx_buffer_flip(rx_buffer, truesize);
  2153. xdp_status |= xdp_res;
  2154. break;
  2155. }
  2156. total_packets++;
  2157. total_bytes += size;
  2158. } else if (skb)
  2159. igc_add_rx_frag(rx_ring, rx_buffer, skb, size);
  2160. else if (ring_uses_build_skb(rx_ring))
  2161. skb = igc_build_skb(rx_ring, rx_buffer, &ctx.xdp);
  2162. else
  2163. skb = igc_construct_skb(rx_ring, rx_buffer, &ctx);
  2164. /* exit if we failed to retrieve a buffer */
  2165. if (!skb) {
  2166. rx_ring->rx_stats.alloc_failed++;
  2167. rx_buffer->pagecnt_bias++;
  2168. set_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags);
  2169. break;
  2170. }
  2171. igc_put_rx_buffer(rx_ring, rx_buffer, rx_buffer_pgcnt);
  2172. cleaned_count++;
  2173. /* fetch next buffer in frame if non-eop */
  2174. if (igc_is_non_eop(rx_ring, rx_desc))
  2175. continue;
  2176. /* verify the packet layout is correct */
  2177. if (igc_cleanup_headers(rx_ring, rx_desc, skb)) {
  2178. skb = NULL;
  2179. continue;
  2180. }
  2181. /* probably a little skewed due to removing CRC */
  2182. total_bytes += skb->len;
  2183. /* populate checksum, VLAN, and protocol */
  2184. igc_process_skb_fields(rx_ring, rx_desc, skb);
  2185. napi_gro_receive(&q_vector->napi, skb);
  2186. /* reset skb pointer */
  2187. skb = NULL;
  2188. /* update budget accounting */
  2189. total_packets++;
  2190. }
  2191. if (xdp_status)
  2192. igc_finalize_xdp(adapter, xdp_status);
  2193. /* place incomplete frames back on ring for completion */
  2194. rx_ring->skb = skb;
  2195. igc_update_rx_stats(q_vector, total_packets, total_bytes);
  2196. if (cleaned_count)
  2197. igc_alloc_rx_buffers(rx_ring, cleaned_count);
  2198. return total_packets;
  2199. }
  2200. static struct sk_buff *igc_construct_skb_zc(struct igc_ring *ring,
  2201. struct igc_xdp_buff *ctx)
  2202. {
  2203. struct xdp_buff *xdp = &ctx->xdp;
  2204. unsigned int totalsize = xdp->data_end - xdp->data_meta;
  2205. unsigned int metasize = xdp->data - xdp->data_meta;
  2206. struct sk_buff *skb;
  2207. net_prefetch(xdp->data_meta);
  2208. skb = napi_alloc_skb(&ring->q_vector->napi, totalsize);
  2209. if (unlikely(!skb))
  2210. return NULL;
  2211. memcpy(__skb_put(skb, totalsize), xdp->data_meta,
  2212. ALIGN(totalsize, sizeof(long)));
  2213. if (metasize) {
  2214. skb_metadata_set(skb, metasize);
  2215. __skb_pull(skb, metasize);
  2216. }
  2217. if (ctx->rx_ts) {
  2218. skb_shinfo(skb)->tx_flags |= SKBTX_HW_TSTAMP_NETDEV;
  2219. skb_hwtstamps(skb)->netdev_data = ctx->rx_ts;
  2220. }
  2221. return skb;
  2222. }
  2223. static void igc_dispatch_skb_zc(struct igc_q_vector *q_vector,
  2224. union igc_adv_rx_desc *desc,
  2225. struct igc_xdp_buff *ctx)
  2226. {
  2227. struct igc_ring *ring = q_vector->rx.ring;
  2228. struct sk_buff *skb;
  2229. skb = igc_construct_skb_zc(ring, ctx);
  2230. if (!skb) {
  2231. ring->rx_stats.alloc_failed++;
  2232. set_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &ring->flags);
  2233. return;
  2234. }
  2235. if (igc_cleanup_headers(ring, desc, skb))
  2236. return;
  2237. igc_process_skb_fields(ring, desc, skb);
  2238. napi_gro_receive(&q_vector->napi, skb);
  2239. }
  2240. static struct igc_xdp_buff *xsk_buff_to_igc_ctx(struct xdp_buff *xdp)
  2241. {
  2242. /* xdp_buff pointer used by ZC code path is alloc as xdp_buff_xsk. The
  2243. * igc_xdp_buff shares its layout with xdp_buff_xsk and private
  2244. * igc_xdp_buff fields fall into xdp_buff_xsk->cb
  2245. */
  2246. return (struct igc_xdp_buff *)xdp;
  2247. }
  2248. static int igc_clean_rx_irq_zc(struct igc_q_vector *q_vector, const int budget)
  2249. {
  2250. struct igc_adapter *adapter = q_vector->adapter;
  2251. struct igc_ring *ring = q_vector->rx.ring;
  2252. u16 cleaned_count = igc_desc_unused(ring);
  2253. int total_bytes = 0, total_packets = 0;
  2254. u16 ntc = ring->next_to_clean;
  2255. struct bpf_prog *prog;
  2256. bool failure = false;
  2257. int xdp_status = 0;
  2258. rcu_read_lock();
  2259. prog = READ_ONCE(adapter->xdp_prog);
  2260. while (likely(total_packets < budget)) {
  2261. union igc_adv_rx_desc *desc;
  2262. struct igc_rx_buffer *bi;
  2263. struct igc_xdp_buff *ctx;
  2264. unsigned int size;
  2265. int res;
  2266. desc = IGC_RX_DESC(ring, ntc);
  2267. size = le16_to_cpu(desc->wb.upper.length);
  2268. if (!size)
  2269. break;
  2270. /* This memory barrier is needed to keep us from reading
  2271. * any other fields out of the rx_desc until we know the
  2272. * descriptor has been written back
  2273. */
  2274. dma_rmb();
  2275. bi = &ring->rx_buffer_info[ntc];
  2276. ctx = xsk_buff_to_igc_ctx(bi->xdp);
  2277. ctx->rx_desc = desc;
  2278. if (igc_test_staterr(desc, IGC_RXDADV_STAT_TSIP)) {
  2279. ctx->rx_ts = bi->xdp->data;
  2280. bi->xdp->data += IGC_TS_HDR_LEN;
  2281. /* HW timestamp has been copied into local variable. Metadata
  2282. * length when XDP program is called should be 0.
  2283. */
  2284. bi->xdp->data_meta += IGC_TS_HDR_LEN;
  2285. size -= IGC_TS_HDR_LEN;
  2286. } else {
  2287. ctx->rx_ts = NULL;
  2288. }
  2289. bi->xdp->data_end = bi->xdp->data + size;
  2290. xsk_buff_dma_sync_for_cpu(bi->xdp);
  2291. res = __igc_xdp_run_prog(adapter, prog, bi->xdp);
  2292. switch (res) {
  2293. case IGC_XDP_PASS:
  2294. igc_dispatch_skb_zc(q_vector, desc, ctx);
  2295. fallthrough;
  2296. case IGC_XDP_CONSUMED:
  2297. xsk_buff_free(bi->xdp);
  2298. break;
  2299. case IGC_XDP_TX:
  2300. case IGC_XDP_REDIRECT:
  2301. xdp_status |= res;
  2302. break;
  2303. }
  2304. bi->xdp = NULL;
  2305. total_bytes += size;
  2306. total_packets++;
  2307. cleaned_count++;
  2308. ntc++;
  2309. if (ntc == ring->count)
  2310. ntc = 0;
  2311. }
  2312. ring->next_to_clean = ntc;
  2313. rcu_read_unlock();
  2314. if (cleaned_count >= IGC_RX_BUFFER_WRITE)
  2315. failure = !igc_alloc_rx_buffers_zc(ring, cleaned_count);
  2316. if (xdp_status)
  2317. igc_finalize_xdp(adapter, xdp_status);
  2318. igc_update_rx_stats(q_vector, total_packets, total_bytes);
  2319. if (xsk_uses_need_wakeup(ring->xsk_pool)) {
  2320. if (failure || ring->next_to_clean == ring->next_to_use)
  2321. xsk_set_rx_need_wakeup(ring->xsk_pool);
  2322. else
  2323. xsk_clear_rx_need_wakeup(ring->xsk_pool);
  2324. return total_packets;
  2325. }
  2326. return failure ? budget : total_packets;
  2327. }
  2328. static void igc_update_tx_stats(struct igc_q_vector *q_vector,
  2329. unsigned int packets, unsigned int bytes)
  2330. {
  2331. struct igc_ring *ring = q_vector->tx.ring;
  2332. u64_stats_update_begin(&ring->tx_syncp);
  2333. ring->tx_stats.bytes += bytes;
  2334. ring->tx_stats.packets += packets;
  2335. u64_stats_update_end(&ring->tx_syncp);
  2336. q_vector->tx.total_bytes += bytes;
  2337. q_vector->tx.total_packets += packets;
  2338. }
  2339. static void igc_xsk_request_timestamp(void *_priv)
  2340. {
  2341. struct igc_metadata_request *meta_req = _priv;
  2342. struct igc_ring *tx_ring = meta_req->tx_ring;
  2343. struct igc_tx_timestamp_request *tstamp;
  2344. u32 tx_flags = IGC_TX_FLAGS_TSTAMP;
  2345. struct igc_adapter *adapter;
  2346. unsigned long lock_flags;
  2347. bool found = false;
  2348. int i;
  2349. if (test_bit(IGC_RING_FLAG_TX_HWTSTAMP, &tx_ring->flags)) {
  2350. adapter = netdev_priv(tx_ring->netdev);
  2351. spin_lock_irqsave(&adapter->ptp_tx_lock, lock_flags);
  2352. /* Search for available tstamp regs */
  2353. for (i = 0; i < IGC_MAX_TX_TSTAMP_REGS; i++) {
  2354. tstamp = &adapter->tx_tstamp[i];
  2355. /* tstamp->skb and tstamp->xsk_tx_buffer are in union.
  2356. * When tstamp->skb is equal to NULL,
  2357. * tstamp->xsk_tx_buffer is equal to NULL as well.
  2358. * This condition means that the particular tstamp reg
  2359. * is not occupied by other packet.
  2360. */
  2361. if (!tstamp->skb) {
  2362. found = true;
  2363. break;
  2364. }
  2365. }
  2366. /* Return if no available tstamp regs */
  2367. if (!found) {
  2368. adapter->tx_hwtstamp_skipped++;
  2369. spin_unlock_irqrestore(&adapter->ptp_tx_lock,
  2370. lock_flags);
  2371. return;
  2372. }
  2373. tstamp->start = jiffies;
  2374. tstamp->xsk_queue_index = tx_ring->queue_index;
  2375. tstamp->xsk_tx_buffer = meta_req->tx_buffer;
  2376. tstamp->buffer_type = IGC_TX_BUFFER_TYPE_XSK;
  2377. /* Hold the transmit completion until timestamp is ready */
  2378. meta_req->tx_buffer->xsk_pending_ts = true;
  2379. /* Keep the pointer to tx_timestamp, which is located in XDP
  2380. * metadata area. It is the location to store the value of
  2381. * tx hardware timestamp.
  2382. */
  2383. xsk_tx_metadata_to_compl(meta_req->meta, &tstamp->xsk_meta);
  2384. /* Set timestamp bit based on the _TSTAMP(_X) bit. */
  2385. tx_flags |= tstamp->flags;
  2386. meta_req->cmd_type |= IGC_SET_FLAG(tx_flags,
  2387. IGC_TX_FLAGS_TSTAMP,
  2388. (IGC_ADVTXD_MAC_TSTAMP));
  2389. meta_req->cmd_type |= IGC_SET_FLAG(tx_flags,
  2390. IGC_TX_FLAGS_TSTAMP_1,
  2391. (IGC_ADVTXD_TSTAMP_REG_1));
  2392. meta_req->cmd_type |= IGC_SET_FLAG(tx_flags,
  2393. IGC_TX_FLAGS_TSTAMP_2,
  2394. (IGC_ADVTXD_TSTAMP_REG_2));
  2395. meta_req->cmd_type |= IGC_SET_FLAG(tx_flags,
  2396. IGC_TX_FLAGS_TSTAMP_3,
  2397. (IGC_ADVTXD_TSTAMP_REG_3));
  2398. spin_unlock_irqrestore(&adapter->ptp_tx_lock, lock_flags);
  2399. }
  2400. }
  2401. static u64 igc_xsk_fill_timestamp(void *_priv)
  2402. {
  2403. return *(u64 *)_priv;
  2404. }
  2405. const struct xsk_tx_metadata_ops igc_xsk_tx_metadata_ops = {
  2406. .tmo_request_timestamp = igc_xsk_request_timestamp,
  2407. .tmo_fill_timestamp = igc_xsk_fill_timestamp,
  2408. };
  2409. static void igc_xdp_xmit_zc(struct igc_ring *ring)
  2410. {
  2411. struct xsk_buff_pool *pool = ring->xsk_pool;
  2412. struct netdev_queue *nq = txring_txq(ring);
  2413. union igc_adv_tx_desc *tx_desc = NULL;
  2414. int cpu = smp_processor_id();
  2415. struct xdp_desc xdp_desc;
  2416. u16 budget, ntu;
  2417. if (!netif_carrier_ok(ring->netdev))
  2418. return;
  2419. __netif_tx_lock(nq, cpu);
  2420. /* Avoid transmit queue timeout since we share it with the slow path */
  2421. txq_trans_cond_update(nq);
  2422. ntu = ring->next_to_use;
  2423. budget = igc_desc_unused(ring);
  2424. while (xsk_tx_peek_desc(pool, &xdp_desc) && budget--) {
  2425. struct igc_metadata_request meta_req;
  2426. struct xsk_tx_metadata *meta = NULL;
  2427. struct igc_tx_buffer *bi;
  2428. u32 olinfo_status;
  2429. dma_addr_t dma;
  2430. meta_req.cmd_type = IGC_ADVTXD_DTYP_DATA |
  2431. IGC_ADVTXD_DCMD_DEXT |
  2432. IGC_ADVTXD_DCMD_IFCS |
  2433. IGC_TXD_DCMD | xdp_desc.len;
  2434. olinfo_status = xdp_desc.len << IGC_ADVTXD_PAYLEN_SHIFT;
  2435. dma = xsk_buff_raw_get_dma(pool, xdp_desc.addr);
  2436. meta = xsk_buff_get_metadata(pool, xdp_desc.addr);
  2437. xsk_buff_raw_dma_sync_for_device(pool, dma, xdp_desc.len);
  2438. bi = &ring->tx_buffer_info[ntu];
  2439. meta_req.tx_ring = ring;
  2440. meta_req.tx_buffer = bi;
  2441. meta_req.meta = meta;
  2442. xsk_tx_metadata_request(meta, &igc_xsk_tx_metadata_ops,
  2443. &meta_req);
  2444. tx_desc = IGC_TX_DESC(ring, ntu);
  2445. tx_desc->read.cmd_type_len = cpu_to_le32(meta_req.cmd_type);
  2446. tx_desc->read.olinfo_status = cpu_to_le32(olinfo_status);
  2447. tx_desc->read.buffer_addr = cpu_to_le64(dma);
  2448. bi->type = IGC_TX_BUFFER_TYPE_XSK;
  2449. bi->protocol = 0;
  2450. bi->bytecount = xdp_desc.len;
  2451. bi->gso_segs = 1;
  2452. bi->time_stamp = jiffies;
  2453. bi->next_to_watch = tx_desc;
  2454. netdev_tx_sent_queue(txring_txq(ring), xdp_desc.len);
  2455. ntu++;
  2456. if (ntu == ring->count)
  2457. ntu = 0;
  2458. }
  2459. ring->next_to_use = ntu;
  2460. if (tx_desc) {
  2461. igc_flush_tx_descriptors(ring);
  2462. xsk_tx_release(pool);
  2463. }
  2464. __netif_tx_unlock(nq);
  2465. }
  2466. /**
  2467. * igc_clean_tx_irq - Reclaim resources after transmit completes
  2468. * @q_vector: pointer to q_vector containing needed info
  2469. * @napi_budget: Used to determine if we are in netpoll
  2470. *
  2471. * returns true if ring is completely cleaned
  2472. */
  2473. static bool igc_clean_tx_irq(struct igc_q_vector *q_vector, int napi_budget)
  2474. {
  2475. struct igc_adapter *adapter = q_vector->adapter;
  2476. unsigned int total_bytes = 0, total_packets = 0;
  2477. unsigned int budget = q_vector->tx.work_limit;
  2478. struct igc_ring *tx_ring = q_vector->tx.ring;
  2479. unsigned int i = tx_ring->next_to_clean;
  2480. struct igc_tx_buffer *tx_buffer;
  2481. union igc_adv_tx_desc *tx_desc;
  2482. u32 xsk_frames = 0;
  2483. if (test_bit(__IGC_DOWN, &adapter->state))
  2484. return true;
  2485. tx_buffer = &tx_ring->tx_buffer_info[i];
  2486. tx_desc = IGC_TX_DESC(tx_ring, i);
  2487. i -= tx_ring->count;
  2488. do {
  2489. union igc_adv_tx_desc *eop_desc = tx_buffer->next_to_watch;
  2490. /* if next_to_watch is not set then there is no work pending */
  2491. if (!eop_desc)
  2492. break;
  2493. /* prevent any other reads prior to eop_desc */
  2494. smp_rmb();
  2495. /* if DD is not set pending work has not been completed */
  2496. if (!(eop_desc->wb.status & cpu_to_le32(IGC_TXD_STAT_DD)))
  2497. break;
  2498. /* Hold the completions while there's a pending tx hardware
  2499. * timestamp request from XDP Tx metadata.
  2500. */
  2501. if (tx_buffer->type == IGC_TX_BUFFER_TYPE_XSK &&
  2502. tx_buffer->xsk_pending_ts)
  2503. break;
  2504. /* clear next_to_watch to prevent false hangs */
  2505. tx_buffer->next_to_watch = NULL;
  2506. /* update the statistics for this packet */
  2507. total_bytes += tx_buffer->bytecount;
  2508. total_packets += tx_buffer->gso_segs;
  2509. switch (tx_buffer->type) {
  2510. case IGC_TX_BUFFER_TYPE_XSK:
  2511. xsk_frames++;
  2512. break;
  2513. case IGC_TX_BUFFER_TYPE_XDP:
  2514. xdp_return_frame(tx_buffer->xdpf);
  2515. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  2516. break;
  2517. case IGC_TX_BUFFER_TYPE_SKB:
  2518. napi_consume_skb(tx_buffer->skb, napi_budget);
  2519. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  2520. break;
  2521. default:
  2522. netdev_warn_once(tx_ring->netdev, "Unknown Tx buffer type\n");
  2523. break;
  2524. }
  2525. /* clear last DMA location and unmap remaining buffers */
  2526. while (tx_desc != eop_desc) {
  2527. tx_buffer++;
  2528. tx_desc++;
  2529. i++;
  2530. if (unlikely(!i)) {
  2531. i -= tx_ring->count;
  2532. tx_buffer = tx_ring->tx_buffer_info;
  2533. tx_desc = IGC_TX_DESC(tx_ring, 0);
  2534. }
  2535. /* unmap any remaining paged data */
  2536. if (dma_unmap_len(tx_buffer, len))
  2537. igc_unmap_tx_buffer(tx_ring->dev, tx_buffer);
  2538. }
  2539. /* move us one more past the eop_desc for start of next pkt */
  2540. tx_buffer++;
  2541. tx_desc++;
  2542. i++;
  2543. if (unlikely(!i)) {
  2544. i -= tx_ring->count;
  2545. tx_buffer = tx_ring->tx_buffer_info;
  2546. tx_desc = IGC_TX_DESC(tx_ring, 0);
  2547. }
  2548. /* issue prefetch for next Tx descriptor */
  2549. prefetch(tx_desc);
  2550. /* update budget accounting */
  2551. budget--;
  2552. } while (likely(budget));
  2553. netdev_tx_completed_queue(txring_txq(tx_ring),
  2554. total_packets, total_bytes);
  2555. i += tx_ring->count;
  2556. tx_ring->next_to_clean = i;
  2557. igc_update_tx_stats(q_vector, total_packets, total_bytes);
  2558. if (tx_ring->xsk_pool) {
  2559. if (xsk_frames)
  2560. xsk_tx_completed(tx_ring->xsk_pool, xsk_frames);
  2561. if (xsk_uses_need_wakeup(tx_ring->xsk_pool))
  2562. xsk_set_tx_need_wakeup(tx_ring->xsk_pool);
  2563. igc_xdp_xmit_zc(tx_ring);
  2564. }
  2565. if (test_bit(IGC_RING_FLAG_TX_DETECT_HANG, &tx_ring->flags)) {
  2566. struct igc_hw *hw = &adapter->hw;
  2567. /* Detect a transmit hang in hardware, this serializes the
  2568. * check with the clearing of time_stamp and movement of i
  2569. */
  2570. clear_bit(IGC_RING_FLAG_TX_DETECT_HANG, &tx_ring->flags);
  2571. if (tx_buffer->next_to_watch &&
  2572. time_after(jiffies, tx_buffer->time_stamp +
  2573. (adapter->tx_timeout_factor * HZ)) &&
  2574. !(rd32(IGC_STATUS) & IGC_STATUS_TXOFF) &&
  2575. (rd32(IGC_TDH(tx_ring->reg_idx)) != readl(tx_ring->tail)) &&
  2576. !tx_ring->oper_gate_closed) {
  2577. /* detected Tx unit hang */
  2578. netdev_err(tx_ring->netdev,
  2579. "Detected Tx Unit Hang\n"
  2580. " Tx Queue <%d>\n"
  2581. " TDH <%x>\n"
  2582. " TDT <%x>\n"
  2583. " next_to_use <%x>\n"
  2584. " next_to_clean <%x>\n"
  2585. "buffer_info[next_to_clean]\n"
  2586. " time_stamp <%lx>\n"
  2587. " next_to_watch <%p>\n"
  2588. " jiffies <%lx>\n"
  2589. " desc.status <%x>\n",
  2590. tx_ring->queue_index,
  2591. rd32(IGC_TDH(tx_ring->reg_idx)),
  2592. readl(tx_ring->tail),
  2593. tx_ring->next_to_use,
  2594. tx_ring->next_to_clean,
  2595. tx_buffer->time_stamp,
  2596. tx_buffer->next_to_watch,
  2597. jiffies,
  2598. tx_buffer->next_to_watch->wb.status);
  2599. netif_stop_subqueue(tx_ring->netdev,
  2600. tx_ring->queue_index);
  2601. /* we are about to reset, no point in enabling stuff */
  2602. return true;
  2603. }
  2604. }
  2605. #define TX_WAKE_THRESHOLD (DESC_NEEDED * 2)
  2606. if (unlikely(total_packets &&
  2607. netif_carrier_ok(tx_ring->netdev) &&
  2608. igc_desc_unused(tx_ring) >= TX_WAKE_THRESHOLD)) {
  2609. /* Make sure that anybody stopping the queue after this
  2610. * sees the new next_to_clean.
  2611. */
  2612. smp_mb();
  2613. if (__netif_subqueue_stopped(tx_ring->netdev,
  2614. tx_ring->queue_index) &&
  2615. !(test_bit(__IGC_DOWN, &adapter->state))) {
  2616. netif_wake_subqueue(tx_ring->netdev,
  2617. tx_ring->queue_index);
  2618. u64_stats_update_begin(&tx_ring->tx_syncp);
  2619. tx_ring->tx_stats.restart_queue++;
  2620. u64_stats_update_end(&tx_ring->tx_syncp);
  2621. }
  2622. }
  2623. return !!budget;
  2624. }
  2625. static int igc_find_mac_filter(struct igc_adapter *adapter,
  2626. enum igc_mac_filter_type type, const u8 *addr)
  2627. {
  2628. struct igc_hw *hw = &adapter->hw;
  2629. int max_entries = hw->mac.rar_entry_count;
  2630. u32 ral, rah;
  2631. int i;
  2632. for (i = 0; i < max_entries; i++) {
  2633. ral = rd32(IGC_RAL(i));
  2634. rah = rd32(IGC_RAH(i));
  2635. if (!(rah & IGC_RAH_AV))
  2636. continue;
  2637. if (!!(rah & IGC_RAH_ASEL_SRC_ADDR) != type)
  2638. continue;
  2639. if ((rah & IGC_RAH_RAH_MASK) !=
  2640. le16_to_cpup((__le16 *)(addr + 4)))
  2641. continue;
  2642. if (ral != le32_to_cpup((__le32 *)(addr)))
  2643. continue;
  2644. return i;
  2645. }
  2646. return -1;
  2647. }
  2648. static int igc_get_avail_mac_filter_slot(struct igc_adapter *adapter)
  2649. {
  2650. struct igc_hw *hw = &adapter->hw;
  2651. int max_entries = hw->mac.rar_entry_count;
  2652. u32 rah;
  2653. int i;
  2654. for (i = 0; i < max_entries; i++) {
  2655. rah = rd32(IGC_RAH(i));
  2656. if (!(rah & IGC_RAH_AV))
  2657. return i;
  2658. }
  2659. return -1;
  2660. }
  2661. /**
  2662. * igc_add_mac_filter() - Add MAC address filter
  2663. * @adapter: Pointer to adapter where the filter should be added
  2664. * @type: MAC address filter type (source or destination)
  2665. * @addr: MAC address
  2666. * @queue: If non-negative, queue assignment feature is enabled and frames
  2667. * matching the filter are enqueued onto 'queue'. Otherwise, queue
  2668. * assignment is disabled.
  2669. *
  2670. * Return: 0 in case of success, negative errno code otherwise.
  2671. */
  2672. static int igc_add_mac_filter(struct igc_adapter *adapter,
  2673. enum igc_mac_filter_type type, const u8 *addr,
  2674. int queue)
  2675. {
  2676. struct net_device *dev = adapter->netdev;
  2677. int index;
  2678. index = igc_find_mac_filter(adapter, type, addr);
  2679. if (index >= 0)
  2680. goto update_filter;
  2681. index = igc_get_avail_mac_filter_slot(adapter);
  2682. if (index < 0)
  2683. return -ENOSPC;
  2684. netdev_dbg(dev, "Add MAC address filter: index %d type %s address %pM queue %d\n",
  2685. index, type == IGC_MAC_FILTER_TYPE_DST ? "dst" : "src",
  2686. addr, queue);
  2687. update_filter:
  2688. igc_set_mac_filter_hw(adapter, index, type, addr, queue);
  2689. return 0;
  2690. }
  2691. /**
  2692. * igc_del_mac_filter() - Delete MAC address filter
  2693. * @adapter: Pointer to adapter where the filter should be deleted from
  2694. * @type: MAC address filter type (source or destination)
  2695. * @addr: MAC address
  2696. */
  2697. static void igc_del_mac_filter(struct igc_adapter *adapter,
  2698. enum igc_mac_filter_type type, const u8 *addr)
  2699. {
  2700. struct net_device *dev = adapter->netdev;
  2701. int index;
  2702. index = igc_find_mac_filter(adapter, type, addr);
  2703. if (index < 0)
  2704. return;
  2705. if (index == 0) {
  2706. /* If this is the default filter, we don't actually delete it.
  2707. * We just reset to its default value i.e. disable queue
  2708. * assignment.
  2709. */
  2710. netdev_dbg(dev, "Disable default MAC filter queue assignment");
  2711. igc_set_mac_filter_hw(adapter, 0, type, addr, -1);
  2712. } else {
  2713. netdev_dbg(dev, "Delete MAC address filter: index %d type %s address %pM\n",
  2714. index,
  2715. type == IGC_MAC_FILTER_TYPE_DST ? "dst" : "src",
  2716. addr);
  2717. igc_clear_mac_filter_hw(adapter, index);
  2718. }
  2719. }
  2720. /**
  2721. * igc_add_vlan_prio_filter() - Add VLAN priority filter
  2722. * @adapter: Pointer to adapter where the filter should be added
  2723. * @prio: VLAN priority value
  2724. * @queue: Queue number which matching frames are assigned to
  2725. *
  2726. * Return: 0 in case of success, negative errno code otherwise.
  2727. */
  2728. static int igc_add_vlan_prio_filter(struct igc_adapter *adapter, int prio,
  2729. int queue)
  2730. {
  2731. struct net_device *dev = adapter->netdev;
  2732. struct igc_hw *hw = &adapter->hw;
  2733. u32 vlanpqf;
  2734. vlanpqf = rd32(IGC_VLANPQF);
  2735. if (vlanpqf & IGC_VLANPQF_VALID(prio)) {
  2736. netdev_dbg(dev, "VLAN priority filter already in use\n");
  2737. return -EEXIST;
  2738. }
  2739. vlanpqf |= IGC_VLANPQF_QSEL(prio, queue);
  2740. vlanpqf |= IGC_VLANPQF_VALID(prio);
  2741. wr32(IGC_VLANPQF, vlanpqf);
  2742. netdev_dbg(dev, "Add VLAN priority filter: prio %d queue %d\n",
  2743. prio, queue);
  2744. return 0;
  2745. }
  2746. /**
  2747. * igc_del_vlan_prio_filter() - Delete VLAN priority filter
  2748. * @adapter: Pointer to adapter where the filter should be deleted from
  2749. * @prio: VLAN priority value
  2750. */
  2751. static void igc_del_vlan_prio_filter(struct igc_adapter *adapter, int prio)
  2752. {
  2753. struct igc_hw *hw = &adapter->hw;
  2754. u32 vlanpqf;
  2755. vlanpqf = rd32(IGC_VLANPQF);
  2756. vlanpqf &= ~IGC_VLANPQF_VALID(prio);
  2757. vlanpqf &= ~IGC_VLANPQF_QSEL(prio, IGC_VLANPQF_QUEUE_MASK);
  2758. wr32(IGC_VLANPQF, vlanpqf);
  2759. netdev_dbg(adapter->netdev, "Delete VLAN priority filter: prio %d\n",
  2760. prio);
  2761. }
  2762. static int igc_get_avail_etype_filter_slot(struct igc_adapter *adapter)
  2763. {
  2764. struct igc_hw *hw = &adapter->hw;
  2765. int i;
  2766. for (i = 0; i < MAX_ETYPE_FILTER; i++) {
  2767. u32 etqf = rd32(IGC_ETQF(i));
  2768. if (!(etqf & IGC_ETQF_FILTER_ENABLE))
  2769. return i;
  2770. }
  2771. return -1;
  2772. }
  2773. /**
  2774. * igc_add_etype_filter() - Add ethertype filter
  2775. * @adapter: Pointer to adapter where the filter should be added
  2776. * @etype: Ethertype value
  2777. * @queue: If non-negative, queue assignment feature is enabled and frames
  2778. * matching the filter are enqueued onto 'queue'. Otherwise, queue
  2779. * assignment is disabled.
  2780. *
  2781. * Return: 0 in case of success, negative errno code otherwise.
  2782. */
  2783. static int igc_add_etype_filter(struct igc_adapter *adapter, u16 etype,
  2784. int queue)
  2785. {
  2786. struct igc_hw *hw = &adapter->hw;
  2787. int index;
  2788. u32 etqf;
  2789. index = igc_get_avail_etype_filter_slot(adapter);
  2790. if (index < 0)
  2791. return -ENOSPC;
  2792. etqf = rd32(IGC_ETQF(index));
  2793. etqf &= ~IGC_ETQF_ETYPE_MASK;
  2794. etqf |= etype;
  2795. if (queue >= 0) {
  2796. etqf &= ~IGC_ETQF_QUEUE_MASK;
  2797. etqf |= (queue << IGC_ETQF_QUEUE_SHIFT);
  2798. etqf |= IGC_ETQF_QUEUE_ENABLE;
  2799. }
  2800. etqf |= IGC_ETQF_FILTER_ENABLE;
  2801. wr32(IGC_ETQF(index), etqf);
  2802. netdev_dbg(adapter->netdev, "Add ethertype filter: etype %04x queue %d\n",
  2803. etype, queue);
  2804. return 0;
  2805. }
  2806. static int igc_find_etype_filter(struct igc_adapter *adapter, u16 etype)
  2807. {
  2808. struct igc_hw *hw = &adapter->hw;
  2809. int i;
  2810. for (i = 0; i < MAX_ETYPE_FILTER; i++) {
  2811. u32 etqf = rd32(IGC_ETQF(i));
  2812. if ((etqf & IGC_ETQF_ETYPE_MASK) == etype)
  2813. return i;
  2814. }
  2815. return -1;
  2816. }
  2817. /**
  2818. * igc_del_etype_filter() - Delete ethertype filter
  2819. * @adapter: Pointer to adapter where the filter should be deleted from
  2820. * @etype: Ethertype value
  2821. */
  2822. static void igc_del_etype_filter(struct igc_adapter *adapter, u16 etype)
  2823. {
  2824. struct igc_hw *hw = &adapter->hw;
  2825. int index;
  2826. index = igc_find_etype_filter(adapter, etype);
  2827. if (index < 0)
  2828. return;
  2829. wr32(IGC_ETQF(index), 0);
  2830. netdev_dbg(adapter->netdev, "Delete ethertype filter: etype %04x\n",
  2831. etype);
  2832. }
  2833. static int igc_flex_filter_select(struct igc_adapter *adapter,
  2834. struct igc_flex_filter *input,
  2835. u32 *fhft)
  2836. {
  2837. struct igc_hw *hw = &adapter->hw;
  2838. u8 fhft_index;
  2839. u32 fhftsl;
  2840. if (input->index >= MAX_FLEX_FILTER) {
  2841. netdev_err(adapter->netdev, "Wrong Flex Filter index selected!\n");
  2842. return -EINVAL;
  2843. }
  2844. /* Indirect table select register */
  2845. fhftsl = rd32(IGC_FHFTSL);
  2846. fhftsl &= ~IGC_FHFTSL_FTSL_MASK;
  2847. switch (input->index) {
  2848. case 0 ... 7:
  2849. fhftsl |= 0x00;
  2850. break;
  2851. case 8 ... 15:
  2852. fhftsl |= 0x01;
  2853. break;
  2854. case 16 ... 23:
  2855. fhftsl |= 0x02;
  2856. break;
  2857. case 24 ... 31:
  2858. fhftsl |= 0x03;
  2859. break;
  2860. }
  2861. wr32(IGC_FHFTSL, fhftsl);
  2862. /* Normalize index down to host table register */
  2863. fhft_index = input->index % 8;
  2864. *fhft = (fhft_index < 4) ? IGC_FHFT(fhft_index) :
  2865. IGC_FHFT_EXT(fhft_index - 4);
  2866. return 0;
  2867. }
  2868. static int igc_write_flex_filter_ll(struct igc_adapter *adapter,
  2869. struct igc_flex_filter *input)
  2870. {
  2871. struct igc_hw *hw = &adapter->hw;
  2872. u8 *data = input->data;
  2873. u8 *mask = input->mask;
  2874. u32 queuing;
  2875. u32 fhft;
  2876. u32 wufc;
  2877. int ret;
  2878. int i;
  2879. /* Length has to be aligned to 8. Otherwise the filter will fail. Bail
  2880. * out early to avoid surprises later.
  2881. */
  2882. if (input->length % 8 != 0) {
  2883. netdev_err(adapter->netdev, "The length of a flex filter has to be 8 byte aligned!\n");
  2884. return -EINVAL;
  2885. }
  2886. /* Select corresponding flex filter register and get base for host table. */
  2887. ret = igc_flex_filter_select(adapter, input, &fhft);
  2888. if (ret)
  2889. return ret;
  2890. /* When adding a filter globally disable flex filter feature. That is
  2891. * recommended within the datasheet.
  2892. */
  2893. wufc = rd32(IGC_WUFC);
  2894. wufc &= ~IGC_WUFC_FLEX_HQ;
  2895. wr32(IGC_WUFC, wufc);
  2896. /* Configure filter */
  2897. queuing = input->length & IGC_FHFT_LENGTH_MASK;
  2898. queuing |= FIELD_PREP(IGC_FHFT_QUEUE_MASK, input->rx_queue);
  2899. queuing |= FIELD_PREP(IGC_FHFT_PRIO_MASK, input->prio);
  2900. if (input->immediate_irq)
  2901. queuing |= IGC_FHFT_IMM_INT;
  2902. if (input->drop)
  2903. queuing |= IGC_FHFT_DROP;
  2904. wr32(fhft + 0xFC, queuing);
  2905. /* Write data (128 byte) and mask (128 bit) */
  2906. for (i = 0; i < 16; ++i) {
  2907. const size_t data_idx = i * 8;
  2908. const size_t row_idx = i * 16;
  2909. u32 dw0 =
  2910. (data[data_idx + 0] << 0) |
  2911. (data[data_idx + 1] << 8) |
  2912. (data[data_idx + 2] << 16) |
  2913. (data[data_idx + 3] << 24);
  2914. u32 dw1 =
  2915. (data[data_idx + 4] << 0) |
  2916. (data[data_idx + 5] << 8) |
  2917. (data[data_idx + 6] << 16) |
  2918. (data[data_idx + 7] << 24);
  2919. u32 tmp;
  2920. /* Write row: dw0, dw1 and mask */
  2921. wr32(fhft + row_idx, dw0);
  2922. wr32(fhft + row_idx + 4, dw1);
  2923. /* mask is only valid for MASK(7, 0) */
  2924. tmp = rd32(fhft + row_idx + 8);
  2925. tmp &= ~GENMASK(7, 0);
  2926. tmp |= mask[i];
  2927. wr32(fhft + row_idx + 8, tmp);
  2928. }
  2929. /* Enable filter. */
  2930. wufc |= IGC_WUFC_FLEX_HQ;
  2931. if (input->index > 8) {
  2932. /* Filter 0-7 are enabled via WUFC. The other 24 filters are not. */
  2933. u32 wufc_ext = rd32(IGC_WUFC_EXT);
  2934. wufc_ext |= (IGC_WUFC_EXT_FLX8 << (input->index - 8));
  2935. wr32(IGC_WUFC_EXT, wufc_ext);
  2936. } else {
  2937. wufc |= (IGC_WUFC_FLX0 << input->index);
  2938. }
  2939. wr32(IGC_WUFC, wufc);
  2940. netdev_dbg(adapter->netdev, "Added flex filter %u to HW.\n",
  2941. input->index);
  2942. return 0;
  2943. }
  2944. static void igc_flex_filter_add_field(struct igc_flex_filter *flex,
  2945. const void *src, unsigned int offset,
  2946. size_t len, const void *mask)
  2947. {
  2948. int i;
  2949. /* data */
  2950. memcpy(&flex->data[offset], src, len);
  2951. /* mask */
  2952. for (i = 0; i < len; ++i) {
  2953. const unsigned int idx = i + offset;
  2954. const u8 *ptr = mask;
  2955. if (mask) {
  2956. if (ptr[i] & 0xff)
  2957. flex->mask[idx / 8] |= BIT(idx % 8);
  2958. continue;
  2959. }
  2960. flex->mask[idx / 8] |= BIT(idx % 8);
  2961. }
  2962. }
  2963. static int igc_find_avail_flex_filter_slot(struct igc_adapter *adapter)
  2964. {
  2965. struct igc_hw *hw = &adapter->hw;
  2966. u32 wufc, wufc_ext;
  2967. int i;
  2968. wufc = rd32(IGC_WUFC);
  2969. wufc_ext = rd32(IGC_WUFC_EXT);
  2970. for (i = 0; i < MAX_FLEX_FILTER; i++) {
  2971. if (i < 8) {
  2972. if (!(wufc & (IGC_WUFC_FLX0 << i)))
  2973. return i;
  2974. } else {
  2975. if (!(wufc_ext & (IGC_WUFC_EXT_FLX8 << (i - 8))))
  2976. return i;
  2977. }
  2978. }
  2979. return -ENOSPC;
  2980. }
  2981. static bool igc_flex_filter_in_use(struct igc_adapter *adapter)
  2982. {
  2983. struct igc_hw *hw = &adapter->hw;
  2984. u32 wufc, wufc_ext;
  2985. wufc = rd32(IGC_WUFC);
  2986. wufc_ext = rd32(IGC_WUFC_EXT);
  2987. if (wufc & IGC_WUFC_FILTER_MASK)
  2988. return true;
  2989. if (wufc_ext & IGC_WUFC_EXT_FILTER_MASK)
  2990. return true;
  2991. return false;
  2992. }
  2993. static int igc_add_flex_filter(struct igc_adapter *adapter,
  2994. struct igc_nfc_rule *rule)
  2995. {
  2996. struct igc_nfc_filter *filter = &rule->filter;
  2997. unsigned int eth_offset, user_offset;
  2998. struct igc_flex_filter flex = { };
  2999. int ret, index;
  3000. bool vlan;
  3001. index = igc_find_avail_flex_filter_slot(adapter);
  3002. if (index < 0)
  3003. return -ENOSPC;
  3004. /* Construct the flex filter:
  3005. * -> dest_mac [6]
  3006. * -> src_mac [6]
  3007. * -> tpid [2]
  3008. * -> vlan tci [2]
  3009. * -> ether type [2]
  3010. * -> user data [8]
  3011. * -> = 26 bytes => 32 length
  3012. */
  3013. flex.index = index;
  3014. flex.length = 32;
  3015. flex.rx_queue = rule->action;
  3016. vlan = rule->filter.vlan_tci || rule->filter.vlan_etype;
  3017. eth_offset = vlan ? 16 : 12;
  3018. user_offset = vlan ? 18 : 14;
  3019. /* Add destination MAC */
  3020. if (rule->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR)
  3021. igc_flex_filter_add_field(&flex, &filter->dst_addr, 0,
  3022. ETH_ALEN, NULL);
  3023. /* Add source MAC */
  3024. if (rule->filter.match_flags & IGC_FILTER_FLAG_SRC_MAC_ADDR)
  3025. igc_flex_filter_add_field(&flex, &filter->src_addr, 6,
  3026. ETH_ALEN, NULL);
  3027. /* Add VLAN etype */
  3028. if (rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_ETYPE) {
  3029. __be16 vlan_etype = cpu_to_be16(filter->vlan_etype);
  3030. igc_flex_filter_add_field(&flex, &vlan_etype, 12,
  3031. sizeof(vlan_etype), NULL);
  3032. }
  3033. /* Add VLAN TCI */
  3034. if (rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_TCI)
  3035. igc_flex_filter_add_field(&flex, &filter->vlan_tci, 14,
  3036. sizeof(filter->vlan_tci), NULL);
  3037. /* Add Ether type */
  3038. if (rule->filter.match_flags & IGC_FILTER_FLAG_ETHER_TYPE) {
  3039. __be16 etype = cpu_to_be16(filter->etype);
  3040. igc_flex_filter_add_field(&flex, &etype, eth_offset,
  3041. sizeof(etype), NULL);
  3042. }
  3043. /* Add user data */
  3044. if (rule->filter.match_flags & IGC_FILTER_FLAG_USER_DATA)
  3045. igc_flex_filter_add_field(&flex, &filter->user_data,
  3046. user_offset,
  3047. sizeof(filter->user_data),
  3048. filter->user_mask);
  3049. /* Add it down to the hardware and enable it. */
  3050. ret = igc_write_flex_filter_ll(adapter, &flex);
  3051. if (ret)
  3052. return ret;
  3053. filter->flex_index = index;
  3054. return 0;
  3055. }
  3056. static void igc_del_flex_filter(struct igc_adapter *adapter,
  3057. u16 reg_index)
  3058. {
  3059. struct igc_hw *hw = &adapter->hw;
  3060. u32 wufc;
  3061. /* Just disable the filter. The filter table itself is kept
  3062. * intact. Another flex_filter_add() should override the "old" data
  3063. * then.
  3064. */
  3065. if (reg_index > 8) {
  3066. u32 wufc_ext = rd32(IGC_WUFC_EXT);
  3067. wufc_ext &= ~(IGC_WUFC_EXT_FLX8 << (reg_index - 8));
  3068. wr32(IGC_WUFC_EXT, wufc_ext);
  3069. } else {
  3070. wufc = rd32(IGC_WUFC);
  3071. wufc &= ~(IGC_WUFC_FLX0 << reg_index);
  3072. wr32(IGC_WUFC, wufc);
  3073. }
  3074. if (igc_flex_filter_in_use(adapter))
  3075. return;
  3076. /* No filters are in use, we may disable flex filters */
  3077. wufc = rd32(IGC_WUFC);
  3078. wufc &= ~IGC_WUFC_FLEX_HQ;
  3079. wr32(IGC_WUFC, wufc);
  3080. }
  3081. static int igc_enable_nfc_rule(struct igc_adapter *adapter,
  3082. struct igc_nfc_rule *rule)
  3083. {
  3084. int err;
  3085. if (rule->flex) {
  3086. return igc_add_flex_filter(adapter, rule);
  3087. }
  3088. if (rule->filter.match_flags & IGC_FILTER_FLAG_ETHER_TYPE) {
  3089. err = igc_add_etype_filter(adapter, rule->filter.etype,
  3090. rule->action);
  3091. if (err)
  3092. return err;
  3093. }
  3094. if (rule->filter.match_flags & IGC_FILTER_FLAG_SRC_MAC_ADDR) {
  3095. err = igc_add_mac_filter(adapter, IGC_MAC_FILTER_TYPE_SRC,
  3096. rule->filter.src_addr, rule->action);
  3097. if (err)
  3098. return err;
  3099. }
  3100. if (rule->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR) {
  3101. err = igc_add_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST,
  3102. rule->filter.dst_addr, rule->action);
  3103. if (err)
  3104. return err;
  3105. }
  3106. if (rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_TCI) {
  3107. int prio = FIELD_GET(VLAN_PRIO_MASK, rule->filter.vlan_tci);
  3108. err = igc_add_vlan_prio_filter(adapter, prio, rule->action);
  3109. if (err)
  3110. return err;
  3111. }
  3112. return 0;
  3113. }
  3114. static void igc_disable_nfc_rule(struct igc_adapter *adapter,
  3115. const struct igc_nfc_rule *rule)
  3116. {
  3117. if (rule->flex) {
  3118. igc_del_flex_filter(adapter, rule->filter.flex_index);
  3119. return;
  3120. }
  3121. if (rule->filter.match_flags & IGC_FILTER_FLAG_ETHER_TYPE)
  3122. igc_del_etype_filter(adapter, rule->filter.etype);
  3123. if (rule->filter.match_flags & IGC_FILTER_FLAG_VLAN_TCI) {
  3124. int prio = FIELD_GET(VLAN_PRIO_MASK, rule->filter.vlan_tci);
  3125. igc_del_vlan_prio_filter(adapter, prio);
  3126. }
  3127. if (rule->filter.match_flags & IGC_FILTER_FLAG_SRC_MAC_ADDR)
  3128. igc_del_mac_filter(adapter, IGC_MAC_FILTER_TYPE_SRC,
  3129. rule->filter.src_addr);
  3130. if (rule->filter.match_flags & IGC_FILTER_FLAG_DST_MAC_ADDR)
  3131. igc_del_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST,
  3132. rule->filter.dst_addr);
  3133. }
  3134. /**
  3135. * igc_get_nfc_rule() - Get NFC rule
  3136. * @adapter: Pointer to adapter
  3137. * @location: Rule location
  3138. *
  3139. * Context: Expects adapter->nfc_rule_lock to be held by caller.
  3140. *
  3141. * Return: Pointer to NFC rule at @location. If not found, NULL.
  3142. */
  3143. struct igc_nfc_rule *igc_get_nfc_rule(struct igc_adapter *adapter,
  3144. u32 location)
  3145. {
  3146. struct igc_nfc_rule *rule;
  3147. list_for_each_entry(rule, &adapter->nfc_rule_list, list) {
  3148. if (rule->location == location)
  3149. return rule;
  3150. if (rule->location > location)
  3151. break;
  3152. }
  3153. return NULL;
  3154. }
  3155. /**
  3156. * igc_del_nfc_rule() - Delete NFC rule
  3157. * @adapter: Pointer to adapter
  3158. * @rule: Pointer to rule to be deleted
  3159. *
  3160. * Disable NFC rule in hardware and delete it from adapter.
  3161. *
  3162. * Context: Expects adapter->nfc_rule_lock to be held by caller.
  3163. */
  3164. void igc_del_nfc_rule(struct igc_adapter *adapter, struct igc_nfc_rule *rule)
  3165. {
  3166. igc_disable_nfc_rule(adapter, rule);
  3167. list_del(&rule->list);
  3168. adapter->nfc_rule_count--;
  3169. kfree(rule);
  3170. }
  3171. static void igc_flush_nfc_rules(struct igc_adapter *adapter)
  3172. {
  3173. struct igc_nfc_rule *rule, *tmp;
  3174. mutex_lock(&adapter->nfc_rule_lock);
  3175. list_for_each_entry_safe(rule, tmp, &adapter->nfc_rule_list, list)
  3176. igc_del_nfc_rule(adapter, rule);
  3177. mutex_unlock(&adapter->nfc_rule_lock);
  3178. }
  3179. /**
  3180. * igc_add_nfc_rule() - Add NFC rule
  3181. * @adapter: Pointer to adapter
  3182. * @rule: Pointer to rule to be added
  3183. *
  3184. * Enable NFC rule in hardware and add it to adapter.
  3185. *
  3186. * Context: Expects adapter->nfc_rule_lock to be held by caller.
  3187. *
  3188. * Return: 0 on success, negative errno on failure.
  3189. */
  3190. int igc_add_nfc_rule(struct igc_adapter *adapter, struct igc_nfc_rule *rule)
  3191. {
  3192. struct igc_nfc_rule *pred, *cur;
  3193. int err;
  3194. err = igc_enable_nfc_rule(adapter, rule);
  3195. if (err)
  3196. return err;
  3197. pred = NULL;
  3198. list_for_each_entry(cur, &adapter->nfc_rule_list, list) {
  3199. if (cur->location >= rule->location)
  3200. break;
  3201. pred = cur;
  3202. }
  3203. list_add(&rule->list, pred ? &pred->list : &adapter->nfc_rule_list);
  3204. adapter->nfc_rule_count++;
  3205. return 0;
  3206. }
  3207. static void igc_restore_nfc_rules(struct igc_adapter *adapter)
  3208. {
  3209. struct igc_nfc_rule *rule;
  3210. mutex_lock(&adapter->nfc_rule_lock);
  3211. list_for_each_entry_reverse(rule, &adapter->nfc_rule_list, list)
  3212. igc_enable_nfc_rule(adapter, rule);
  3213. mutex_unlock(&adapter->nfc_rule_lock);
  3214. }
  3215. static int igc_uc_sync(struct net_device *netdev, const unsigned char *addr)
  3216. {
  3217. struct igc_adapter *adapter = netdev_priv(netdev);
  3218. return igc_add_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST, addr, -1);
  3219. }
  3220. static int igc_uc_unsync(struct net_device *netdev, const unsigned char *addr)
  3221. {
  3222. struct igc_adapter *adapter = netdev_priv(netdev);
  3223. igc_del_mac_filter(adapter, IGC_MAC_FILTER_TYPE_DST, addr);
  3224. return 0;
  3225. }
  3226. /**
  3227. * igc_set_rx_mode - Secondary Unicast, Multicast and Promiscuous mode set
  3228. * @netdev: network interface device structure
  3229. *
  3230. * The set_rx_mode entry point is called whenever the unicast or multicast
  3231. * address lists or the network interface flags are updated. This routine is
  3232. * responsible for configuring the hardware for proper unicast, multicast,
  3233. * promiscuous mode, and all-multi behavior.
  3234. */
  3235. static void igc_set_rx_mode(struct net_device *netdev)
  3236. {
  3237. struct igc_adapter *adapter = netdev_priv(netdev);
  3238. struct igc_hw *hw = &adapter->hw;
  3239. u32 rctl = 0, rlpml = MAX_JUMBO_FRAME_SIZE;
  3240. int count;
  3241. /* Check for Promiscuous and All Multicast modes */
  3242. if (netdev->flags & IFF_PROMISC) {
  3243. rctl |= IGC_RCTL_UPE | IGC_RCTL_MPE;
  3244. } else {
  3245. if (netdev->flags & IFF_ALLMULTI) {
  3246. rctl |= IGC_RCTL_MPE;
  3247. } else {
  3248. /* Write addresses to the MTA, if the attempt fails
  3249. * then we should just turn on promiscuous mode so
  3250. * that we can at least receive multicast traffic
  3251. */
  3252. count = igc_write_mc_addr_list(netdev);
  3253. if (count < 0)
  3254. rctl |= IGC_RCTL_MPE;
  3255. }
  3256. }
  3257. /* Write addresses to available RAR registers, if there is not
  3258. * sufficient space to store all the addresses then enable
  3259. * unicast promiscuous mode
  3260. */
  3261. if (__dev_uc_sync(netdev, igc_uc_sync, igc_uc_unsync))
  3262. rctl |= IGC_RCTL_UPE;
  3263. /* update state of unicast and multicast */
  3264. rctl |= rd32(IGC_RCTL) & ~(IGC_RCTL_UPE | IGC_RCTL_MPE);
  3265. wr32(IGC_RCTL, rctl);
  3266. #if (PAGE_SIZE < 8192)
  3267. if (adapter->max_frame_size <= IGC_MAX_FRAME_BUILD_SKB)
  3268. rlpml = IGC_MAX_FRAME_BUILD_SKB;
  3269. #endif
  3270. wr32(IGC_RLPML, rlpml);
  3271. }
  3272. /**
  3273. * igc_configure - configure the hardware for RX and TX
  3274. * @adapter: private board structure
  3275. */
  3276. static void igc_configure(struct igc_adapter *adapter)
  3277. {
  3278. struct net_device *netdev = adapter->netdev;
  3279. int i = 0;
  3280. igc_get_hw_control(adapter);
  3281. igc_set_rx_mode(netdev);
  3282. igc_restore_vlan(adapter);
  3283. igc_setup_tctl(adapter);
  3284. igc_setup_mrqc(adapter);
  3285. igc_setup_rctl(adapter);
  3286. igc_set_default_mac_filter(adapter);
  3287. igc_restore_nfc_rules(adapter);
  3288. igc_configure_tx(adapter);
  3289. igc_configure_rx(adapter);
  3290. igc_rx_fifo_flush_base(&adapter->hw);
  3291. /* call igc_desc_unused which always leaves
  3292. * at least 1 descriptor unused to make sure
  3293. * next_to_use != next_to_clean
  3294. */
  3295. for (i = 0; i < adapter->num_rx_queues; i++) {
  3296. struct igc_ring *ring = adapter->rx_ring[i];
  3297. if (ring->xsk_pool)
  3298. igc_alloc_rx_buffers_zc(ring, igc_desc_unused(ring));
  3299. else
  3300. igc_alloc_rx_buffers(ring, igc_desc_unused(ring));
  3301. }
  3302. }
  3303. /**
  3304. * igc_write_ivar - configure ivar for given MSI-X vector
  3305. * @hw: pointer to the HW structure
  3306. * @msix_vector: vector number we are allocating to a given ring
  3307. * @index: row index of IVAR register to write within IVAR table
  3308. * @offset: column offset of in IVAR, should be multiple of 8
  3309. *
  3310. * The IVAR table consists of 2 columns,
  3311. * each containing an cause allocation for an Rx and Tx ring, and a
  3312. * variable number of rows depending on the number of queues supported.
  3313. */
  3314. static void igc_write_ivar(struct igc_hw *hw, int msix_vector,
  3315. int index, int offset)
  3316. {
  3317. u32 ivar = array_rd32(IGC_IVAR0, index);
  3318. /* clear any bits that are currently set */
  3319. ivar &= ~((u32)0xFF << offset);
  3320. /* write vector and valid bit */
  3321. ivar |= (msix_vector | IGC_IVAR_VALID) << offset;
  3322. array_wr32(IGC_IVAR0, index, ivar);
  3323. }
  3324. static void igc_assign_vector(struct igc_q_vector *q_vector, int msix_vector)
  3325. {
  3326. struct igc_adapter *adapter = q_vector->adapter;
  3327. struct igc_hw *hw = &adapter->hw;
  3328. int rx_queue = IGC_N0_QUEUE;
  3329. int tx_queue = IGC_N0_QUEUE;
  3330. if (q_vector->rx.ring)
  3331. rx_queue = q_vector->rx.ring->reg_idx;
  3332. if (q_vector->tx.ring)
  3333. tx_queue = q_vector->tx.ring->reg_idx;
  3334. switch (hw->mac.type) {
  3335. case igc_i225:
  3336. if (rx_queue > IGC_N0_QUEUE)
  3337. igc_write_ivar(hw, msix_vector,
  3338. rx_queue >> 1,
  3339. (rx_queue & 0x1) << 4);
  3340. if (tx_queue > IGC_N0_QUEUE)
  3341. igc_write_ivar(hw, msix_vector,
  3342. tx_queue >> 1,
  3343. ((tx_queue & 0x1) << 4) + 8);
  3344. q_vector->eims_value = BIT(msix_vector);
  3345. break;
  3346. default:
  3347. WARN_ONCE(hw->mac.type != igc_i225, "Wrong MAC type\n");
  3348. break;
  3349. }
  3350. /* add q_vector eims value to global eims_enable_mask */
  3351. adapter->eims_enable_mask |= q_vector->eims_value;
  3352. /* configure q_vector to set itr on first interrupt */
  3353. q_vector->set_itr = 1;
  3354. }
  3355. /**
  3356. * igc_configure_msix - Configure MSI-X hardware
  3357. * @adapter: Pointer to adapter structure
  3358. *
  3359. * igc_configure_msix sets up the hardware to properly
  3360. * generate MSI-X interrupts.
  3361. */
  3362. static void igc_configure_msix(struct igc_adapter *adapter)
  3363. {
  3364. struct igc_hw *hw = &adapter->hw;
  3365. int i, vector = 0;
  3366. u32 tmp;
  3367. adapter->eims_enable_mask = 0;
  3368. /* set vector for other causes, i.e. link changes */
  3369. switch (hw->mac.type) {
  3370. case igc_i225:
  3371. /* Turn on MSI-X capability first, or our settings
  3372. * won't stick. And it will take days to debug.
  3373. */
  3374. wr32(IGC_GPIE, IGC_GPIE_MSIX_MODE |
  3375. IGC_GPIE_PBA | IGC_GPIE_EIAME |
  3376. IGC_GPIE_NSICR);
  3377. /* enable msix_other interrupt */
  3378. adapter->eims_other = BIT(vector);
  3379. tmp = (vector++ | IGC_IVAR_VALID) << 8;
  3380. wr32(IGC_IVAR_MISC, tmp);
  3381. break;
  3382. default:
  3383. /* do nothing, since nothing else supports MSI-X */
  3384. break;
  3385. } /* switch (hw->mac.type) */
  3386. adapter->eims_enable_mask |= adapter->eims_other;
  3387. for (i = 0; i < adapter->num_q_vectors; i++)
  3388. igc_assign_vector(adapter->q_vector[i], vector++);
  3389. wrfl();
  3390. }
  3391. /**
  3392. * igc_irq_enable - Enable default interrupt generation settings
  3393. * @adapter: board private structure
  3394. */
  3395. static void igc_irq_enable(struct igc_adapter *adapter)
  3396. {
  3397. struct igc_hw *hw = &adapter->hw;
  3398. if (adapter->msix_entries) {
  3399. u32 ims = IGC_IMS_LSC | IGC_IMS_DOUTSYNC | IGC_IMS_DRSTA;
  3400. u32 regval = rd32(IGC_EIAC);
  3401. wr32(IGC_EIAC, regval | adapter->eims_enable_mask);
  3402. regval = rd32(IGC_EIAM);
  3403. wr32(IGC_EIAM, regval | adapter->eims_enable_mask);
  3404. wr32(IGC_EIMS, adapter->eims_enable_mask);
  3405. wr32(IGC_IMS, ims);
  3406. } else {
  3407. wr32(IGC_IMS, IMS_ENABLE_MASK | IGC_IMS_DRSTA);
  3408. wr32(IGC_IAM, IMS_ENABLE_MASK | IGC_IMS_DRSTA);
  3409. }
  3410. }
  3411. /**
  3412. * igc_irq_disable - Mask off interrupt generation on the NIC
  3413. * @adapter: board private structure
  3414. */
  3415. static void igc_irq_disable(struct igc_adapter *adapter)
  3416. {
  3417. struct igc_hw *hw = &adapter->hw;
  3418. if (adapter->msix_entries) {
  3419. u32 regval = rd32(IGC_EIAM);
  3420. wr32(IGC_EIAM, regval & ~adapter->eims_enable_mask);
  3421. wr32(IGC_EIMC, adapter->eims_enable_mask);
  3422. regval = rd32(IGC_EIAC);
  3423. wr32(IGC_EIAC, regval & ~adapter->eims_enable_mask);
  3424. }
  3425. wr32(IGC_IAM, 0);
  3426. wr32(IGC_IMC, ~0);
  3427. wrfl();
  3428. if (adapter->msix_entries) {
  3429. int vector = 0, i;
  3430. synchronize_irq(adapter->msix_entries[vector++].vector);
  3431. for (i = 0; i < adapter->num_q_vectors; i++)
  3432. synchronize_irq(adapter->msix_entries[vector++].vector);
  3433. } else {
  3434. synchronize_irq(adapter->pdev->irq);
  3435. }
  3436. }
  3437. void igc_set_flag_queue_pairs(struct igc_adapter *adapter,
  3438. const u32 max_rss_queues)
  3439. {
  3440. /* Determine if we need to pair queues. */
  3441. /* If rss_queues > half of max_rss_queues, pair the queues in
  3442. * order to conserve interrupts due to limited supply.
  3443. */
  3444. if (adapter->rss_queues > (max_rss_queues / 2))
  3445. adapter->flags |= IGC_FLAG_QUEUE_PAIRS;
  3446. else
  3447. adapter->flags &= ~IGC_FLAG_QUEUE_PAIRS;
  3448. }
  3449. unsigned int igc_get_max_rss_queues(struct igc_adapter *adapter)
  3450. {
  3451. return IGC_MAX_RX_QUEUES;
  3452. }
  3453. static void igc_init_queue_configuration(struct igc_adapter *adapter)
  3454. {
  3455. u32 max_rss_queues;
  3456. max_rss_queues = igc_get_max_rss_queues(adapter);
  3457. adapter->rss_queues = min_t(u32, max_rss_queues, num_online_cpus());
  3458. igc_set_flag_queue_pairs(adapter, max_rss_queues);
  3459. }
  3460. /**
  3461. * igc_reset_q_vector - Reset config for interrupt vector
  3462. * @adapter: board private structure to initialize
  3463. * @v_idx: Index of vector to be reset
  3464. *
  3465. * If NAPI is enabled it will delete any references to the
  3466. * NAPI struct. This is preparation for igc_free_q_vector.
  3467. */
  3468. static void igc_reset_q_vector(struct igc_adapter *adapter, int v_idx)
  3469. {
  3470. struct igc_q_vector *q_vector = adapter->q_vector[v_idx];
  3471. /* if we're coming from igc_set_interrupt_capability, the vectors are
  3472. * not yet allocated
  3473. */
  3474. if (!q_vector)
  3475. return;
  3476. if (q_vector->tx.ring)
  3477. adapter->tx_ring[q_vector->tx.ring->queue_index] = NULL;
  3478. if (q_vector->rx.ring)
  3479. adapter->rx_ring[q_vector->rx.ring->queue_index] = NULL;
  3480. netif_napi_del(&q_vector->napi);
  3481. }
  3482. /**
  3483. * igc_free_q_vector - Free memory allocated for specific interrupt vector
  3484. * @adapter: board private structure to initialize
  3485. * @v_idx: Index of vector to be freed
  3486. *
  3487. * This function frees the memory allocated to the q_vector.
  3488. */
  3489. static void igc_free_q_vector(struct igc_adapter *adapter, int v_idx)
  3490. {
  3491. struct igc_q_vector *q_vector = adapter->q_vector[v_idx];
  3492. adapter->q_vector[v_idx] = NULL;
  3493. /* igc_get_stats64() might access the rings on this vector,
  3494. * we must wait a grace period before freeing it.
  3495. */
  3496. if (q_vector)
  3497. kfree_rcu(q_vector, rcu);
  3498. }
  3499. /**
  3500. * igc_free_q_vectors - Free memory allocated for interrupt vectors
  3501. * @adapter: board private structure to initialize
  3502. *
  3503. * This function frees the memory allocated to the q_vectors. In addition if
  3504. * NAPI is enabled it will delete any references to the NAPI struct prior
  3505. * to freeing the q_vector.
  3506. */
  3507. static void igc_free_q_vectors(struct igc_adapter *adapter)
  3508. {
  3509. int v_idx = adapter->num_q_vectors;
  3510. adapter->num_tx_queues = 0;
  3511. adapter->num_rx_queues = 0;
  3512. adapter->num_q_vectors = 0;
  3513. while (v_idx--) {
  3514. igc_reset_q_vector(adapter, v_idx);
  3515. igc_free_q_vector(adapter, v_idx);
  3516. }
  3517. }
  3518. /**
  3519. * igc_update_itr - update the dynamic ITR value based on statistics
  3520. * @q_vector: pointer to q_vector
  3521. * @ring_container: ring info to update the itr for
  3522. *
  3523. * Stores a new ITR value based on packets and byte
  3524. * counts during the last interrupt. The advantage of per interrupt
  3525. * computation is faster updates and more accurate ITR for the current
  3526. * traffic pattern. Constants in this function were computed
  3527. * based on theoretical maximum wire speed and thresholds were set based
  3528. * on testing data as well as attempting to minimize response time
  3529. * while increasing bulk throughput.
  3530. * NOTE: These calculations are only valid when operating in a single-
  3531. * queue environment.
  3532. */
  3533. static void igc_update_itr(struct igc_q_vector *q_vector,
  3534. struct igc_ring_container *ring_container)
  3535. {
  3536. unsigned int packets = ring_container->total_packets;
  3537. unsigned int bytes = ring_container->total_bytes;
  3538. u8 itrval = ring_container->itr;
  3539. /* no packets, exit with status unchanged */
  3540. if (packets == 0)
  3541. return;
  3542. switch (itrval) {
  3543. case lowest_latency:
  3544. /* handle TSO and jumbo frames */
  3545. if (bytes / packets > 8000)
  3546. itrval = bulk_latency;
  3547. else if ((packets < 5) && (bytes > 512))
  3548. itrval = low_latency;
  3549. break;
  3550. case low_latency: /* 50 usec aka 20000 ints/s */
  3551. if (bytes > 10000) {
  3552. /* this if handles the TSO accounting */
  3553. if (bytes / packets > 8000)
  3554. itrval = bulk_latency;
  3555. else if ((packets < 10) || ((bytes / packets) > 1200))
  3556. itrval = bulk_latency;
  3557. else if ((packets > 35))
  3558. itrval = lowest_latency;
  3559. } else if (bytes / packets > 2000) {
  3560. itrval = bulk_latency;
  3561. } else if (packets <= 2 && bytes < 512) {
  3562. itrval = lowest_latency;
  3563. }
  3564. break;
  3565. case bulk_latency: /* 250 usec aka 4000 ints/s */
  3566. if (bytes > 25000) {
  3567. if (packets > 35)
  3568. itrval = low_latency;
  3569. } else if (bytes < 1500) {
  3570. itrval = low_latency;
  3571. }
  3572. break;
  3573. }
  3574. /* clear work counters since we have the values we need */
  3575. ring_container->total_bytes = 0;
  3576. ring_container->total_packets = 0;
  3577. /* write updated itr to ring container */
  3578. ring_container->itr = itrval;
  3579. }
  3580. static void igc_set_itr(struct igc_q_vector *q_vector)
  3581. {
  3582. struct igc_adapter *adapter = q_vector->adapter;
  3583. u32 new_itr = q_vector->itr_val;
  3584. u8 current_itr = 0;
  3585. /* for non-gigabit speeds, just fix the interrupt rate at 4000 */
  3586. switch (adapter->link_speed) {
  3587. case SPEED_10:
  3588. case SPEED_100:
  3589. current_itr = 0;
  3590. new_itr = IGC_4K_ITR;
  3591. goto set_itr_now;
  3592. default:
  3593. break;
  3594. }
  3595. igc_update_itr(q_vector, &q_vector->tx);
  3596. igc_update_itr(q_vector, &q_vector->rx);
  3597. current_itr = max(q_vector->rx.itr, q_vector->tx.itr);
  3598. /* conservative mode (itr 3) eliminates the lowest_latency setting */
  3599. if (current_itr == lowest_latency &&
  3600. ((q_vector->rx.ring && adapter->rx_itr_setting == 3) ||
  3601. (!q_vector->rx.ring && adapter->tx_itr_setting == 3)))
  3602. current_itr = low_latency;
  3603. switch (current_itr) {
  3604. /* counts and packets in update_itr are dependent on these numbers */
  3605. case lowest_latency:
  3606. new_itr = IGC_70K_ITR; /* 70,000 ints/sec */
  3607. break;
  3608. case low_latency:
  3609. new_itr = IGC_20K_ITR; /* 20,000 ints/sec */
  3610. break;
  3611. case bulk_latency:
  3612. new_itr = IGC_4K_ITR; /* 4,000 ints/sec */
  3613. break;
  3614. default:
  3615. break;
  3616. }
  3617. set_itr_now:
  3618. if (new_itr != q_vector->itr_val) {
  3619. /* this attempts to bias the interrupt rate towards Bulk
  3620. * by adding intermediate steps when interrupt rate is
  3621. * increasing
  3622. */
  3623. new_itr = new_itr > q_vector->itr_val ?
  3624. max((new_itr * q_vector->itr_val) /
  3625. (new_itr + (q_vector->itr_val >> 2)),
  3626. new_itr) : new_itr;
  3627. /* Don't write the value here; it resets the adapter's
  3628. * internal timer, and causes us to delay far longer than
  3629. * we should between interrupts. Instead, we write the ITR
  3630. * value at the beginning of the next interrupt so the timing
  3631. * ends up being correct.
  3632. */
  3633. q_vector->itr_val = new_itr;
  3634. q_vector->set_itr = 1;
  3635. }
  3636. }
  3637. static void igc_reset_interrupt_capability(struct igc_adapter *adapter)
  3638. {
  3639. int v_idx = adapter->num_q_vectors;
  3640. if (adapter->msix_entries) {
  3641. pci_disable_msix(adapter->pdev);
  3642. kfree(adapter->msix_entries);
  3643. adapter->msix_entries = NULL;
  3644. } else if (adapter->flags & IGC_FLAG_HAS_MSI) {
  3645. pci_disable_msi(adapter->pdev);
  3646. }
  3647. while (v_idx--)
  3648. igc_reset_q_vector(adapter, v_idx);
  3649. }
  3650. /**
  3651. * igc_set_interrupt_capability - set MSI or MSI-X if supported
  3652. * @adapter: Pointer to adapter structure
  3653. * @msix: boolean value for MSI-X capability
  3654. *
  3655. * Attempt to configure interrupts using the best available
  3656. * capabilities of the hardware and kernel.
  3657. */
  3658. static void igc_set_interrupt_capability(struct igc_adapter *adapter,
  3659. bool msix)
  3660. {
  3661. int numvecs, i;
  3662. int err;
  3663. if (!msix)
  3664. goto msi_only;
  3665. adapter->flags |= IGC_FLAG_HAS_MSIX;
  3666. /* Number of supported queues. */
  3667. adapter->num_rx_queues = adapter->rss_queues;
  3668. adapter->num_tx_queues = adapter->rss_queues;
  3669. /* start with one vector for every Rx queue */
  3670. numvecs = adapter->num_rx_queues;
  3671. /* if Tx handler is separate add 1 for every Tx queue */
  3672. if (!(adapter->flags & IGC_FLAG_QUEUE_PAIRS))
  3673. numvecs += adapter->num_tx_queues;
  3674. /* store the number of vectors reserved for queues */
  3675. adapter->num_q_vectors = numvecs;
  3676. /* add 1 vector for link status interrupts */
  3677. numvecs++;
  3678. adapter->msix_entries = kcalloc(numvecs, sizeof(struct msix_entry),
  3679. GFP_KERNEL);
  3680. if (!adapter->msix_entries)
  3681. return;
  3682. /* populate entry values */
  3683. for (i = 0; i < numvecs; i++)
  3684. adapter->msix_entries[i].entry = i;
  3685. err = pci_enable_msix_range(adapter->pdev,
  3686. adapter->msix_entries,
  3687. numvecs,
  3688. numvecs);
  3689. if (err > 0)
  3690. return;
  3691. kfree(adapter->msix_entries);
  3692. adapter->msix_entries = NULL;
  3693. igc_reset_interrupt_capability(adapter);
  3694. msi_only:
  3695. adapter->flags &= ~IGC_FLAG_HAS_MSIX;
  3696. adapter->rss_queues = 1;
  3697. adapter->flags |= IGC_FLAG_QUEUE_PAIRS;
  3698. adapter->num_rx_queues = 1;
  3699. adapter->num_tx_queues = 1;
  3700. adapter->num_q_vectors = 1;
  3701. if (!pci_enable_msi(adapter->pdev))
  3702. adapter->flags |= IGC_FLAG_HAS_MSI;
  3703. }
  3704. /**
  3705. * igc_update_ring_itr - update the dynamic ITR value based on packet size
  3706. * @q_vector: pointer to q_vector
  3707. *
  3708. * Stores a new ITR value based on strictly on packet size. This
  3709. * algorithm is less sophisticated than that used in igc_update_itr,
  3710. * due to the difficulty of synchronizing statistics across multiple
  3711. * receive rings. The divisors and thresholds used by this function
  3712. * were determined based on theoretical maximum wire speed and testing
  3713. * data, in order to minimize response time while increasing bulk
  3714. * throughput.
  3715. * NOTE: This function is called only when operating in a multiqueue
  3716. * receive environment.
  3717. */
  3718. static void igc_update_ring_itr(struct igc_q_vector *q_vector)
  3719. {
  3720. struct igc_adapter *adapter = q_vector->adapter;
  3721. int new_val = q_vector->itr_val;
  3722. int avg_wire_size = 0;
  3723. unsigned int packets;
  3724. /* For non-gigabit speeds, just fix the interrupt rate at 4000
  3725. * ints/sec - ITR timer value of 120 ticks.
  3726. */
  3727. switch (adapter->link_speed) {
  3728. case SPEED_10:
  3729. case SPEED_100:
  3730. new_val = IGC_4K_ITR;
  3731. goto set_itr_val;
  3732. default:
  3733. break;
  3734. }
  3735. packets = q_vector->rx.total_packets;
  3736. if (packets)
  3737. avg_wire_size = q_vector->rx.total_bytes / packets;
  3738. packets = q_vector->tx.total_packets;
  3739. if (packets)
  3740. avg_wire_size = max_t(u32, avg_wire_size,
  3741. q_vector->tx.total_bytes / packets);
  3742. /* if avg_wire_size isn't set no work was done */
  3743. if (!avg_wire_size)
  3744. goto clear_counts;
  3745. /* Add 24 bytes to size to account for CRC, preamble, and gap */
  3746. avg_wire_size += 24;
  3747. /* Don't starve jumbo frames */
  3748. avg_wire_size = min(avg_wire_size, 3000);
  3749. /* Give a little boost to mid-size frames */
  3750. if (avg_wire_size > 300 && avg_wire_size < 1200)
  3751. new_val = avg_wire_size / 3;
  3752. else
  3753. new_val = avg_wire_size / 2;
  3754. /* conservative mode (itr 3) eliminates the lowest_latency setting */
  3755. if (new_val < IGC_20K_ITR &&
  3756. ((q_vector->rx.ring && adapter->rx_itr_setting == 3) ||
  3757. (!q_vector->rx.ring && adapter->tx_itr_setting == 3)))
  3758. new_val = IGC_20K_ITR;
  3759. set_itr_val:
  3760. if (new_val != q_vector->itr_val) {
  3761. q_vector->itr_val = new_val;
  3762. q_vector->set_itr = 1;
  3763. }
  3764. clear_counts:
  3765. q_vector->rx.total_bytes = 0;
  3766. q_vector->rx.total_packets = 0;
  3767. q_vector->tx.total_bytes = 0;
  3768. q_vector->tx.total_packets = 0;
  3769. }
  3770. static void igc_ring_irq_enable(struct igc_q_vector *q_vector)
  3771. {
  3772. struct igc_adapter *adapter = q_vector->adapter;
  3773. struct igc_hw *hw = &adapter->hw;
  3774. if ((q_vector->rx.ring && (adapter->rx_itr_setting & 3)) ||
  3775. (!q_vector->rx.ring && (adapter->tx_itr_setting & 3))) {
  3776. if (adapter->num_q_vectors == 1)
  3777. igc_set_itr(q_vector);
  3778. else
  3779. igc_update_ring_itr(q_vector);
  3780. }
  3781. if (!test_bit(__IGC_DOWN, &adapter->state)) {
  3782. if (adapter->msix_entries)
  3783. wr32(IGC_EIMS, q_vector->eims_value);
  3784. else
  3785. igc_irq_enable(adapter);
  3786. }
  3787. }
  3788. static void igc_add_ring(struct igc_ring *ring,
  3789. struct igc_ring_container *head)
  3790. {
  3791. head->ring = ring;
  3792. head->count++;
  3793. }
  3794. /**
  3795. * igc_cache_ring_register - Descriptor ring to register mapping
  3796. * @adapter: board private structure to initialize
  3797. *
  3798. * Once we know the feature-set enabled for the device, we'll cache
  3799. * the register offset the descriptor ring is assigned to.
  3800. */
  3801. static void igc_cache_ring_register(struct igc_adapter *adapter)
  3802. {
  3803. int i = 0, j = 0;
  3804. switch (adapter->hw.mac.type) {
  3805. case igc_i225:
  3806. default:
  3807. for (; i < adapter->num_rx_queues; i++)
  3808. adapter->rx_ring[i]->reg_idx = i;
  3809. for (; j < adapter->num_tx_queues; j++)
  3810. adapter->tx_ring[j]->reg_idx = j;
  3811. break;
  3812. }
  3813. }
  3814. /**
  3815. * igc_poll - NAPI Rx polling callback
  3816. * @napi: napi polling structure
  3817. * @budget: count of how many packets we should handle
  3818. */
  3819. static int igc_poll(struct napi_struct *napi, int budget)
  3820. {
  3821. struct igc_q_vector *q_vector = container_of(napi,
  3822. struct igc_q_vector,
  3823. napi);
  3824. struct igc_ring *rx_ring = q_vector->rx.ring;
  3825. bool clean_complete = true;
  3826. int work_done = 0;
  3827. if (q_vector->tx.ring)
  3828. clean_complete = igc_clean_tx_irq(q_vector, budget);
  3829. if (rx_ring) {
  3830. int cleaned = rx_ring->xsk_pool ?
  3831. igc_clean_rx_irq_zc(q_vector, budget) :
  3832. igc_clean_rx_irq(q_vector, budget);
  3833. work_done += cleaned;
  3834. if (cleaned >= budget)
  3835. clean_complete = false;
  3836. }
  3837. /* If all work not completed, return budget and keep polling */
  3838. if (!clean_complete)
  3839. return budget;
  3840. /* Exit the polling mode, but don't re-enable interrupts if stack might
  3841. * poll us due to busy-polling
  3842. */
  3843. if (likely(napi_complete_done(napi, work_done)))
  3844. igc_ring_irq_enable(q_vector);
  3845. return min(work_done, budget - 1);
  3846. }
  3847. /**
  3848. * igc_alloc_q_vector - Allocate memory for a single interrupt vector
  3849. * @adapter: board private structure to initialize
  3850. * @v_count: q_vectors allocated on adapter, used for ring interleaving
  3851. * @v_idx: index of vector in adapter struct
  3852. * @txr_count: total number of Tx rings to allocate
  3853. * @txr_idx: index of first Tx ring to allocate
  3854. * @rxr_count: total number of Rx rings to allocate
  3855. * @rxr_idx: index of first Rx ring to allocate
  3856. *
  3857. * We allocate one q_vector. If allocation fails we return -ENOMEM.
  3858. */
  3859. static int igc_alloc_q_vector(struct igc_adapter *adapter,
  3860. unsigned int v_count, unsigned int v_idx,
  3861. unsigned int txr_count, unsigned int txr_idx,
  3862. unsigned int rxr_count, unsigned int rxr_idx)
  3863. {
  3864. struct igc_q_vector *q_vector;
  3865. struct igc_ring *ring;
  3866. int ring_count;
  3867. /* igc only supports 1 Tx and/or 1 Rx queue per vector */
  3868. if (txr_count > 1 || rxr_count > 1)
  3869. return -ENOMEM;
  3870. ring_count = txr_count + rxr_count;
  3871. /* allocate q_vector and rings */
  3872. q_vector = adapter->q_vector[v_idx];
  3873. if (!q_vector)
  3874. q_vector = kzalloc(struct_size(q_vector, ring, ring_count),
  3875. GFP_KERNEL);
  3876. else
  3877. memset(q_vector, 0, struct_size(q_vector, ring, ring_count));
  3878. if (!q_vector)
  3879. return -ENOMEM;
  3880. /* initialize NAPI */
  3881. netif_napi_add(adapter->netdev, &q_vector->napi, igc_poll);
  3882. /* tie q_vector and adapter together */
  3883. adapter->q_vector[v_idx] = q_vector;
  3884. q_vector->adapter = adapter;
  3885. /* initialize work limits */
  3886. q_vector->tx.work_limit = adapter->tx_work_limit;
  3887. /* initialize ITR configuration */
  3888. q_vector->itr_register = adapter->io_addr + IGC_EITR(0);
  3889. q_vector->itr_val = IGC_START_ITR;
  3890. /* initialize pointer to rings */
  3891. ring = q_vector->ring;
  3892. /* initialize ITR */
  3893. if (rxr_count) {
  3894. /* rx or rx/tx vector */
  3895. if (!adapter->rx_itr_setting || adapter->rx_itr_setting > 3)
  3896. q_vector->itr_val = adapter->rx_itr_setting;
  3897. } else {
  3898. /* tx only vector */
  3899. if (!adapter->tx_itr_setting || adapter->tx_itr_setting > 3)
  3900. q_vector->itr_val = adapter->tx_itr_setting;
  3901. }
  3902. if (txr_count) {
  3903. /* assign generic ring traits */
  3904. ring->dev = &adapter->pdev->dev;
  3905. ring->netdev = adapter->netdev;
  3906. /* configure backlink on ring */
  3907. ring->q_vector = q_vector;
  3908. /* update q_vector Tx values */
  3909. igc_add_ring(ring, &q_vector->tx);
  3910. /* apply Tx specific ring traits */
  3911. ring->count = adapter->tx_ring_count;
  3912. ring->queue_index = txr_idx;
  3913. /* assign ring to adapter */
  3914. adapter->tx_ring[txr_idx] = ring;
  3915. /* push pointer to next ring */
  3916. ring++;
  3917. }
  3918. if (rxr_count) {
  3919. /* assign generic ring traits */
  3920. ring->dev = &adapter->pdev->dev;
  3921. ring->netdev = adapter->netdev;
  3922. /* configure backlink on ring */
  3923. ring->q_vector = q_vector;
  3924. /* update q_vector Rx values */
  3925. igc_add_ring(ring, &q_vector->rx);
  3926. /* apply Rx specific ring traits */
  3927. ring->count = adapter->rx_ring_count;
  3928. ring->queue_index = rxr_idx;
  3929. /* assign ring to adapter */
  3930. adapter->rx_ring[rxr_idx] = ring;
  3931. }
  3932. return 0;
  3933. }
  3934. /**
  3935. * igc_alloc_q_vectors - Allocate memory for interrupt vectors
  3936. * @adapter: board private structure to initialize
  3937. *
  3938. * We allocate one q_vector per queue interrupt. If allocation fails we
  3939. * return -ENOMEM.
  3940. */
  3941. static int igc_alloc_q_vectors(struct igc_adapter *adapter)
  3942. {
  3943. int rxr_remaining = adapter->num_rx_queues;
  3944. int txr_remaining = adapter->num_tx_queues;
  3945. int rxr_idx = 0, txr_idx = 0, v_idx = 0;
  3946. int q_vectors = adapter->num_q_vectors;
  3947. int err;
  3948. if (q_vectors >= (rxr_remaining + txr_remaining)) {
  3949. for (; rxr_remaining; v_idx++) {
  3950. err = igc_alloc_q_vector(adapter, q_vectors, v_idx,
  3951. 0, 0, 1, rxr_idx);
  3952. if (err)
  3953. goto err_out;
  3954. /* update counts and index */
  3955. rxr_remaining--;
  3956. rxr_idx++;
  3957. }
  3958. }
  3959. for (; v_idx < q_vectors; v_idx++) {
  3960. int rqpv = DIV_ROUND_UP(rxr_remaining, q_vectors - v_idx);
  3961. int tqpv = DIV_ROUND_UP(txr_remaining, q_vectors - v_idx);
  3962. err = igc_alloc_q_vector(adapter, q_vectors, v_idx,
  3963. tqpv, txr_idx, rqpv, rxr_idx);
  3964. if (err)
  3965. goto err_out;
  3966. /* update counts and index */
  3967. rxr_remaining -= rqpv;
  3968. txr_remaining -= tqpv;
  3969. rxr_idx++;
  3970. txr_idx++;
  3971. }
  3972. return 0;
  3973. err_out:
  3974. adapter->num_tx_queues = 0;
  3975. adapter->num_rx_queues = 0;
  3976. adapter->num_q_vectors = 0;
  3977. while (v_idx--)
  3978. igc_free_q_vector(adapter, v_idx);
  3979. return -ENOMEM;
  3980. }
  3981. /**
  3982. * igc_init_interrupt_scheme - initialize interrupts, allocate queues/vectors
  3983. * @adapter: Pointer to adapter structure
  3984. * @msix: boolean for MSI-X capability
  3985. *
  3986. * This function initializes the interrupts and allocates all of the queues.
  3987. */
  3988. static int igc_init_interrupt_scheme(struct igc_adapter *adapter, bool msix)
  3989. {
  3990. struct net_device *dev = adapter->netdev;
  3991. int err = 0;
  3992. igc_set_interrupt_capability(adapter, msix);
  3993. err = igc_alloc_q_vectors(adapter);
  3994. if (err) {
  3995. netdev_err(dev, "Unable to allocate memory for vectors\n");
  3996. goto err_alloc_q_vectors;
  3997. }
  3998. igc_cache_ring_register(adapter);
  3999. return 0;
  4000. err_alloc_q_vectors:
  4001. igc_reset_interrupt_capability(adapter);
  4002. return err;
  4003. }
  4004. /**
  4005. * igc_sw_init - Initialize general software structures (struct igc_adapter)
  4006. * @adapter: board private structure to initialize
  4007. *
  4008. * igc_sw_init initializes the Adapter private data structure.
  4009. * Fields are initialized based on PCI device information and
  4010. * OS network device settings (MTU size).
  4011. */
  4012. static int igc_sw_init(struct igc_adapter *adapter)
  4013. {
  4014. struct net_device *netdev = adapter->netdev;
  4015. struct pci_dev *pdev = adapter->pdev;
  4016. struct igc_hw *hw = &adapter->hw;
  4017. pci_read_config_word(pdev, PCI_COMMAND, &hw->bus.pci_cmd_word);
  4018. /* set default ring sizes */
  4019. adapter->tx_ring_count = IGC_DEFAULT_TXD;
  4020. adapter->rx_ring_count = IGC_DEFAULT_RXD;
  4021. /* set default ITR values */
  4022. adapter->rx_itr_setting = IGC_DEFAULT_ITR;
  4023. adapter->tx_itr_setting = IGC_DEFAULT_ITR;
  4024. /* set default work limits */
  4025. adapter->tx_work_limit = IGC_DEFAULT_TX_WORK;
  4026. /* adjust max frame to be at least the size of a standard frame */
  4027. adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN +
  4028. VLAN_HLEN;
  4029. adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
  4030. mutex_init(&adapter->nfc_rule_lock);
  4031. INIT_LIST_HEAD(&adapter->nfc_rule_list);
  4032. adapter->nfc_rule_count = 0;
  4033. spin_lock_init(&adapter->stats64_lock);
  4034. spin_lock_init(&adapter->qbv_tx_lock);
  4035. /* Assume MSI-X interrupts, will be checked during IRQ allocation */
  4036. adapter->flags |= IGC_FLAG_HAS_MSIX;
  4037. igc_init_queue_configuration(adapter);
  4038. /* This call may decrease the number of queues */
  4039. if (igc_init_interrupt_scheme(adapter, true)) {
  4040. netdev_err(netdev, "Unable to allocate memory for queues\n");
  4041. return -ENOMEM;
  4042. }
  4043. /* Explicitly disable IRQ since the NIC can be in any state. */
  4044. igc_irq_disable(adapter);
  4045. set_bit(__IGC_DOWN, &adapter->state);
  4046. return 0;
  4047. }
  4048. /**
  4049. * igc_up - Open the interface and prepare it to handle traffic
  4050. * @adapter: board private structure
  4051. */
  4052. void igc_up(struct igc_adapter *adapter)
  4053. {
  4054. struct igc_hw *hw = &adapter->hw;
  4055. int i = 0;
  4056. /* hardware has been reset, we need to reload some things */
  4057. igc_configure(adapter);
  4058. clear_bit(__IGC_DOWN, &adapter->state);
  4059. for (i = 0; i < adapter->num_q_vectors; i++)
  4060. napi_enable(&adapter->q_vector[i]->napi);
  4061. if (adapter->msix_entries)
  4062. igc_configure_msix(adapter);
  4063. else
  4064. igc_assign_vector(adapter->q_vector[0], 0);
  4065. /* Clear any pending interrupts. */
  4066. rd32(IGC_ICR);
  4067. igc_irq_enable(adapter);
  4068. netif_tx_start_all_queues(adapter->netdev);
  4069. /* start the watchdog. */
  4070. hw->mac.get_link_status = true;
  4071. schedule_work(&adapter->watchdog_task);
  4072. }
  4073. /**
  4074. * igc_update_stats - Update the board statistics counters
  4075. * @adapter: board private structure
  4076. */
  4077. void igc_update_stats(struct igc_adapter *adapter)
  4078. {
  4079. struct rtnl_link_stats64 *net_stats = &adapter->stats64;
  4080. struct pci_dev *pdev = adapter->pdev;
  4081. struct igc_hw *hw = &adapter->hw;
  4082. u64 _bytes, _packets;
  4083. u64 bytes, packets;
  4084. unsigned int start;
  4085. u32 mpc;
  4086. int i;
  4087. /* Prevent stats update while adapter is being reset, or if the pci
  4088. * connection is down.
  4089. */
  4090. if (adapter->link_speed == 0)
  4091. return;
  4092. if (pci_channel_offline(pdev))
  4093. return;
  4094. packets = 0;
  4095. bytes = 0;
  4096. rcu_read_lock();
  4097. for (i = 0; i < adapter->num_rx_queues; i++) {
  4098. struct igc_ring *ring = adapter->rx_ring[i];
  4099. u32 rqdpc = rd32(IGC_RQDPC(i));
  4100. if (hw->mac.type >= igc_i225)
  4101. wr32(IGC_RQDPC(i), 0);
  4102. if (rqdpc) {
  4103. ring->rx_stats.drops += rqdpc;
  4104. net_stats->rx_fifo_errors += rqdpc;
  4105. }
  4106. do {
  4107. start = u64_stats_fetch_begin(&ring->rx_syncp);
  4108. _bytes = ring->rx_stats.bytes;
  4109. _packets = ring->rx_stats.packets;
  4110. } while (u64_stats_fetch_retry(&ring->rx_syncp, start));
  4111. bytes += _bytes;
  4112. packets += _packets;
  4113. }
  4114. net_stats->rx_bytes = bytes;
  4115. net_stats->rx_packets = packets;
  4116. packets = 0;
  4117. bytes = 0;
  4118. for (i = 0; i < adapter->num_tx_queues; i++) {
  4119. struct igc_ring *ring = adapter->tx_ring[i];
  4120. do {
  4121. start = u64_stats_fetch_begin(&ring->tx_syncp);
  4122. _bytes = ring->tx_stats.bytes;
  4123. _packets = ring->tx_stats.packets;
  4124. } while (u64_stats_fetch_retry(&ring->tx_syncp, start));
  4125. bytes += _bytes;
  4126. packets += _packets;
  4127. }
  4128. net_stats->tx_bytes = bytes;
  4129. net_stats->tx_packets = packets;
  4130. rcu_read_unlock();
  4131. /* read stats registers */
  4132. adapter->stats.crcerrs += rd32(IGC_CRCERRS);
  4133. adapter->stats.gprc += rd32(IGC_GPRC);
  4134. adapter->stats.gorc += rd32(IGC_GORCL);
  4135. rd32(IGC_GORCH); /* clear GORCL */
  4136. adapter->stats.bprc += rd32(IGC_BPRC);
  4137. adapter->stats.mprc += rd32(IGC_MPRC);
  4138. adapter->stats.roc += rd32(IGC_ROC);
  4139. adapter->stats.prc64 += rd32(IGC_PRC64);
  4140. adapter->stats.prc127 += rd32(IGC_PRC127);
  4141. adapter->stats.prc255 += rd32(IGC_PRC255);
  4142. adapter->stats.prc511 += rd32(IGC_PRC511);
  4143. adapter->stats.prc1023 += rd32(IGC_PRC1023);
  4144. adapter->stats.prc1522 += rd32(IGC_PRC1522);
  4145. adapter->stats.tlpic += rd32(IGC_TLPIC);
  4146. adapter->stats.rlpic += rd32(IGC_RLPIC);
  4147. adapter->stats.hgptc += rd32(IGC_HGPTC);
  4148. mpc = rd32(IGC_MPC);
  4149. adapter->stats.mpc += mpc;
  4150. net_stats->rx_fifo_errors += mpc;
  4151. adapter->stats.scc += rd32(IGC_SCC);
  4152. adapter->stats.ecol += rd32(IGC_ECOL);
  4153. adapter->stats.mcc += rd32(IGC_MCC);
  4154. adapter->stats.latecol += rd32(IGC_LATECOL);
  4155. adapter->stats.dc += rd32(IGC_DC);
  4156. adapter->stats.rlec += rd32(IGC_RLEC);
  4157. adapter->stats.xonrxc += rd32(IGC_XONRXC);
  4158. adapter->stats.xontxc += rd32(IGC_XONTXC);
  4159. adapter->stats.xoffrxc += rd32(IGC_XOFFRXC);
  4160. adapter->stats.xofftxc += rd32(IGC_XOFFTXC);
  4161. adapter->stats.fcruc += rd32(IGC_FCRUC);
  4162. adapter->stats.gptc += rd32(IGC_GPTC);
  4163. adapter->stats.gotc += rd32(IGC_GOTCL);
  4164. rd32(IGC_GOTCH); /* clear GOTCL */
  4165. adapter->stats.rnbc += rd32(IGC_RNBC);
  4166. adapter->stats.ruc += rd32(IGC_RUC);
  4167. adapter->stats.rfc += rd32(IGC_RFC);
  4168. adapter->stats.rjc += rd32(IGC_RJC);
  4169. adapter->stats.tor += rd32(IGC_TORH);
  4170. adapter->stats.tot += rd32(IGC_TOTH);
  4171. adapter->stats.tpr += rd32(IGC_TPR);
  4172. adapter->stats.ptc64 += rd32(IGC_PTC64);
  4173. adapter->stats.ptc127 += rd32(IGC_PTC127);
  4174. adapter->stats.ptc255 += rd32(IGC_PTC255);
  4175. adapter->stats.ptc511 += rd32(IGC_PTC511);
  4176. adapter->stats.ptc1023 += rd32(IGC_PTC1023);
  4177. adapter->stats.ptc1522 += rd32(IGC_PTC1522);
  4178. adapter->stats.mptc += rd32(IGC_MPTC);
  4179. adapter->stats.bptc += rd32(IGC_BPTC);
  4180. adapter->stats.tpt += rd32(IGC_TPT);
  4181. adapter->stats.colc += rd32(IGC_COLC);
  4182. adapter->stats.colc += rd32(IGC_RERC);
  4183. adapter->stats.algnerrc += rd32(IGC_ALGNERRC);
  4184. adapter->stats.tsctc += rd32(IGC_TSCTC);
  4185. adapter->stats.iac += rd32(IGC_IAC);
  4186. /* Fill out the OS statistics structure */
  4187. net_stats->multicast = adapter->stats.mprc;
  4188. net_stats->collisions = adapter->stats.colc;
  4189. /* Rx Errors */
  4190. /* RLEC on some newer hardware can be incorrect so build
  4191. * our own version based on RUC and ROC
  4192. */
  4193. net_stats->rx_errors = adapter->stats.rxerrc +
  4194. adapter->stats.crcerrs + adapter->stats.algnerrc +
  4195. adapter->stats.ruc + adapter->stats.roc +
  4196. adapter->stats.cexterr;
  4197. net_stats->rx_length_errors = adapter->stats.ruc +
  4198. adapter->stats.roc;
  4199. net_stats->rx_crc_errors = adapter->stats.crcerrs;
  4200. net_stats->rx_frame_errors = adapter->stats.algnerrc;
  4201. net_stats->rx_missed_errors = adapter->stats.mpc;
  4202. /* Tx Errors */
  4203. net_stats->tx_errors = adapter->stats.ecol +
  4204. adapter->stats.latecol;
  4205. net_stats->tx_aborted_errors = adapter->stats.ecol;
  4206. net_stats->tx_window_errors = adapter->stats.latecol;
  4207. net_stats->tx_carrier_errors = adapter->stats.tncrs;
  4208. /* Tx Dropped */
  4209. net_stats->tx_dropped = adapter->stats.txdrop;
  4210. /* Management Stats */
  4211. adapter->stats.mgptc += rd32(IGC_MGTPTC);
  4212. adapter->stats.mgprc += rd32(IGC_MGTPRC);
  4213. adapter->stats.mgpdc += rd32(IGC_MGTPDC);
  4214. }
  4215. /**
  4216. * igc_down - Close the interface
  4217. * @adapter: board private structure
  4218. */
  4219. void igc_down(struct igc_adapter *adapter)
  4220. {
  4221. struct net_device *netdev = adapter->netdev;
  4222. struct igc_hw *hw = &adapter->hw;
  4223. u32 tctl, rctl;
  4224. int i = 0;
  4225. set_bit(__IGC_DOWN, &adapter->state);
  4226. igc_ptp_suspend(adapter);
  4227. if (pci_device_is_present(adapter->pdev)) {
  4228. /* disable receives in the hardware */
  4229. rctl = rd32(IGC_RCTL);
  4230. wr32(IGC_RCTL, rctl & ~IGC_RCTL_EN);
  4231. /* flush and sleep below */
  4232. }
  4233. /* set trans_start so we don't get spurious watchdogs during reset */
  4234. netif_trans_update(netdev);
  4235. netif_carrier_off(netdev);
  4236. netif_tx_stop_all_queues(netdev);
  4237. if (pci_device_is_present(adapter->pdev)) {
  4238. /* disable transmits in the hardware */
  4239. tctl = rd32(IGC_TCTL);
  4240. tctl &= ~IGC_TCTL_EN;
  4241. wr32(IGC_TCTL, tctl);
  4242. /* flush both disables and wait for them to finish */
  4243. wrfl();
  4244. usleep_range(10000, 20000);
  4245. igc_irq_disable(adapter);
  4246. }
  4247. adapter->flags &= ~IGC_FLAG_NEED_LINK_UPDATE;
  4248. for (i = 0; i < adapter->num_q_vectors; i++) {
  4249. if (adapter->q_vector[i]) {
  4250. napi_synchronize(&adapter->q_vector[i]->napi);
  4251. napi_disable(&adapter->q_vector[i]->napi);
  4252. }
  4253. }
  4254. del_timer_sync(&adapter->watchdog_timer);
  4255. del_timer_sync(&adapter->phy_info_timer);
  4256. /* record the stats before reset*/
  4257. spin_lock(&adapter->stats64_lock);
  4258. igc_update_stats(adapter);
  4259. spin_unlock(&adapter->stats64_lock);
  4260. adapter->link_speed = 0;
  4261. adapter->link_duplex = 0;
  4262. if (!pci_channel_offline(adapter->pdev))
  4263. igc_reset(adapter);
  4264. /* clear VLAN promisc flag so VFTA will be updated if necessary */
  4265. adapter->flags &= ~IGC_FLAG_VLAN_PROMISC;
  4266. igc_disable_all_tx_rings_hw(adapter);
  4267. igc_clean_all_tx_rings(adapter);
  4268. igc_clean_all_rx_rings(adapter);
  4269. }
  4270. void igc_reinit_locked(struct igc_adapter *adapter)
  4271. {
  4272. while (test_and_set_bit(__IGC_RESETTING, &adapter->state))
  4273. usleep_range(1000, 2000);
  4274. igc_down(adapter);
  4275. igc_up(adapter);
  4276. clear_bit(__IGC_RESETTING, &adapter->state);
  4277. }
  4278. static void igc_reset_task(struct work_struct *work)
  4279. {
  4280. struct igc_adapter *adapter;
  4281. adapter = container_of(work, struct igc_adapter, reset_task);
  4282. rtnl_lock();
  4283. /* If we're already down or resetting, just bail */
  4284. if (test_bit(__IGC_DOWN, &adapter->state) ||
  4285. test_bit(__IGC_RESETTING, &adapter->state)) {
  4286. rtnl_unlock();
  4287. return;
  4288. }
  4289. igc_rings_dump(adapter);
  4290. igc_regs_dump(adapter);
  4291. netdev_err(adapter->netdev, "Reset adapter\n");
  4292. igc_reinit_locked(adapter);
  4293. rtnl_unlock();
  4294. }
  4295. /**
  4296. * igc_change_mtu - Change the Maximum Transfer Unit
  4297. * @netdev: network interface device structure
  4298. * @new_mtu: new value for maximum frame size
  4299. *
  4300. * Returns 0 on success, negative on failure
  4301. */
  4302. static int igc_change_mtu(struct net_device *netdev, int new_mtu)
  4303. {
  4304. int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
  4305. struct igc_adapter *adapter = netdev_priv(netdev);
  4306. if (igc_xdp_is_enabled(adapter) && new_mtu > ETH_DATA_LEN) {
  4307. netdev_dbg(netdev, "Jumbo frames not supported with XDP");
  4308. return -EINVAL;
  4309. }
  4310. /* adjust max frame to be at least the size of a standard frame */
  4311. if (max_frame < (ETH_FRAME_LEN + ETH_FCS_LEN))
  4312. max_frame = ETH_FRAME_LEN + ETH_FCS_LEN;
  4313. while (test_and_set_bit(__IGC_RESETTING, &adapter->state))
  4314. usleep_range(1000, 2000);
  4315. /* igc_down has a dependency on max_frame_size */
  4316. adapter->max_frame_size = max_frame;
  4317. if (netif_running(netdev))
  4318. igc_down(adapter);
  4319. netdev_dbg(netdev, "changing MTU from %d to %d\n", netdev->mtu, new_mtu);
  4320. WRITE_ONCE(netdev->mtu, new_mtu);
  4321. if (netif_running(netdev))
  4322. igc_up(adapter);
  4323. else
  4324. igc_reset(adapter);
  4325. clear_bit(__IGC_RESETTING, &adapter->state);
  4326. return 0;
  4327. }
  4328. /**
  4329. * igc_tx_timeout - Respond to a Tx Hang
  4330. * @netdev: network interface device structure
  4331. * @txqueue: queue number that timed out
  4332. **/
  4333. static void igc_tx_timeout(struct net_device *netdev,
  4334. unsigned int __always_unused txqueue)
  4335. {
  4336. struct igc_adapter *adapter = netdev_priv(netdev);
  4337. struct igc_hw *hw = &adapter->hw;
  4338. /* Do the reset outside of interrupt context */
  4339. adapter->tx_timeout_count++;
  4340. schedule_work(&adapter->reset_task);
  4341. wr32(IGC_EICS,
  4342. (adapter->eims_enable_mask & ~adapter->eims_other));
  4343. }
  4344. /**
  4345. * igc_get_stats64 - Get System Network Statistics
  4346. * @netdev: network interface device structure
  4347. * @stats: rtnl_link_stats64 pointer
  4348. *
  4349. * Returns the address of the device statistics structure.
  4350. * The statistics are updated here and also from the timer callback.
  4351. */
  4352. static void igc_get_stats64(struct net_device *netdev,
  4353. struct rtnl_link_stats64 *stats)
  4354. {
  4355. struct igc_adapter *adapter = netdev_priv(netdev);
  4356. spin_lock(&adapter->stats64_lock);
  4357. if (!test_bit(__IGC_RESETTING, &adapter->state))
  4358. igc_update_stats(adapter);
  4359. memcpy(stats, &adapter->stats64, sizeof(*stats));
  4360. spin_unlock(&adapter->stats64_lock);
  4361. }
  4362. static netdev_features_t igc_fix_features(struct net_device *netdev,
  4363. netdev_features_t features)
  4364. {
  4365. /* Since there is no support for separate Rx/Tx vlan accel
  4366. * enable/disable make sure Tx flag is always in same state as Rx.
  4367. */
  4368. if (features & NETIF_F_HW_VLAN_CTAG_RX)
  4369. features |= NETIF_F_HW_VLAN_CTAG_TX;
  4370. else
  4371. features &= ~NETIF_F_HW_VLAN_CTAG_TX;
  4372. return features;
  4373. }
  4374. static int igc_set_features(struct net_device *netdev,
  4375. netdev_features_t features)
  4376. {
  4377. netdev_features_t changed = netdev->features ^ features;
  4378. struct igc_adapter *adapter = netdev_priv(netdev);
  4379. if (changed & NETIF_F_HW_VLAN_CTAG_RX)
  4380. igc_vlan_mode(netdev, features);
  4381. /* Add VLAN support */
  4382. if (!(changed & (NETIF_F_RXALL | NETIF_F_NTUPLE)))
  4383. return 0;
  4384. if (!(features & NETIF_F_NTUPLE))
  4385. igc_flush_nfc_rules(adapter);
  4386. netdev->features = features;
  4387. if (netif_running(netdev))
  4388. igc_reinit_locked(adapter);
  4389. else
  4390. igc_reset(adapter);
  4391. return 1;
  4392. }
  4393. static netdev_features_t
  4394. igc_features_check(struct sk_buff *skb, struct net_device *dev,
  4395. netdev_features_t features)
  4396. {
  4397. unsigned int network_hdr_len, mac_hdr_len;
  4398. /* Make certain the headers can be described by a context descriptor */
  4399. mac_hdr_len = skb_network_offset(skb);
  4400. if (unlikely(mac_hdr_len > IGC_MAX_MAC_HDR_LEN))
  4401. return features & ~(NETIF_F_HW_CSUM |
  4402. NETIF_F_SCTP_CRC |
  4403. NETIF_F_HW_VLAN_CTAG_TX |
  4404. NETIF_F_TSO |
  4405. NETIF_F_TSO6);
  4406. network_hdr_len = skb_checksum_start(skb) - skb_network_header(skb);
  4407. if (unlikely(network_hdr_len > IGC_MAX_NETWORK_HDR_LEN))
  4408. return features & ~(NETIF_F_HW_CSUM |
  4409. NETIF_F_SCTP_CRC |
  4410. NETIF_F_TSO |
  4411. NETIF_F_TSO6);
  4412. /* We can only support IPv4 TSO in tunnels if we can mangle the
  4413. * inner IP ID field, so strip TSO if MANGLEID is not supported.
  4414. */
  4415. if (skb->encapsulation && !(features & NETIF_F_TSO_MANGLEID))
  4416. features &= ~NETIF_F_TSO;
  4417. return features;
  4418. }
  4419. static void igc_tsync_interrupt(struct igc_adapter *adapter)
  4420. {
  4421. struct igc_hw *hw = &adapter->hw;
  4422. u32 tsauxc, sec, nsec, tsicr;
  4423. struct ptp_clock_event event;
  4424. struct timespec64 ts;
  4425. tsicr = rd32(IGC_TSICR);
  4426. if (tsicr & IGC_TSICR_SYS_WRAP) {
  4427. event.type = PTP_CLOCK_PPS;
  4428. if (adapter->ptp_caps.pps)
  4429. ptp_clock_event(adapter->ptp_clock, &event);
  4430. }
  4431. if (tsicr & IGC_TSICR_TXTS) {
  4432. /* retrieve hardware timestamp */
  4433. igc_ptp_tx_tstamp_event(adapter);
  4434. }
  4435. if (tsicr & IGC_TSICR_TT0) {
  4436. spin_lock(&adapter->tmreg_lock);
  4437. ts = timespec64_add(adapter->perout[0].start,
  4438. adapter->perout[0].period);
  4439. wr32(IGC_TRGTTIML0, ts.tv_nsec | IGC_TT_IO_TIMER_SEL_SYSTIM0);
  4440. wr32(IGC_TRGTTIMH0, (u32)ts.tv_sec);
  4441. tsauxc = rd32(IGC_TSAUXC);
  4442. tsauxc |= IGC_TSAUXC_EN_TT0;
  4443. wr32(IGC_TSAUXC, tsauxc);
  4444. adapter->perout[0].start = ts;
  4445. spin_unlock(&adapter->tmreg_lock);
  4446. }
  4447. if (tsicr & IGC_TSICR_TT1) {
  4448. spin_lock(&adapter->tmreg_lock);
  4449. ts = timespec64_add(adapter->perout[1].start,
  4450. adapter->perout[1].period);
  4451. wr32(IGC_TRGTTIML1, ts.tv_nsec | IGC_TT_IO_TIMER_SEL_SYSTIM0);
  4452. wr32(IGC_TRGTTIMH1, (u32)ts.tv_sec);
  4453. tsauxc = rd32(IGC_TSAUXC);
  4454. tsauxc |= IGC_TSAUXC_EN_TT1;
  4455. wr32(IGC_TSAUXC, tsauxc);
  4456. adapter->perout[1].start = ts;
  4457. spin_unlock(&adapter->tmreg_lock);
  4458. }
  4459. if (tsicr & IGC_TSICR_AUTT0) {
  4460. nsec = rd32(IGC_AUXSTMPL0);
  4461. sec = rd32(IGC_AUXSTMPH0);
  4462. event.type = PTP_CLOCK_EXTTS;
  4463. event.index = 0;
  4464. event.timestamp = sec * NSEC_PER_SEC + nsec;
  4465. ptp_clock_event(adapter->ptp_clock, &event);
  4466. }
  4467. if (tsicr & IGC_TSICR_AUTT1) {
  4468. nsec = rd32(IGC_AUXSTMPL1);
  4469. sec = rd32(IGC_AUXSTMPH1);
  4470. event.type = PTP_CLOCK_EXTTS;
  4471. event.index = 1;
  4472. event.timestamp = sec * NSEC_PER_SEC + nsec;
  4473. ptp_clock_event(adapter->ptp_clock, &event);
  4474. }
  4475. }
  4476. /**
  4477. * igc_msix_other - msix other interrupt handler
  4478. * @irq: interrupt number
  4479. * @data: pointer to a q_vector
  4480. */
  4481. static irqreturn_t igc_msix_other(int irq, void *data)
  4482. {
  4483. struct igc_adapter *adapter = data;
  4484. struct igc_hw *hw = &adapter->hw;
  4485. u32 icr = rd32(IGC_ICR);
  4486. /* reading ICR causes bit 31 of EICR to be cleared */
  4487. if (icr & IGC_ICR_DRSTA)
  4488. schedule_work(&adapter->reset_task);
  4489. if (icr & IGC_ICR_DOUTSYNC) {
  4490. /* HW is reporting DMA is out of sync */
  4491. adapter->stats.doosync++;
  4492. }
  4493. if (icr & IGC_ICR_LSC) {
  4494. hw->mac.get_link_status = true;
  4495. /* guard against interrupt when we're going down */
  4496. if (!test_bit(__IGC_DOWN, &adapter->state))
  4497. mod_timer(&adapter->watchdog_timer, jiffies + 1);
  4498. }
  4499. if (icr & IGC_ICR_TS)
  4500. igc_tsync_interrupt(adapter);
  4501. wr32(IGC_EIMS, adapter->eims_other);
  4502. return IRQ_HANDLED;
  4503. }
  4504. static void igc_write_itr(struct igc_q_vector *q_vector)
  4505. {
  4506. u32 itr_val = q_vector->itr_val & IGC_QVECTOR_MASK;
  4507. if (!q_vector->set_itr)
  4508. return;
  4509. if (!itr_val)
  4510. itr_val = IGC_ITR_VAL_MASK;
  4511. itr_val |= IGC_EITR_CNT_IGNR;
  4512. writel(itr_val, q_vector->itr_register);
  4513. q_vector->set_itr = 0;
  4514. }
  4515. static irqreturn_t igc_msix_ring(int irq, void *data)
  4516. {
  4517. struct igc_q_vector *q_vector = data;
  4518. /* Write the ITR value calculated from the previous interrupt. */
  4519. igc_write_itr(q_vector);
  4520. napi_schedule(&q_vector->napi);
  4521. return IRQ_HANDLED;
  4522. }
  4523. /**
  4524. * igc_request_msix - Initialize MSI-X interrupts
  4525. * @adapter: Pointer to adapter structure
  4526. *
  4527. * igc_request_msix allocates MSI-X vectors and requests interrupts from the
  4528. * kernel.
  4529. */
  4530. static int igc_request_msix(struct igc_adapter *adapter)
  4531. {
  4532. unsigned int num_q_vectors = adapter->num_q_vectors;
  4533. int i = 0, err = 0, vector = 0, free_vector = 0;
  4534. struct net_device *netdev = adapter->netdev;
  4535. err = request_irq(adapter->msix_entries[vector].vector,
  4536. &igc_msix_other, 0, netdev->name, adapter);
  4537. if (err)
  4538. goto err_out;
  4539. if (num_q_vectors > MAX_Q_VECTORS) {
  4540. num_q_vectors = MAX_Q_VECTORS;
  4541. dev_warn(&adapter->pdev->dev,
  4542. "The number of queue vectors (%d) is higher than max allowed (%d)\n",
  4543. adapter->num_q_vectors, MAX_Q_VECTORS);
  4544. }
  4545. for (i = 0; i < num_q_vectors; i++) {
  4546. struct igc_q_vector *q_vector = adapter->q_vector[i];
  4547. vector++;
  4548. q_vector->itr_register = adapter->io_addr + IGC_EITR(vector);
  4549. if (q_vector->rx.ring && q_vector->tx.ring)
  4550. sprintf(q_vector->name, "%s-TxRx-%u", netdev->name,
  4551. q_vector->rx.ring->queue_index);
  4552. else if (q_vector->tx.ring)
  4553. sprintf(q_vector->name, "%s-tx-%u", netdev->name,
  4554. q_vector->tx.ring->queue_index);
  4555. else if (q_vector->rx.ring)
  4556. sprintf(q_vector->name, "%s-rx-%u", netdev->name,
  4557. q_vector->rx.ring->queue_index);
  4558. else
  4559. sprintf(q_vector->name, "%s-unused", netdev->name);
  4560. err = request_irq(adapter->msix_entries[vector].vector,
  4561. igc_msix_ring, 0, q_vector->name,
  4562. q_vector);
  4563. if (err)
  4564. goto err_free;
  4565. }
  4566. igc_configure_msix(adapter);
  4567. return 0;
  4568. err_free:
  4569. /* free already assigned IRQs */
  4570. free_irq(adapter->msix_entries[free_vector++].vector, adapter);
  4571. vector--;
  4572. for (i = 0; i < vector; i++) {
  4573. free_irq(adapter->msix_entries[free_vector++].vector,
  4574. adapter->q_vector[i]);
  4575. }
  4576. err_out:
  4577. return err;
  4578. }
  4579. /**
  4580. * igc_clear_interrupt_scheme - reset the device to a state of no interrupts
  4581. * @adapter: Pointer to adapter structure
  4582. *
  4583. * This function resets the device so that it has 0 rx queues, tx queues, and
  4584. * MSI-X interrupts allocated.
  4585. */
  4586. static void igc_clear_interrupt_scheme(struct igc_adapter *adapter)
  4587. {
  4588. igc_free_q_vectors(adapter);
  4589. igc_reset_interrupt_capability(adapter);
  4590. }
  4591. /* Need to wait a few seconds after link up to get diagnostic information from
  4592. * the phy
  4593. */
  4594. static void igc_update_phy_info(struct timer_list *t)
  4595. {
  4596. struct igc_adapter *adapter = from_timer(adapter, t, phy_info_timer);
  4597. igc_get_phy_info(&adapter->hw);
  4598. }
  4599. /**
  4600. * igc_has_link - check shared code for link and determine up/down
  4601. * @adapter: pointer to driver private info
  4602. */
  4603. bool igc_has_link(struct igc_adapter *adapter)
  4604. {
  4605. struct igc_hw *hw = &adapter->hw;
  4606. bool link_active = false;
  4607. /* get_link_status is set on LSC (link status) interrupt or
  4608. * rx sequence error interrupt. get_link_status will stay
  4609. * false until the igc_check_for_link establishes link
  4610. * for copper adapters ONLY
  4611. */
  4612. if (!hw->mac.get_link_status)
  4613. return true;
  4614. hw->mac.ops.check_for_link(hw);
  4615. link_active = !hw->mac.get_link_status;
  4616. if (hw->mac.type == igc_i225) {
  4617. if (!netif_carrier_ok(adapter->netdev)) {
  4618. adapter->flags &= ~IGC_FLAG_NEED_LINK_UPDATE;
  4619. } else if (!(adapter->flags & IGC_FLAG_NEED_LINK_UPDATE)) {
  4620. adapter->flags |= IGC_FLAG_NEED_LINK_UPDATE;
  4621. adapter->link_check_timeout = jiffies;
  4622. }
  4623. }
  4624. return link_active;
  4625. }
  4626. /**
  4627. * igc_watchdog - Timer Call-back
  4628. * @t: timer for the watchdog
  4629. */
  4630. static void igc_watchdog(struct timer_list *t)
  4631. {
  4632. struct igc_adapter *adapter = from_timer(adapter, t, watchdog_timer);
  4633. /* Do the rest outside of interrupt context */
  4634. schedule_work(&adapter->watchdog_task);
  4635. }
  4636. static void igc_watchdog_task(struct work_struct *work)
  4637. {
  4638. struct igc_adapter *adapter = container_of(work,
  4639. struct igc_adapter,
  4640. watchdog_task);
  4641. struct net_device *netdev = adapter->netdev;
  4642. struct igc_hw *hw = &adapter->hw;
  4643. struct igc_phy_info *phy = &hw->phy;
  4644. u16 phy_data, retry_count = 20;
  4645. u32 link;
  4646. int i;
  4647. link = igc_has_link(adapter);
  4648. if (adapter->flags & IGC_FLAG_NEED_LINK_UPDATE) {
  4649. if (time_after(jiffies, (adapter->link_check_timeout + HZ)))
  4650. adapter->flags &= ~IGC_FLAG_NEED_LINK_UPDATE;
  4651. else
  4652. link = false;
  4653. }
  4654. if (link) {
  4655. /* Cancel scheduled suspend requests. */
  4656. pm_runtime_resume(netdev->dev.parent);
  4657. if (!netif_carrier_ok(netdev)) {
  4658. u32 ctrl;
  4659. hw->mac.ops.get_speed_and_duplex(hw,
  4660. &adapter->link_speed,
  4661. &adapter->link_duplex);
  4662. ctrl = rd32(IGC_CTRL);
  4663. /* Link status message must follow this format */
  4664. netdev_info(netdev,
  4665. "NIC Link is Up %d Mbps %s Duplex, Flow Control: %s\n",
  4666. adapter->link_speed,
  4667. adapter->link_duplex == FULL_DUPLEX ?
  4668. "Full" : "Half",
  4669. (ctrl & IGC_CTRL_TFCE) &&
  4670. (ctrl & IGC_CTRL_RFCE) ? "RX/TX" :
  4671. (ctrl & IGC_CTRL_RFCE) ? "RX" :
  4672. (ctrl & IGC_CTRL_TFCE) ? "TX" : "None");
  4673. /* disable EEE if enabled */
  4674. if ((adapter->flags & IGC_FLAG_EEE) &&
  4675. adapter->link_duplex == HALF_DUPLEX) {
  4676. netdev_info(netdev,
  4677. "EEE Disabled: unsupported at half duplex. Re-enable using ethtool when at full duplex\n");
  4678. adapter->hw.dev_spec._base.eee_enable = false;
  4679. adapter->flags &= ~IGC_FLAG_EEE;
  4680. }
  4681. /* check if SmartSpeed worked */
  4682. igc_check_downshift(hw);
  4683. if (phy->speed_downgraded)
  4684. netdev_warn(netdev, "Link Speed was downgraded by SmartSpeed\n");
  4685. /* adjust timeout factor according to speed/duplex */
  4686. adapter->tx_timeout_factor = 1;
  4687. switch (adapter->link_speed) {
  4688. case SPEED_10:
  4689. adapter->tx_timeout_factor = 14;
  4690. break;
  4691. case SPEED_100:
  4692. case SPEED_1000:
  4693. case SPEED_2500:
  4694. adapter->tx_timeout_factor = 1;
  4695. break;
  4696. }
  4697. /* Once the launch time has been set on the wire, there
  4698. * is a delay before the link speed can be determined
  4699. * based on link-up activity. Write into the register
  4700. * as soon as we know the correct link speed.
  4701. */
  4702. igc_tsn_adjust_txtime_offset(adapter);
  4703. if (adapter->link_speed != SPEED_1000)
  4704. goto no_wait;
  4705. /* wait for Remote receiver status OK */
  4706. retry_read_status:
  4707. if (!igc_read_phy_reg(hw, PHY_1000T_STATUS,
  4708. &phy_data)) {
  4709. if (!(phy_data & SR_1000T_REMOTE_RX_STATUS) &&
  4710. retry_count) {
  4711. msleep(100);
  4712. retry_count--;
  4713. goto retry_read_status;
  4714. } else if (!retry_count) {
  4715. netdev_err(netdev, "exceed max 2 second\n");
  4716. }
  4717. } else {
  4718. netdev_err(netdev, "read 1000Base-T Status Reg\n");
  4719. }
  4720. no_wait:
  4721. netif_carrier_on(netdev);
  4722. /* link state has changed, schedule phy info update */
  4723. if (!test_bit(__IGC_DOWN, &adapter->state))
  4724. mod_timer(&adapter->phy_info_timer,
  4725. round_jiffies(jiffies + 2 * HZ));
  4726. }
  4727. } else {
  4728. if (netif_carrier_ok(netdev)) {
  4729. adapter->link_speed = 0;
  4730. adapter->link_duplex = 0;
  4731. /* Links status message must follow this format */
  4732. netdev_info(netdev, "NIC Link is Down\n");
  4733. netif_carrier_off(netdev);
  4734. /* link state has changed, schedule phy info update */
  4735. if (!test_bit(__IGC_DOWN, &adapter->state))
  4736. mod_timer(&adapter->phy_info_timer,
  4737. round_jiffies(jiffies + 2 * HZ));
  4738. pm_schedule_suspend(netdev->dev.parent,
  4739. MSEC_PER_SEC * 5);
  4740. }
  4741. }
  4742. spin_lock(&adapter->stats64_lock);
  4743. igc_update_stats(adapter);
  4744. spin_unlock(&adapter->stats64_lock);
  4745. for (i = 0; i < adapter->num_tx_queues; i++) {
  4746. struct igc_ring *tx_ring = adapter->tx_ring[i];
  4747. if (!netif_carrier_ok(netdev)) {
  4748. /* We've lost link, so the controller stops DMA,
  4749. * but we've got queued Tx work that's never going
  4750. * to get done, so reset controller to flush Tx.
  4751. * (Do the reset outside of interrupt context).
  4752. */
  4753. if (igc_desc_unused(tx_ring) + 1 < tx_ring->count) {
  4754. adapter->tx_timeout_count++;
  4755. schedule_work(&adapter->reset_task);
  4756. /* return immediately since reset is imminent */
  4757. return;
  4758. }
  4759. }
  4760. /* Force detection of hung controller every watchdog period */
  4761. set_bit(IGC_RING_FLAG_TX_DETECT_HANG, &tx_ring->flags);
  4762. }
  4763. /* Cause software interrupt to ensure Rx ring is cleaned */
  4764. if (adapter->flags & IGC_FLAG_HAS_MSIX) {
  4765. u32 eics = 0;
  4766. for (i = 0; i < adapter->num_q_vectors; i++) {
  4767. struct igc_q_vector *q_vector = adapter->q_vector[i];
  4768. struct igc_ring *rx_ring;
  4769. if (!q_vector->rx.ring)
  4770. continue;
  4771. rx_ring = adapter->rx_ring[q_vector->rx.ring->queue_index];
  4772. if (test_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags)) {
  4773. eics |= q_vector->eims_value;
  4774. clear_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags);
  4775. }
  4776. }
  4777. if (eics)
  4778. wr32(IGC_EICS, eics);
  4779. } else {
  4780. struct igc_ring *rx_ring = adapter->rx_ring[0];
  4781. if (test_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags)) {
  4782. clear_bit(IGC_RING_FLAG_RX_ALLOC_FAILED, &rx_ring->flags);
  4783. wr32(IGC_ICS, IGC_ICS_RXDMT0);
  4784. }
  4785. }
  4786. igc_ptp_tx_hang(adapter);
  4787. /* Reset the timer */
  4788. if (!test_bit(__IGC_DOWN, &adapter->state)) {
  4789. if (adapter->flags & IGC_FLAG_NEED_LINK_UPDATE)
  4790. mod_timer(&adapter->watchdog_timer,
  4791. round_jiffies(jiffies + HZ));
  4792. else
  4793. mod_timer(&adapter->watchdog_timer,
  4794. round_jiffies(jiffies + 2 * HZ));
  4795. }
  4796. }
  4797. /**
  4798. * igc_intr_msi - Interrupt Handler
  4799. * @irq: interrupt number
  4800. * @data: pointer to a network interface device structure
  4801. */
  4802. static irqreturn_t igc_intr_msi(int irq, void *data)
  4803. {
  4804. struct igc_adapter *adapter = data;
  4805. struct igc_q_vector *q_vector = adapter->q_vector[0];
  4806. struct igc_hw *hw = &adapter->hw;
  4807. /* read ICR disables interrupts using IAM */
  4808. u32 icr = rd32(IGC_ICR);
  4809. igc_write_itr(q_vector);
  4810. if (icr & IGC_ICR_DRSTA)
  4811. schedule_work(&adapter->reset_task);
  4812. if (icr & IGC_ICR_DOUTSYNC) {
  4813. /* HW is reporting DMA is out of sync */
  4814. adapter->stats.doosync++;
  4815. }
  4816. if (icr & (IGC_ICR_RXSEQ | IGC_ICR_LSC)) {
  4817. hw->mac.get_link_status = true;
  4818. if (!test_bit(__IGC_DOWN, &adapter->state))
  4819. mod_timer(&adapter->watchdog_timer, jiffies + 1);
  4820. }
  4821. if (icr & IGC_ICR_TS)
  4822. igc_tsync_interrupt(adapter);
  4823. napi_schedule(&q_vector->napi);
  4824. return IRQ_HANDLED;
  4825. }
  4826. /**
  4827. * igc_intr - Legacy Interrupt Handler
  4828. * @irq: interrupt number
  4829. * @data: pointer to a network interface device structure
  4830. */
  4831. static irqreturn_t igc_intr(int irq, void *data)
  4832. {
  4833. struct igc_adapter *adapter = data;
  4834. struct igc_q_vector *q_vector = adapter->q_vector[0];
  4835. struct igc_hw *hw = &adapter->hw;
  4836. /* Interrupt Auto-Mask...upon reading ICR, interrupts are masked. No
  4837. * need for the IMC write
  4838. */
  4839. u32 icr = rd32(IGC_ICR);
  4840. /* IMS will not auto-mask if INT_ASSERTED is not set, and if it is
  4841. * not set, then the adapter didn't send an interrupt
  4842. */
  4843. if (!(icr & IGC_ICR_INT_ASSERTED))
  4844. return IRQ_NONE;
  4845. igc_write_itr(q_vector);
  4846. if (icr & IGC_ICR_DRSTA)
  4847. schedule_work(&adapter->reset_task);
  4848. if (icr & IGC_ICR_DOUTSYNC) {
  4849. /* HW is reporting DMA is out of sync */
  4850. adapter->stats.doosync++;
  4851. }
  4852. if (icr & (IGC_ICR_RXSEQ | IGC_ICR_LSC)) {
  4853. hw->mac.get_link_status = true;
  4854. /* guard against interrupt when we're going down */
  4855. if (!test_bit(__IGC_DOWN, &adapter->state))
  4856. mod_timer(&adapter->watchdog_timer, jiffies + 1);
  4857. }
  4858. if (icr & IGC_ICR_TS)
  4859. igc_tsync_interrupt(adapter);
  4860. napi_schedule(&q_vector->napi);
  4861. return IRQ_HANDLED;
  4862. }
  4863. static void igc_free_irq(struct igc_adapter *adapter)
  4864. {
  4865. if (adapter->msix_entries) {
  4866. int vector = 0, i;
  4867. free_irq(adapter->msix_entries[vector++].vector, adapter);
  4868. for (i = 0; i < adapter->num_q_vectors; i++)
  4869. free_irq(adapter->msix_entries[vector++].vector,
  4870. adapter->q_vector[i]);
  4871. } else {
  4872. free_irq(adapter->pdev->irq, adapter);
  4873. }
  4874. }
  4875. /**
  4876. * igc_request_irq - initialize interrupts
  4877. * @adapter: Pointer to adapter structure
  4878. *
  4879. * Attempts to configure interrupts using the best available
  4880. * capabilities of the hardware and kernel.
  4881. */
  4882. static int igc_request_irq(struct igc_adapter *adapter)
  4883. {
  4884. struct net_device *netdev = adapter->netdev;
  4885. struct pci_dev *pdev = adapter->pdev;
  4886. int err = 0;
  4887. if (adapter->flags & IGC_FLAG_HAS_MSIX) {
  4888. err = igc_request_msix(adapter);
  4889. if (!err)
  4890. goto request_done;
  4891. /* fall back to MSI */
  4892. igc_free_all_tx_resources(adapter);
  4893. igc_free_all_rx_resources(adapter);
  4894. igc_clear_interrupt_scheme(adapter);
  4895. err = igc_init_interrupt_scheme(adapter, false);
  4896. if (err)
  4897. goto request_done;
  4898. igc_setup_all_tx_resources(adapter);
  4899. igc_setup_all_rx_resources(adapter);
  4900. igc_configure(adapter);
  4901. }
  4902. igc_assign_vector(adapter->q_vector[0], 0);
  4903. if (adapter->flags & IGC_FLAG_HAS_MSI) {
  4904. err = request_irq(pdev->irq, &igc_intr_msi, 0,
  4905. netdev->name, adapter);
  4906. if (!err)
  4907. goto request_done;
  4908. /* fall back to legacy interrupts */
  4909. igc_reset_interrupt_capability(adapter);
  4910. adapter->flags &= ~IGC_FLAG_HAS_MSI;
  4911. }
  4912. err = request_irq(pdev->irq, &igc_intr, IRQF_SHARED,
  4913. netdev->name, adapter);
  4914. if (err)
  4915. netdev_err(netdev, "Error %d getting interrupt\n", err);
  4916. request_done:
  4917. return err;
  4918. }
  4919. /**
  4920. * __igc_open - Called when a network interface is made active
  4921. * @netdev: network interface device structure
  4922. * @resuming: boolean indicating if the device is resuming
  4923. *
  4924. * Returns 0 on success, negative value on failure
  4925. *
  4926. * The open entry point is called when a network interface is made
  4927. * active by the system (IFF_UP). At this point all resources needed
  4928. * for transmit and receive operations are allocated, the interrupt
  4929. * handler is registered with the OS, the watchdog timer is started,
  4930. * and the stack is notified that the interface is ready.
  4931. */
  4932. static int __igc_open(struct net_device *netdev, bool resuming)
  4933. {
  4934. struct igc_adapter *adapter = netdev_priv(netdev);
  4935. struct pci_dev *pdev = adapter->pdev;
  4936. struct igc_hw *hw = &adapter->hw;
  4937. int err = 0;
  4938. int i = 0;
  4939. /* disallow open during test */
  4940. if (test_bit(__IGC_TESTING, &adapter->state)) {
  4941. WARN_ON(resuming);
  4942. return -EBUSY;
  4943. }
  4944. if (!resuming)
  4945. pm_runtime_get_sync(&pdev->dev);
  4946. netif_carrier_off(netdev);
  4947. /* allocate transmit descriptors */
  4948. err = igc_setup_all_tx_resources(adapter);
  4949. if (err)
  4950. goto err_setup_tx;
  4951. /* allocate receive descriptors */
  4952. err = igc_setup_all_rx_resources(adapter);
  4953. if (err)
  4954. goto err_setup_rx;
  4955. igc_power_up_link(adapter);
  4956. igc_configure(adapter);
  4957. err = igc_request_irq(adapter);
  4958. if (err)
  4959. goto err_req_irq;
  4960. clear_bit(__IGC_DOWN, &adapter->state);
  4961. for (i = 0; i < adapter->num_q_vectors; i++)
  4962. napi_enable(&adapter->q_vector[i]->napi);
  4963. /* Clear any pending interrupts. */
  4964. rd32(IGC_ICR);
  4965. igc_irq_enable(adapter);
  4966. if (!resuming)
  4967. pm_runtime_put(&pdev->dev);
  4968. netif_tx_start_all_queues(netdev);
  4969. /* start the watchdog. */
  4970. hw->mac.get_link_status = true;
  4971. schedule_work(&adapter->watchdog_task);
  4972. return IGC_SUCCESS;
  4973. err_req_irq:
  4974. igc_release_hw_control(adapter);
  4975. igc_power_down_phy_copper_base(&adapter->hw);
  4976. igc_free_all_rx_resources(adapter);
  4977. err_setup_rx:
  4978. igc_free_all_tx_resources(adapter);
  4979. err_setup_tx:
  4980. igc_reset(adapter);
  4981. if (!resuming)
  4982. pm_runtime_put(&pdev->dev);
  4983. return err;
  4984. }
  4985. int igc_open(struct net_device *netdev)
  4986. {
  4987. struct igc_adapter *adapter = netdev_priv(netdev);
  4988. int err;
  4989. /* Notify the stack of the actual queue counts. */
  4990. err = netif_set_real_num_queues(netdev, adapter->num_tx_queues,
  4991. adapter->num_rx_queues);
  4992. if (err) {
  4993. netdev_err(netdev, "error setting real queue count\n");
  4994. return err;
  4995. }
  4996. return __igc_open(netdev, false);
  4997. }
  4998. /**
  4999. * __igc_close - Disables a network interface
  5000. * @netdev: network interface device structure
  5001. * @suspending: boolean indicating the device is suspending
  5002. *
  5003. * Returns 0, this is not allowed to fail
  5004. *
  5005. * The close entry point is called when an interface is de-activated
  5006. * by the OS. The hardware is still under the driver's control, but
  5007. * needs to be disabled. A global MAC reset is issued to stop the
  5008. * hardware, and all transmit and receive resources are freed.
  5009. */
  5010. static int __igc_close(struct net_device *netdev, bool suspending)
  5011. {
  5012. struct igc_adapter *adapter = netdev_priv(netdev);
  5013. struct pci_dev *pdev = adapter->pdev;
  5014. WARN_ON(test_bit(__IGC_RESETTING, &adapter->state));
  5015. if (!suspending)
  5016. pm_runtime_get_sync(&pdev->dev);
  5017. igc_down(adapter);
  5018. igc_release_hw_control(adapter);
  5019. igc_free_irq(adapter);
  5020. igc_free_all_tx_resources(adapter);
  5021. igc_free_all_rx_resources(adapter);
  5022. if (!suspending)
  5023. pm_runtime_put_sync(&pdev->dev);
  5024. return 0;
  5025. }
  5026. int igc_close(struct net_device *netdev)
  5027. {
  5028. if (netif_device_present(netdev) || netdev->dismantle)
  5029. return __igc_close(netdev, false);
  5030. return 0;
  5031. }
  5032. /**
  5033. * igc_ioctl - Access the hwtstamp interface
  5034. * @netdev: network interface device structure
  5035. * @ifr: interface request data
  5036. * @cmd: ioctl command
  5037. **/
  5038. static int igc_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
  5039. {
  5040. switch (cmd) {
  5041. case SIOCGHWTSTAMP:
  5042. return igc_ptp_get_ts_config(netdev, ifr);
  5043. case SIOCSHWTSTAMP:
  5044. return igc_ptp_set_ts_config(netdev, ifr);
  5045. default:
  5046. return -EOPNOTSUPP;
  5047. }
  5048. }
  5049. static int igc_save_launchtime_params(struct igc_adapter *adapter, int queue,
  5050. bool enable)
  5051. {
  5052. struct igc_ring *ring;
  5053. if (queue < 0 || queue >= adapter->num_tx_queues)
  5054. return -EINVAL;
  5055. ring = adapter->tx_ring[queue];
  5056. ring->launchtime_enable = enable;
  5057. return 0;
  5058. }
  5059. static bool is_base_time_past(ktime_t base_time, const struct timespec64 *now)
  5060. {
  5061. struct timespec64 b;
  5062. b = ktime_to_timespec64(base_time);
  5063. return timespec64_compare(now, &b) > 0;
  5064. }
  5065. static bool validate_schedule(struct igc_adapter *adapter,
  5066. const struct tc_taprio_qopt_offload *qopt)
  5067. {
  5068. int queue_uses[IGC_MAX_TX_QUEUES] = { };
  5069. struct igc_hw *hw = &adapter->hw;
  5070. struct timespec64 now;
  5071. size_t n;
  5072. if (qopt->cycle_time_extension)
  5073. return false;
  5074. igc_ptp_read(adapter, &now);
  5075. /* If we program the controller's BASET registers with a time
  5076. * in the future, it will hold all the packets until that
  5077. * time, causing a lot of TX Hangs, so to avoid that, we
  5078. * reject schedules that would start in the future.
  5079. * Note: Limitation above is no longer in i226.
  5080. */
  5081. if (!is_base_time_past(qopt->base_time, &now) &&
  5082. igc_is_device_id_i225(hw))
  5083. return false;
  5084. for (n = 0; n < qopt->num_entries; n++) {
  5085. const struct tc_taprio_sched_entry *e, *prev;
  5086. int i;
  5087. prev = n ? &qopt->entries[n - 1] : NULL;
  5088. e = &qopt->entries[n];
  5089. /* i225 only supports "global" frame preemption
  5090. * settings.
  5091. */
  5092. if (e->command != TC_TAPRIO_CMD_SET_GATES)
  5093. return false;
  5094. for (i = 0; i < adapter->num_tx_queues; i++)
  5095. if (e->gate_mask & BIT(i)) {
  5096. queue_uses[i]++;
  5097. /* There are limitations: A single queue cannot
  5098. * be opened and closed multiple times per cycle
  5099. * unless the gate stays open. Check for it.
  5100. */
  5101. if (queue_uses[i] > 1 &&
  5102. !(prev->gate_mask & BIT(i)))
  5103. return false;
  5104. }
  5105. }
  5106. return true;
  5107. }
  5108. static int igc_tsn_enable_launchtime(struct igc_adapter *adapter,
  5109. struct tc_etf_qopt_offload *qopt)
  5110. {
  5111. struct igc_hw *hw = &adapter->hw;
  5112. int err;
  5113. if (hw->mac.type != igc_i225)
  5114. return -EOPNOTSUPP;
  5115. err = igc_save_launchtime_params(adapter, qopt->queue, qopt->enable);
  5116. if (err)
  5117. return err;
  5118. return igc_tsn_offload_apply(adapter);
  5119. }
  5120. static int igc_qbv_clear_schedule(struct igc_adapter *adapter)
  5121. {
  5122. unsigned long flags;
  5123. int i;
  5124. adapter->base_time = 0;
  5125. adapter->cycle_time = NSEC_PER_SEC;
  5126. adapter->taprio_offload_enable = false;
  5127. adapter->qbv_config_change_errors = 0;
  5128. adapter->qbv_count = 0;
  5129. for (i = 0; i < adapter->num_tx_queues; i++) {
  5130. struct igc_ring *ring = adapter->tx_ring[i];
  5131. ring->start_time = 0;
  5132. ring->end_time = NSEC_PER_SEC;
  5133. ring->max_sdu = 0;
  5134. }
  5135. spin_lock_irqsave(&adapter->qbv_tx_lock, flags);
  5136. adapter->qbv_transition = false;
  5137. for (i = 0; i < adapter->num_tx_queues; i++) {
  5138. struct igc_ring *ring = adapter->tx_ring[i];
  5139. ring->oper_gate_closed = false;
  5140. ring->admin_gate_closed = false;
  5141. }
  5142. spin_unlock_irqrestore(&adapter->qbv_tx_lock, flags);
  5143. return 0;
  5144. }
  5145. static int igc_tsn_clear_schedule(struct igc_adapter *adapter)
  5146. {
  5147. igc_qbv_clear_schedule(adapter);
  5148. return 0;
  5149. }
  5150. static void igc_taprio_stats(struct net_device *dev,
  5151. struct tc_taprio_qopt_stats *stats)
  5152. {
  5153. /* When Strict_End is enabled, the tx_overruns counter
  5154. * will always be zero.
  5155. */
  5156. stats->tx_overruns = 0;
  5157. }
  5158. static void igc_taprio_queue_stats(struct net_device *dev,
  5159. struct tc_taprio_qopt_queue_stats *queue_stats)
  5160. {
  5161. struct tc_taprio_qopt_stats *stats = &queue_stats->stats;
  5162. /* When Strict_End is enabled, the tx_overruns counter
  5163. * will always be zero.
  5164. */
  5165. stats->tx_overruns = 0;
  5166. }
  5167. static int igc_save_qbv_schedule(struct igc_adapter *adapter,
  5168. struct tc_taprio_qopt_offload *qopt)
  5169. {
  5170. bool queue_configured[IGC_MAX_TX_QUEUES] = { };
  5171. struct igc_hw *hw = &adapter->hw;
  5172. u32 start_time = 0, end_time = 0;
  5173. struct timespec64 now;
  5174. unsigned long flags;
  5175. size_t n;
  5176. int i;
  5177. if (qopt->base_time < 0)
  5178. return -ERANGE;
  5179. if (igc_is_device_id_i225(hw) && adapter->taprio_offload_enable)
  5180. return -EALREADY;
  5181. if (!validate_schedule(adapter, qopt))
  5182. return -EINVAL;
  5183. igc_ptp_read(adapter, &now);
  5184. if (igc_tsn_is_taprio_activated_by_user(adapter) &&
  5185. is_base_time_past(qopt->base_time, &now))
  5186. adapter->qbv_config_change_errors++;
  5187. adapter->cycle_time = qopt->cycle_time;
  5188. adapter->base_time = qopt->base_time;
  5189. adapter->taprio_offload_enable = true;
  5190. for (n = 0; n < qopt->num_entries; n++) {
  5191. struct tc_taprio_sched_entry *e = &qopt->entries[n];
  5192. end_time += e->interval;
  5193. /* If any of the conditions below are true, we need to manually
  5194. * control the end time of the cycle.
  5195. * 1. Qbv users can specify a cycle time that is not equal
  5196. * to the total GCL intervals. Hence, recalculation is
  5197. * necessary here to exclude the time interval that
  5198. * exceeds the cycle time.
  5199. * 2. According to IEEE Std. 802.1Q-2018 section 8.6.9.2,
  5200. * once the end of the list is reached, it will switch
  5201. * to the END_OF_CYCLE state and leave the gates in the
  5202. * same state until the next cycle is started.
  5203. */
  5204. if (end_time > adapter->cycle_time ||
  5205. n + 1 == qopt->num_entries)
  5206. end_time = adapter->cycle_time;
  5207. for (i = 0; i < adapter->num_tx_queues; i++) {
  5208. struct igc_ring *ring = adapter->tx_ring[i];
  5209. if (!(e->gate_mask & BIT(i)))
  5210. continue;
  5211. /* Check whether a queue stays open for more than one
  5212. * entry. If so, keep the start and advance the end
  5213. * time.
  5214. */
  5215. if (!queue_configured[i])
  5216. ring->start_time = start_time;
  5217. ring->end_time = end_time;
  5218. if (ring->start_time >= adapter->cycle_time)
  5219. queue_configured[i] = false;
  5220. else
  5221. queue_configured[i] = true;
  5222. }
  5223. start_time += e->interval;
  5224. }
  5225. spin_lock_irqsave(&adapter->qbv_tx_lock, flags);
  5226. /* Check whether a queue gets configured.
  5227. * If not, set the start and end time to be end time.
  5228. */
  5229. for (i = 0; i < adapter->num_tx_queues; i++) {
  5230. struct igc_ring *ring = adapter->tx_ring[i];
  5231. if (!is_base_time_past(qopt->base_time, &now)) {
  5232. ring->admin_gate_closed = false;
  5233. } else {
  5234. ring->oper_gate_closed = false;
  5235. ring->admin_gate_closed = false;
  5236. }
  5237. if (!queue_configured[i]) {
  5238. if (!is_base_time_past(qopt->base_time, &now))
  5239. ring->admin_gate_closed = true;
  5240. else
  5241. ring->oper_gate_closed = true;
  5242. ring->start_time = end_time;
  5243. ring->end_time = end_time;
  5244. }
  5245. }
  5246. spin_unlock_irqrestore(&adapter->qbv_tx_lock, flags);
  5247. for (i = 0; i < adapter->num_tx_queues; i++) {
  5248. struct igc_ring *ring = adapter->tx_ring[i];
  5249. struct net_device *dev = adapter->netdev;
  5250. if (qopt->max_sdu[i])
  5251. ring->max_sdu = qopt->max_sdu[i] + dev->hard_header_len - ETH_TLEN;
  5252. else
  5253. ring->max_sdu = 0;
  5254. }
  5255. return 0;
  5256. }
  5257. static int igc_tsn_enable_qbv_scheduling(struct igc_adapter *adapter,
  5258. struct tc_taprio_qopt_offload *qopt)
  5259. {
  5260. struct igc_hw *hw = &adapter->hw;
  5261. int err;
  5262. if (hw->mac.type != igc_i225)
  5263. return -EOPNOTSUPP;
  5264. switch (qopt->cmd) {
  5265. case TAPRIO_CMD_REPLACE:
  5266. err = igc_save_qbv_schedule(adapter, qopt);
  5267. break;
  5268. case TAPRIO_CMD_DESTROY:
  5269. err = igc_tsn_clear_schedule(adapter);
  5270. break;
  5271. case TAPRIO_CMD_STATS:
  5272. igc_taprio_stats(adapter->netdev, &qopt->stats);
  5273. return 0;
  5274. case TAPRIO_CMD_QUEUE_STATS:
  5275. igc_taprio_queue_stats(adapter->netdev, &qopt->queue_stats);
  5276. return 0;
  5277. default:
  5278. return -EOPNOTSUPP;
  5279. }
  5280. if (err)
  5281. return err;
  5282. return igc_tsn_offload_apply(adapter);
  5283. }
  5284. static int igc_save_cbs_params(struct igc_adapter *adapter, int queue,
  5285. bool enable, int idleslope, int sendslope,
  5286. int hicredit, int locredit)
  5287. {
  5288. bool cbs_status[IGC_MAX_SR_QUEUES] = { false };
  5289. struct net_device *netdev = adapter->netdev;
  5290. struct igc_ring *ring;
  5291. int i;
  5292. /* i225 has two sets of credit-based shaper logic.
  5293. * Supporting it only on the top two priority queues
  5294. */
  5295. if (queue < 0 || queue > 1)
  5296. return -EINVAL;
  5297. ring = adapter->tx_ring[queue];
  5298. for (i = 0; i < IGC_MAX_SR_QUEUES; i++)
  5299. if (adapter->tx_ring[i])
  5300. cbs_status[i] = adapter->tx_ring[i]->cbs_enable;
  5301. /* CBS should be enabled on the highest priority queue first in order
  5302. * for the CBS algorithm to operate as intended.
  5303. */
  5304. if (enable) {
  5305. if (queue == 1 && !cbs_status[0]) {
  5306. netdev_err(netdev,
  5307. "Enabling CBS on queue1 before queue0\n");
  5308. return -EINVAL;
  5309. }
  5310. } else {
  5311. if (queue == 0 && cbs_status[1]) {
  5312. netdev_err(netdev,
  5313. "Disabling CBS on queue0 before queue1\n");
  5314. return -EINVAL;
  5315. }
  5316. }
  5317. ring->cbs_enable = enable;
  5318. ring->idleslope = idleslope;
  5319. ring->sendslope = sendslope;
  5320. ring->hicredit = hicredit;
  5321. ring->locredit = locredit;
  5322. return 0;
  5323. }
  5324. static int igc_tsn_enable_cbs(struct igc_adapter *adapter,
  5325. struct tc_cbs_qopt_offload *qopt)
  5326. {
  5327. struct igc_hw *hw = &adapter->hw;
  5328. int err;
  5329. if (hw->mac.type != igc_i225)
  5330. return -EOPNOTSUPP;
  5331. if (qopt->queue < 0 || qopt->queue > 1)
  5332. return -EINVAL;
  5333. err = igc_save_cbs_params(adapter, qopt->queue, qopt->enable,
  5334. qopt->idleslope, qopt->sendslope,
  5335. qopt->hicredit, qopt->locredit);
  5336. if (err)
  5337. return err;
  5338. return igc_tsn_offload_apply(adapter);
  5339. }
  5340. static int igc_tc_query_caps(struct igc_adapter *adapter,
  5341. struct tc_query_caps_base *base)
  5342. {
  5343. struct igc_hw *hw = &adapter->hw;
  5344. switch (base->type) {
  5345. case TC_SETUP_QDISC_MQPRIO: {
  5346. struct tc_mqprio_caps *caps = base->caps;
  5347. caps->validate_queue_counts = true;
  5348. return 0;
  5349. }
  5350. case TC_SETUP_QDISC_TAPRIO: {
  5351. struct tc_taprio_caps *caps = base->caps;
  5352. caps->broken_mqprio = true;
  5353. if (hw->mac.type == igc_i225) {
  5354. caps->supports_queue_max_sdu = true;
  5355. caps->gate_mask_per_txq = true;
  5356. }
  5357. return 0;
  5358. }
  5359. default:
  5360. return -EOPNOTSUPP;
  5361. }
  5362. }
  5363. static void igc_save_mqprio_params(struct igc_adapter *adapter, u8 num_tc,
  5364. u16 *offset)
  5365. {
  5366. int i;
  5367. adapter->strict_priority_enable = true;
  5368. adapter->num_tc = num_tc;
  5369. for (i = 0; i < num_tc; i++)
  5370. adapter->queue_per_tc[i] = offset[i];
  5371. }
  5372. static int igc_tsn_enable_mqprio(struct igc_adapter *adapter,
  5373. struct tc_mqprio_qopt_offload *mqprio)
  5374. {
  5375. struct igc_hw *hw = &adapter->hw;
  5376. int i;
  5377. if (hw->mac.type != igc_i225)
  5378. return -EOPNOTSUPP;
  5379. if (!mqprio->qopt.num_tc) {
  5380. adapter->strict_priority_enable = false;
  5381. goto apply;
  5382. }
  5383. /* There are as many TCs as Tx queues. */
  5384. if (mqprio->qopt.num_tc != adapter->num_tx_queues) {
  5385. NL_SET_ERR_MSG_FMT_MOD(mqprio->extack,
  5386. "Only %d traffic classes supported",
  5387. adapter->num_tx_queues);
  5388. return -EOPNOTSUPP;
  5389. }
  5390. /* Only one queue per TC is supported. */
  5391. for (i = 0; i < mqprio->qopt.num_tc; i++) {
  5392. if (mqprio->qopt.count[i] != 1) {
  5393. NL_SET_ERR_MSG_MOD(mqprio->extack,
  5394. "Only one queue per TC supported");
  5395. return -EOPNOTSUPP;
  5396. }
  5397. }
  5398. /* Preemption is not supported yet. */
  5399. if (mqprio->preemptible_tcs) {
  5400. NL_SET_ERR_MSG_MOD(mqprio->extack,
  5401. "Preemption is not supported yet");
  5402. return -EOPNOTSUPP;
  5403. }
  5404. igc_save_mqprio_params(adapter, mqprio->qopt.num_tc,
  5405. mqprio->qopt.offset);
  5406. mqprio->qopt.hw = TC_MQPRIO_HW_OFFLOAD_TCS;
  5407. apply:
  5408. return igc_tsn_offload_apply(adapter);
  5409. }
  5410. static int igc_setup_tc(struct net_device *dev, enum tc_setup_type type,
  5411. void *type_data)
  5412. {
  5413. struct igc_adapter *adapter = netdev_priv(dev);
  5414. adapter->tc_setup_type = type;
  5415. switch (type) {
  5416. case TC_QUERY_CAPS:
  5417. return igc_tc_query_caps(adapter, type_data);
  5418. case TC_SETUP_QDISC_TAPRIO:
  5419. return igc_tsn_enable_qbv_scheduling(adapter, type_data);
  5420. case TC_SETUP_QDISC_ETF:
  5421. return igc_tsn_enable_launchtime(adapter, type_data);
  5422. case TC_SETUP_QDISC_CBS:
  5423. return igc_tsn_enable_cbs(adapter, type_data);
  5424. case TC_SETUP_QDISC_MQPRIO:
  5425. return igc_tsn_enable_mqprio(adapter, type_data);
  5426. default:
  5427. return -EOPNOTSUPP;
  5428. }
  5429. }
  5430. static int igc_bpf(struct net_device *dev, struct netdev_bpf *bpf)
  5431. {
  5432. struct igc_adapter *adapter = netdev_priv(dev);
  5433. switch (bpf->command) {
  5434. case XDP_SETUP_PROG:
  5435. return igc_xdp_set_prog(adapter, bpf->prog, bpf->extack);
  5436. case XDP_SETUP_XSK_POOL:
  5437. return igc_xdp_setup_pool(adapter, bpf->xsk.pool,
  5438. bpf->xsk.queue_id);
  5439. default:
  5440. return -EOPNOTSUPP;
  5441. }
  5442. }
  5443. static int igc_xdp_xmit(struct net_device *dev, int num_frames,
  5444. struct xdp_frame **frames, u32 flags)
  5445. {
  5446. struct igc_adapter *adapter = netdev_priv(dev);
  5447. int cpu = smp_processor_id();
  5448. struct netdev_queue *nq;
  5449. struct igc_ring *ring;
  5450. int i, nxmit;
  5451. if (unlikely(!netif_carrier_ok(dev)))
  5452. return -ENETDOWN;
  5453. if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
  5454. return -EINVAL;
  5455. ring = igc_xdp_get_tx_ring(adapter, cpu);
  5456. nq = txring_txq(ring);
  5457. __netif_tx_lock(nq, cpu);
  5458. /* Avoid transmit queue timeout since we share it with the slow path */
  5459. txq_trans_cond_update(nq);
  5460. nxmit = 0;
  5461. for (i = 0; i < num_frames; i++) {
  5462. int err;
  5463. struct xdp_frame *xdpf = frames[i];
  5464. err = igc_xdp_init_tx_descriptor(ring, xdpf);
  5465. if (err)
  5466. break;
  5467. nxmit++;
  5468. }
  5469. if (flags & XDP_XMIT_FLUSH)
  5470. igc_flush_tx_descriptors(ring);
  5471. __netif_tx_unlock(nq);
  5472. return nxmit;
  5473. }
  5474. static void igc_trigger_rxtxq_interrupt(struct igc_adapter *adapter,
  5475. struct igc_q_vector *q_vector)
  5476. {
  5477. struct igc_hw *hw = &adapter->hw;
  5478. u32 eics = 0;
  5479. eics |= q_vector->eims_value;
  5480. wr32(IGC_EICS, eics);
  5481. }
  5482. int igc_xsk_wakeup(struct net_device *dev, u32 queue_id, u32 flags)
  5483. {
  5484. struct igc_adapter *adapter = netdev_priv(dev);
  5485. struct igc_q_vector *q_vector;
  5486. struct igc_ring *ring;
  5487. if (test_bit(__IGC_DOWN, &adapter->state))
  5488. return -ENETDOWN;
  5489. if (!igc_xdp_is_enabled(adapter))
  5490. return -ENXIO;
  5491. if (queue_id >= adapter->num_rx_queues)
  5492. return -EINVAL;
  5493. ring = adapter->rx_ring[queue_id];
  5494. if (!ring->xsk_pool)
  5495. return -ENXIO;
  5496. q_vector = adapter->q_vector[queue_id];
  5497. if (!napi_if_scheduled_mark_missed(&q_vector->napi))
  5498. igc_trigger_rxtxq_interrupt(adapter, q_vector);
  5499. return 0;
  5500. }
  5501. static ktime_t igc_get_tstamp(struct net_device *dev,
  5502. const struct skb_shared_hwtstamps *hwtstamps,
  5503. bool cycles)
  5504. {
  5505. struct igc_adapter *adapter = netdev_priv(dev);
  5506. struct igc_inline_rx_tstamps *tstamp;
  5507. ktime_t timestamp;
  5508. tstamp = hwtstamps->netdev_data;
  5509. if (cycles)
  5510. timestamp = igc_ptp_rx_pktstamp(adapter, tstamp->timer1);
  5511. else
  5512. timestamp = igc_ptp_rx_pktstamp(adapter, tstamp->timer0);
  5513. return timestamp;
  5514. }
  5515. static const struct net_device_ops igc_netdev_ops = {
  5516. .ndo_open = igc_open,
  5517. .ndo_stop = igc_close,
  5518. .ndo_start_xmit = igc_xmit_frame,
  5519. .ndo_set_rx_mode = igc_set_rx_mode,
  5520. .ndo_set_mac_address = igc_set_mac,
  5521. .ndo_change_mtu = igc_change_mtu,
  5522. .ndo_tx_timeout = igc_tx_timeout,
  5523. .ndo_get_stats64 = igc_get_stats64,
  5524. .ndo_fix_features = igc_fix_features,
  5525. .ndo_set_features = igc_set_features,
  5526. .ndo_features_check = igc_features_check,
  5527. .ndo_eth_ioctl = igc_ioctl,
  5528. .ndo_setup_tc = igc_setup_tc,
  5529. .ndo_bpf = igc_bpf,
  5530. .ndo_xdp_xmit = igc_xdp_xmit,
  5531. .ndo_xsk_wakeup = igc_xsk_wakeup,
  5532. .ndo_get_tstamp = igc_get_tstamp,
  5533. };
  5534. /* PCIe configuration access */
  5535. void igc_read_pci_cfg(struct igc_hw *hw, u32 reg, u16 *value)
  5536. {
  5537. struct igc_adapter *adapter = hw->back;
  5538. pci_read_config_word(adapter->pdev, reg, value);
  5539. }
  5540. void igc_write_pci_cfg(struct igc_hw *hw, u32 reg, u16 *value)
  5541. {
  5542. struct igc_adapter *adapter = hw->back;
  5543. pci_write_config_word(adapter->pdev, reg, *value);
  5544. }
  5545. s32 igc_read_pcie_cap_reg(struct igc_hw *hw, u32 reg, u16 *value)
  5546. {
  5547. struct igc_adapter *adapter = hw->back;
  5548. if (!pci_is_pcie(adapter->pdev))
  5549. return -IGC_ERR_CONFIG;
  5550. pcie_capability_read_word(adapter->pdev, reg, value);
  5551. return IGC_SUCCESS;
  5552. }
  5553. s32 igc_write_pcie_cap_reg(struct igc_hw *hw, u32 reg, u16 *value)
  5554. {
  5555. struct igc_adapter *adapter = hw->back;
  5556. if (!pci_is_pcie(adapter->pdev))
  5557. return -IGC_ERR_CONFIG;
  5558. pcie_capability_write_word(adapter->pdev, reg, *value);
  5559. return IGC_SUCCESS;
  5560. }
  5561. u32 igc_rd32(struct igc_hw *hw, u32 reg)
  5562. {
  5563. struct igc_adapter *igc = container_of(hw, struct igc_adapter, hw);
  5564. u8 __iomem *hw_addr = READ_ONCE(hw->hw_addr);
  5565. u32 value = 0;
  5566. if (IGC_REMOVED(hw_addr))
  5567. return ~value;
  5568. value = readl(&hw_addr[reg]);
  5569. /* reads should not return all F's */
  5570. if (!(~value) && (!reg || !(~readl(hw_addr)))) {
  5571. struct net_device *netdev = igc->netdev;
  5572. hw->hw_addr = NULL;
  5573. netif_device_detach(netdev);
  5574. netdev_err(netdev, "PCIe link lost, device now detached\n");
  5575. WARN(pci_device_is_present(igc->pdev),
  5576. "igc: Failed to read reg 0x%x!\n", reg);
  5577. }
  5578. return value;
  5579. }
  5580. /* Mapping HW RSS Type to enum xdp_rss_hash_type */
  5581. static enum xdp_rss_hash_type igc_xdp_rss_type[IGC_RSS_TYPE_MAX_TABLE] = {
  5582. [IGC_RSS_TYPE_NO_HASH] = XDP_RSS_TYPE_L2,
  5583. [IGC_RSS_TYPE_HASH_TCP_IPV4] = XDP_RSS_TYPE_L4_IPV4_TCP,
  5584. [IGC_RSS_TYPE_HASH_IPV4] = XDP_RSS_TYPE_L3_IPV4,
  5585. [IGC_RSS_TYPE_HASH_TCP_IPV6] = XDP_RSS_TYPE_L4_IPV6_TCP,
  5586. [IGC_RSS_TYPE_HASH_IPV6_EX] = XDP_RSS_TYPE_L3_IPV6_EX,
  5587. [IGC_RSS_TYPE_HASH_IPV6] = XDP_RSS_TYPE_L3_IPV6,
  5588. [IGC_RSS_TYPE_HASH_TCP_IPV6_EX] = XDP_RSS_TYPE_L4_IPV6_TCP_EX,
  5589. [IGC_RSS_TYPE_HASH_UDP_IPV4] = XDP_RSS_TYPE_L4_IPV4_UDP,
  5590. [IGC_RSS_TYPE_HASH_UDP_IPV6] = XDP_RSS_TYPE_L4_IPV6_UDP,
  5591. [IGC_RSS_TYPE_HASH_UDP_IPV6_EX] = XDP_RSS_TYPE_L4_IPV6_UDP_EX,
  5592. [10] = XDP_RSS_TYPE_NONE, /* RSS Type above 9 "Reserved" by HW */
  5593. [11] = XDP_RSS_TYPE_NONE, /* keep array sized for SW bit-mask */
  5594. [12] = XDP_RSS_TYPE_NONE, /* to handle future HW revisons */
  5595. [13] = XDP_RSS_TYPE_NONE,
  5596. [14] = XDP_RSS_TYPE_NONE,
  5597. [15] = XDP_RSS_TYPE_NONE,
  5598. };
  5599. static int igc_xdp_rx_hash(const struct xdp_md *_ctx, u32 *hash,
  5600. enum xdp_rss_hash_type *rss_type)
  5601. {
  5602. const struct igc_xdp_buff *ctx = (void *)_ctx;
  5603. if (!(ctx->xdp.rxq->dev->features & NETIF_F_RXHASH))
  5604. return -ENODATA;
  5605. *hash = le32_to_cpu(ctx->rx_desc->wb.lower.hi_dword.rss);
  5606. *rss_type = igc_xdp_rss_type[igc_rss_type(ctx->rx_desc)];
  5607. return 0;
  5608. }
  5609. static int igc_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp)
  5610. {
  5611. const struct igc_xdp_buff *ctx = (void *)_ctx;
  5612. struct igc_adapter *adapter = netdev_priv(ctx->xdp.rxq->dev);
  5613. struct igc_inline_rx_tstamps *tstamp = ctx->rx_ts;
  5614. if (igc_test_staterr(ctx->rx_desc, IGC_RXDADV_STAT_TSIP)) {
  5615. *timestamp = igc_ptp_rx_pktstamp(adapter, tstamp->timer0);
  5616. return 0;
  5617. }
  5618. return -ENODATA;
  5619. }
  5620. static const struct xdp_metadata_ops igc_xdp_metadata_ops = {
  5621. .xmo_rx_hash = igc_xdp_rx_hash,
  5622. .xmo_rx_timestamp = igc_xdp_rx_timestamp,
  5623. };
  5624. static enum hrtimer_restart igc_qbv_scheduling_timer(struct hrtimer *timer)
  5625. {
  5626. struct igc_adapter *adapter = container_of(timer, struct igc_adapter,
  5627. hrtimer);
  5628. unsigned long flags;
  5629. unsigned int i;
  5630. spin_lock_irqsave(&adapter->qbv_tx_lock, flags);
  5631. adapter->qbv_transition = true;
  5632. for (i = 0; i < adapter->num_tx_queues; i++) {
  5633. struct igc_ring *tx_ring = adapter->tx_ring[i];
  5634. if (tx_ring->admin_gate_closed) {
  5635. tx_ring->admin_gate_closed = false;
  5636. tx_ring->oper_gate_closed = true;
  5637. } else {
  5638. tx_ring->oper_gate_closed = false;
  5639. }
  5640. }
  5641. adapter->qbv_transition = false;
  5642. spin_unlock_irqrestore(&adapter->qbv_tx_lock, flags);
  5643. return HRTIMER_NORESTART;
  5644. }
  5645. /**
  5646. * igc_probe - Device Initialization Routine
  5647. * @pdev: PCI device information struct
  5648. * @ent: entry in igc_pci_tbl
  5649. *
  5650. * Returns 0 on success, negative on failure
  5651. *
  5652. * igc_probe initializes an adapter identified by a pci_dev structure.
  5653. * The OS initialization, configuring the adapter private structure,
  5654. * and a hardware reset occur.
  5655. */
  5656. static int igc_probe(struct pci_dev *pdev,
  5657. const struct pci_device_id *ent)
  5658. {
  5659. struct igc_adapter *adapter;
  5660. struct net_device *netdev;
  5661. struct igc_hw *hw;
  5662. const struct igc_info *ei = igc_info_tbl[ent->driver_data];
  5663. int err;
  5664. err = pci_enable_device_mem(pdev);
  5665. if (err)
  5666. return err;
  5667. err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
  5668. if (err) {
  5669. dev_err(&pdev->dev,
  5670. "No usable DMA configuration, aborting\n");
  5671. goto err_dma;
  5672. }
  5673. err = pci_request_mem_regions(pdev, igc_driver_name);
  5674. if (err)
  5675. goto err_pci_reg;
  5676. err = pci_enable_ptm(pdev, NULL);
  5677. if (err < 0)
  5678. dev_info(&pdev->dev, "PCIe PTM not supported by PCIe bus/controller\n");
  5679. pci_set_master(pdev);
  5680. err = -ENOMEM;
  5681. netdev = alloc_etherdev_mq(sizeof(struct igc_adapter),
  5682. IGC_MAX_TX_QUEUES);
  5683. if (!netdev)
  5684. goto err_alloc_etherdev;
  5685. SET_NETDEV_DEV(netdev, &pdev->dev);
  5686. pci_set_drvdata(pdev, netdev);
  5687. adapter = netdev_priv(netdev);
  5688. adapter->netdev = netdev;
  5689. adapter->pdev = pdev;
  5690. hw = &adapter->hw;
  5691. hw->back = adapter;
  5692. adapter->port_num = hw->bus.func;
  5693. adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
  5694. /* PCI config space info */
  5695. hw->vendor_id = pdev->vendor;
  5696. hw->device_id = pdev->device;
  5697. hw->revision_id = pdev->revision;
  5698. hw->subsystem_vendor_id = pdev->subsystem_vendor;
  5699. hw->subsystem_device_id = pdev->subsystem_device;
  5700. /* Disable ASPM L1.2 on I226 devices to avoid packet loss */
  5701. if (igc_is_device_id_i226(hw))
  5702. pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2);
  5703. err = pci_save_state(pdev);
  5704. if (err)
  5705. goto err_ioremap;
  5706. err = -EIO;
  5707. adapter->io_addr = ioremap(pci_resource_start(pdev, 0),
  5708. pci_resource_len(pdev, 0));
  5709. if (!adapter->io_addr)
  5710. goto err_ioremap;
  5711. /* hw->hw_addr can be zeroed, so use adapter->io_addr for unmap */
  5712. hw->hw_addr = adapter->io_addr;
  5713. netdev->netdev_ops = &igc_netdev_ops;
  5714. netdev->xdp_metadata_ops = &igc_xdp_metadata_ops;
  5715. netdev->xsk_tx_metadata_ops = &igc_xsk_tx_metadata_ops;
  5716. igc_ethtool_set_ops(netdev);
  5717. netdev->watchdog_timeo = 5 * HZ;
  5718. netdev->mem_start = pci_resource_start(pdev, 0);
  5719. netdev->mem_end = pci_resource_end(pdev, 0);
  5720. /* Copy the default MAC and PHY function pointers */
  5721. memcpy(&hw->mac.ops, ei->mac_ops, sizeof(hw->mac.ops));
  5722. memcpy(&hw->phy.ops, ei->phy_ops, sizeof(hw->phy.ops));
  5723. /* Initialize skew-specific constants */
  5724. err = ei->get_invariants(hw);
  5725. if (err)
  5726. goto err_sw_init;
  5727. /* Add supported features to the features list*/
  5728. netdev->features |= NETIF_F_SG;
  5729. netdev->features |= NETIF_F_TSO;
  5730. netdev->features |= NETIF_F_TSO6;
  5731. netdev->features |= NETIF_F_TSO_ECN;
  5732. netdev->features |= NETIF_F_RXHASH;
  5733. netdev->features |= NETIF_F_RXCSUM;
  5734. netdev->features |= NETIF_F_HW_CSUM;
  5735. netdev->features |= NETIF_F_SCTP_CRC;
  5736. netdev->features |= NETIF_F_HW_TC;
  5737. #define IGC_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
  5738. NETIF_F_GSO_GRE_CSUM | \
  5739. NETIF_F_GSO_IPXIP4 | \
  5740. NETIF_F_GSO_IPXIP6 | \
  5741. NETIF_F_GSO_UDP_TUNNEL | \
  5742. NETIF_F_GSO_UDP_TUNNEL_CSUM)
  5743. netdev->gso_partial_features = IGC_GSO_PARTIAL_FEATURES;
  5744. netdev->features |= NETIF_F_GSO_PARTIAL | IGC_GSO_PARTIAL_FEATURES;
  5745. /* setup the private structure */
  5746. err = igc_sw_init(adapter);
  5747. if (err)
  5748. goto err_sw_init;
  5749. /* copy netdev features into list of user selectable features */
  5750. netdev->hw_features |= NETIF_F_NTUPLE;
  5751. netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_TX;
  5752. netdev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;
  5753. netdev->hw_features |= netdev->features;
  5754. netdev->features |= NETIF_F_HIGHDMA;
  5755. netdev->vlan_features |= netdev->features | NETIF_F_TSO_MANGLEID;
  5756. netdev->mpls_features |= NETIF_F_HW_CSUM;
  5757. netdev->hw_enc_features |= netdev->vlan_features;
  5758. netdev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
  5759. NETDEV_XDP_ACT_XSK_ZEROCOPY;
  5760. /* MTU range: 68 - 9216 */
  5761. netdev->min_mtu = ETH_MIN_MTU;
  5762. netdev->max_mtu = MAX_STD_JUMBO_FRAME_SIZE;
  5763. /* before reading the NVM, reset the controller to put the device in a
  5764. * known good starting state
  5765. */
  5766. hw->mac.ops.reset_hw(hw);
  5767. if (igc_get_flash_presence_i225(hw)) {
  5768. if (hw->nvm.ops.validate(hw) < 0) {
  5769. dev_err(&pdev->dev, "The NVM Checksum Is Not Valid\n");
  5770. err = -EIO;
  5771. goto err_eeprom;
  5772. }
  5773. }
  5774. if (eth_platform_get_mac_address(&pdev->dev, hw->mac.addr)) {
  5775. /* copy the MAC address out of the NVM */
  5776. if (hw->mac.ops.read_mac_addr(hw))
  5777. dev_err(&pdev->dev, "NVM Read Error\n");
  5778. }
  5779. eth_hw_addr_set(netdev, hw->mac.addr);
  5780. if (!is_valid_ether_addr(netdev->dev_addr)) {
  5781. dev_err(&pdev->dev, "Invalid MAC Address\n");
  5782. err = -EIO;
  5783. goto err_eeprom;
  5784. }
  5785. /* configure RXPBSIZE and TXPBSIZE */
  5786. wr32(IGC_RXPBS, I225_RXPBSIZE_DEFAULT);
  5787. wr32(IGC_TXPBS, I225_TXPBSIZE_DEFAULT);
  5788. timer_setup(&adapter->watchdog_timer, igc_watchdog, 0);
  5789. timer_setup(&adapter->phy_info_timer, igc_update_phy_info, 0);
  5790. INIT_WORK(&adapter->reset_task, igc_reset_task);
  5791. INIT_WORK(&adapter->watchdog_task, igc_watchdog_task);
  5792. hrtimer_init(&adapter->hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  5793. adapter->hrtimer.function = &igc_qbv_scheduling_timer;
  5794. /* Initialize link properties that are user-changeable */
  5795. adapter->fc_autoneg = true;
  5796. hw->mac.autoneg = true;
  5797. hw->phy.autoneg_advertised = 0xaf;
  5798. hw->fc.requested_mode = igc_fc_default;
  5799. hw->fc.current_mode = igc_fc_default;
  5800. /* By default, support wake on port A */
  5801. adapter->flags |= IGC_FLAG_WOL_SUPPORTED;
  5802. /* initialize the wol settings based on the eeprom settings */
  5803. if (adapter->flags & IGC_FLAG_WOL_SUPPORTED)
  5804. adapter->wol |= IGC_WUFC_MAG;
  5805. device_set_wakeup_enable(&adapter->pdev->dev,
  5806. adapter->flags & IGC_FLAG_WOL_SUPPORTED);
  5807. igc_ptp_init(adapter);
  5808. igc_tsn_clear_schedule(adapter);
  5809. /* reset the hardware with the new settings */
  5810. igc_reset(adapter);
  5811. /* let the f/w know that the h/w is now under the control of the
  5812. * driver.
  5813. */
  5814. igc_get_hw_control(adapter);
  5815. strscpy(netdev->name, "eth%d", sizeof(netdev->name));
  5816. err = register_netdev(netdev);
  5817. if (err)
  5818. goto err_register;
  5819. /* carrier off reporting is important to ethtool even BEFORE open */
  5820. netif_carrier_off(netdev);
  5821. /* Check if Media Autosense is enabled */
  5822. adapter->ei = *ei;
  5823. /* print pcie link status and MAC address */
  5824. pcie_print_link_status(pdev);
  5825. netdev_info(netdev, "MAC: %pM\n", netdev->dev_addr);
  5826. dev_pm_set_driver_flags(&pdev->dev, DPM_FLAG_NO_DIRECT_COMPLETE);
  5827. /* Disable EEE for internal PHY devices */
  5828. hw->dev_spec._base.eee_enable = false;
  5829. adapter->flags &= ~IGC_FLAG_EEE;
  5830. igc_set_eee_i225(hw, false, false, false);
  5831. pm_runtime_put_noidle(&pdev->dev);
  5832. if (IS_ENABLED(CONFIG_IGC_LEDS)) {
  5833. err = igc_led_setup(adapter);
  5834. if (err) {
  5835. netdev_warn_once(netdev,
  5836. "LED init failed (%d); continuing without LED support\n",
  5837. err);
  5838. adapter->leds_available = false;
  5839. } else {
  5840. adapter->leds_available = true;
  5841. }
  5842. }
  5843. return 0;
  5844. err_register:
  5845. igc_release_hw_control(adapter);
  5846. igc_ptp_stop(adapter);
  5847. err_eeprom:
  5848. if (!igc_check_reset_block(hw))
  5849. igc_reset_phy(hw);
  5850. err_sw_init:
  5851. igc_clear_interrupt_scheme(adapter);
  5852. iounmap(adapter->io_addr);
  5853. err_ioremap:
  5854. free_netdev(netdev);
  5855. err_alloc_etherdev:
  5856. pci_release_mem_regions(pdev);
  5857. err_pci_reg:
  5858. err_dma:
  5859. pci_disable_device(pdev);
  5860. return err;
  5861. }
  5862. /**
  5863. * igc_remove - Device Removal Routine
  5864. * @pdev: PCI device information struct
  5865. *
  5866. * igc_remove is called by the PCI subsystem to alert the driver
  5867. * that it should release a PCI device. This could be caused by a
  5868. * Hot-Plug event, or because the driver is going to be removed from
  5869. * memory.
  5870. */
  5871. static void igc_remove(struct pci_dev *pdev)
  5872. {
  5873. struct net_device *netdev = pci_get_drvdata(pdev);
  5874. struct igc_adapter *adapter = netdev_priv(netdev);
  5875. pm_runtime_get_noresume(&pdev->dev);
  5876. igc_flush_nfc_rules(adapter);
  5877. igc_ptp_stop(adapter);
  5878. pci_disable_ptm(pdev);
  5879. pci_clear_master(pdev);
  5880. set_bit(__IGC_DOWN, &adapter->state);
  5881. del_timer_sync(&adapter->watchdog_timer);
  5882. del_timer_sync(&adapter->phy_info_timer);
  5883. cancel_work_sync(&adapter->reset_task);
  5884. cancel_work_sync(&adapter->watchdog_task);
  5885. hrtimer_cancel(&adapter->hrtimer);
  5886. if (IS_ENABLED(CONFIG_IGC_LEDS) && adapter->leds_available)
  5887. igc_led_free(adapter);
  5888. /* Release control of h/w to f/w. If f/w is AMT enabled, this
  5889. * would have already happened in close and is redundant.
  5890. */
  5891. igc_release_hw_control(adapter);
  5892. unregister_netdev(netdev);
  5893. igc_clear_interrupt_scheme(adapter);
  5894. pci_iounmap(pdev, adapter->io_addr);
  5895. pci_release_mem_regions(pdev);
  5896. free_netdev(netdev);
  5897. pci_disable_device(pdev);
  5898. }
  5899. static int __igc_shutdown(struct pci_dev *pdev, bool *enable_wake,
  5900. bool runtime)
  5901. {
  5902. struct net_device *netdev = pci_get_drvdata(pdev);
  5903. struct igc_adapter *adapter = netdev_priv(netdev);
  5904. u32 wufc = runtime ? IGC_WUFC_LNKC : adapter->wol;
  5905. struct igc_hw *hw = &adapter->hw;
  5906. u32 ctrl, rctl, status;
  5907. bool wake;
  5908. rtnl_lock();
  5909. netif_device_detach(netdev);
  5910. if (netif_running(netdev))
  5911. __igc_close(netdev, true);
  5912. igc_ptp_suspend(adapter);
  5913. igc_clear_interrupt_scheme(adapter);
  5914. rtnl_unlock();
  5915. status = rd32(IGC_STATUS);
  5916. if (status & IGC_STATUS_LU)
  5917. wufc &= ~IGC_WUFC_LNKC;
  5918. if (wufc) {
  5919. igc_setup_rctl(adapter);
  5920. igc_set_rx_mode(netdev);
  5921. /* turn on all-multi mode if wake on multicast is enabled */
  5922. if (wufc & IGC_WUFC_MC) {
  5923. rctl = rd32(IGC_RCTL);
  5924. rctl |= IGC_RCTL_MPE;
  5925. wr32(IGC_RCTL, rctl);
  5926. }
  5927. ctrl = rd32(IGC_CTRL);
  5928. ctrl |= IGC_CTRL_ADVD3WUC;
  5929. wr32(IGC_CTRL, ctrl);
  5930. /* Allow time for pending master requests to run */
  5931. igc_disable_pcie_master(hw);
  5932. wr32(IGC_WUC, IGC_WUC_PME_EN);
  5933. wr32(IGC_WUFC, wufc);
  5934. } else {
  5935. wr32(IGC_WUC, 0);
  5936. wr32(IGC_WUFC, 0);
  5937. }
  5938. wake = wufc || adapter->en_mng_pt;
  5939. if (!wake)
  5940. igc_power_down_phy_copper_base(&adapter->hw);
  5941. else
  5942. igc_power_up_link(adapter);
  5943. if (enable_wake)
  5944. *enable_wake = wake;
  5945. /* Release control of h/w to f/w. If f/w is AMT enabled, this
  5946. * would have already happened in close and is redundant.
  5947. */
  5948. igc_release_hw_control(adapter);
  5949. pci_disable_device(pdev);
  5950. return 0;
  5951. }
  5952. static int igc_runtime_suspend(struct device *dev)
  5953. {
  5954. return __igc_shutdown(to_pci_dev(dev), NULL, 1);
  5955. }
  5956. static void igc_deliver_wake_packet(struct net_device *netdev)
  5957. {
  5958. struct igc_adapter *adapter = netdev_priv(netdev);
  5959. struct igc_hw *hw = &adapter->hw;
  5960. struct sk_buff *skb;
  5961. u32 wupl;
  5962. wupl = rd32(IGC_WUPL) & IGC_WUPL_MASK;
  5963. /* WUPM stores only the first 128 bytes of the wake packet.
  5964. * Read the packet only if we have the whole thing.
  5965. */
  5966. if (wupl == 0 || wupl > IGC_WUPM_BYTES)
  5967. return;
  5968. skb = netdev_alloc_skb_ip_align(netdev, IGC_WUPM_BYTES);
  5969. if (!skb)
  5970. return;
  5971. skb_put(skb, wupl);
  5972. /* Ensure reads are 32-bit aligned */
  5973. wupl = roundup(wupl, 4);
  5974. memcpy_fromio(skb->data, hw->hw_addr + IGC_WUPM_REG(0), wupl);
  5975. skb->protocol = eth_type_trans(skb, netdev);
  5976. netif_rx(skb);
  5977. }
  5978. static int igc_resume(struct device *dev)
  5979. {
  5980. struct pci_dev *pdev = to_pci_dev(dev);
  5981. struct net_device *netdev = pci_get_drvdata(pdev);
  5982. struct igc_adapter *adapter = netdev_priv(netdev);
  5983. struct igc_hw *hw = &adapter->hw;
  5984. u32 err, val;
  5985. pci_set_power_state(pdev, PCI_D0);
  5986. pci_restore_state(pdev);
  5987. pci_save_state(pdev);
  5988. if (!pci_device_is_present(pdev))
  5989. return -ENODEV;
  5990. err = pci_enable_device_mem(pdev);
  5991. if (err) {
  5992. netdev_err(netdev, "Cannot enable PCI device from suspend\n");
  5993. return err;
  5994. }
  5995. pci_set_master(pdev);
  5996. pci_enable_wake(pdev, PCI_D3hot, 0);
  5997. pci_enable_wake(pdev, PCI_D3cold, 0);
  5998. if (igc_is_device_id_i226(hw))
  5999. pci_disable_link_state(pdev, PCIE_LINK_STATE_L1_2);
  6000. if (igc_init_interrupt_scheme(adapter, true)) {
  6001. netdev_err(netdev, "Unable to allocate memory for queues\n");
  6002. return -ENOMEM;
  6003. }
  6004. igc_reset(adapter);
  6005. /* let the f/w know that the h/w is now under the control of the
  6006. * driver.
  6007. */
  6008. igc_get_hw_control(adapter);
  6009. val = rd32(IGC_WUS);
  6010. if (val & WAKE_PKT_WUS)
  6011. igc_deliver_wake_packet(netdev);
  6012. wr32(IGC_WUS, ~0);
  6013. if (netif_running(netdev)) {
  6014. err = __igc_open(netdev, true);
  6015. if (!err)
  6016. netif_device_attach(netdev);
  6017. }
  6018. return err;
  6019. }
  6020. static int igc_runtime_resume(struct device *dev)
  6021. {
  6022. return igc_resume(dev);
  6023. }
  6024. static int igc_suspend(struct device *dev)
  6025. {
  6026. return __igc_shutdown(to_pci_dev(dev), NULL, 0);
  6027. }
  6028. static int __maybe_unused igc_runtime_idle(struct device *dev)
  6029. {
  6030. struct net_device *netdev = dev_get_drvdata(dev);
  6031. struct igc_adapter *adapter = netdev_priv(netdev);
  6032. if (!igc_has_link(adapter))
  6033. pm_schedule_suspend(dev, MSEC_PER_SEC * 5);
  6034. return -EBUSY;
  6035. }
  6036. static void igc_shutdown(struct pci_dev *pdev)
  6037. {
  6038. bool wake;
  6039. __igc_shutdown(pdev, &wake, 0);
  6040. if (system_state == SYSTEM_POWER_OFF) {
  6041. pci_wake_from_d3(pdev, wake);
  6042. pci_set_power_state(pdev, PCI_D3hot);
  6043. }
  6044. }
  6045. /**
  6046. * igc_io_error_detected - called when PCI error is detected
  6047. * @pdev: Pointer to PCI device
  6048. * @state: The current PCI connection state
  6049. *
  6050. * This function is called after a PCI bus error affecting
  6051. * this device has been detected.
  6052. **/
  6053. static pci_ers_result_t igc_io_error_detected(struct pci_dev *pdev,
  6054. pci_channel_state_t state)
  6055. {
  6056. struct net_device *netdev = pci_get_drvdata(pdev);
  6057. struct igc_adapter *adapter = netdev_priv(netdev);
  6058. netif_device_detach(netdev);
  6059. if (state == pci_channel_io_perm_failure)
  6060. return PCI_ERS_RESULT_DISCONNECT;
  6061. if (netif_running(netdev))
  6062. igc_down(adapter);
  6063. pci_disable_device(pdev);
  6064. /* Request a slot reset. */
  6065. return PCI_ERS_RESULT_NEED_RESET;
  6066. }
  6067. /**
  6068. * igc_io_slot_reset - called after the PCI bus has been reset.
  6069. * @pdev: Pointer to PCI device
  6070. *
  6071. * Restart the card from scratch, as if from a cold-boot. Implementation
  6072. * resembles the first-half of the igc_resume routine.
  6073. **/
  6074. static pci_ers_result_t igc_io_slot_reset(struct pci_dev *pdev)
  6075. {
  6076. struct net_device *netdev = pci_get_drvdata(pdev);
  6077. struct igc_adapter *adapter = netdev_priv(netdev);
  6078. struct igc_hw *hw = &adapter->hw;
  6079. pci_ers_result_t result;
  6080. if (pci_enable_device_mem(pdev)) {
  6081. netdev_err(netdev, "Could not re-enable PCI device after reset\n");
  6082. result = PCI_ERS_RESULT_DISCONNECT;
  6083. } else {
  6084. pci_set_master(pdev);
  6085. pci_restore_state(pdev);
  6086. pci_save_state(pdev);
  6087. pci_enable_wake(pdev, PCI_D3hot, 0);
  6088. pci_enable_wake(pdev, PCI_D3cold, 0);
  6089. if (igc_is_device_id_i226(hw))
  6090. pci_disable_link_state_locked(pdev, PCIE_LINK_STATE_L1_2);
  6091. /* In case of PCI error, adapter loses its HW address
  6092. * so we should re-assign it here.
  6093. */
  6094. hw->hw_addr = adapter->io_addr;
  6095. igc_reset(adapter);
  6096. wr32(IGC_WUS, ~0);
  6097. result = PCI_ERS_RESULT_RECOVERED;
  6098. }
  6099. return result;
  6100. }
  6101. /**
  6102. * igc_io_resume - called when traffic can start to flow again.
  6103. * @pdev: Pointer to PCI device
  6104. *
  6105. * This callback is called when the error recovery driver tells us that
  6106. * its OK to resume normal operation. Implementation resembles the
  6107. * second-half of the igc_resume routine.
  6108. */
  6109. static void igc_io_resume(struct pci_dev *pdev)
  6110. {
  6111. struct net_device *netdev = pci_get_drvdata(pdev);
  6112. struct igc_adapter *adapter = netdev_priv(netdev);
  6113. rtnl_lock();
  6114. if (netif_running(netdev)) {
  6115. if (igc_open(netdev)) {
  6116. rtnl_unlock();
  6117. netdev_err(netdev, "igc_open failed after reset\n");
  6118. return;
  6119. }
  6120. }
  6121. netif_device_attach(netdev);
  6122. /* let the f/w know that the h/w is now under the control of the
  6123. * driver.
  6124. */
  6125. igc_get_hw_control(adapter);
  6126. rtnl_unlock();
  6127. }
  6128. static const struct pci_error_handlers igc_err_handler = {
  6129. .error_detected = igc_io_error_detected,
  6130. .slot_reset = igc_io_slot_reset,
  6131. .resume = igc_io_resume,
  6132. };
  6133. static _DEFINE_DEV_PM_OPS(igc_pm_ops, igc_suspend, igc_resume,
  6134. igc_runtime_suspend, igc_runtime_resume,
  6135. igc_runtime_idle);
  6136. static struct pci_driver igc_driver = {
  6137. .name = igc_driver_name,
  6138. .id_table = igc_pci_tbl,
  6139. .probe = igc_probe,
  6140. .remove = igc_remove,
  6141. .driver.pm = pm_ptr(&igc_pm_ops),
  6142. .shutdown = igc_shutdown,
  6143. .err_handler = &igc_err_handler,
  6144. };
  6145. /**
  6146. * igc_reinit_queues - return error
  6147. * @adapter: pointer to adapter structure
  6148. */
  6149. int igc_reinit_queues(struct igc_adapter *adapter)
  6150. {
  6151. struct net_device *netdev = adapter->netdev;
  6152. int err = 0;
  6153. if (netif_running(netdev))
  6154. igc_close(netdev);
  6155. igc_reset_interrupt_capability(adapter);
  6156. if (igc_init_interrupt_scheme(adapter, true)) {
  6157. netdev_err(netdev, "Unable to allocate memory for queues\n");
  6158. return -ENOMEM;
  6159. }
  6160. if (netif_running(netdev))
  6161. err = igc_open(netdev);
  6162. return err;
  6163. }
  6164. /**
  6165. * igc_get_hw_dev - return device
  6166. * @hw: pointer to hardware structure
  6167. *
  6168. * used by hardware layer to print debugging information
  6169. */
  6170. struct net_device *igc_get_hw_dev(struct igc_hw *hw)
  6171. {
  6172. struct igc_adapter *adapter = hw->back;
  6173. return adapter->netdev;
  6174. }
  6175. static void igc_disable_rx_ring_hw(struct igc_ring *ring)
  6176. {
  6177. struct igc_hw *hw = &ring->q_vector->adapter->hw;
  6178. u8 idx = ring->reg_idx;
  6179. u32 rxdctl;
  6180. rxdctl = rd32(IGC_RXDCTL(idx));
  6181. rxdctl &= ~IGC_RXDCTL_QUEUE_ENABLE;
  6182. rxdctl |= IGC_RXDCTL_SWFLUSH;
  6183. wr32(IGC_RXDCTL(idx), rxdctl);
  6184. }
  6185. void igc_disable_rx_ring(struct igc_ring *ring)
  6186. {
  6187. igc_disable_rx_ring_hw(ring);
  6188. igc_clean_rx_ring(ring);
  6189. }
  6190. void igc_enable_rx_ring(struct igc_ring *ring)
  6191. {
  6192. struct igc_adapter *adapter = ring->q_vector->adapter;
  6193. igc_configure_rx_ring(adapter, ring);
  6194. if (ring->xsk_pool)
  6195. igc_alloc_rx_buffers_zc(ring, igc_desc_unused(ring));
  6196. else
  6197. igc_alloc_rx_buffers(ring, igc_desc_unused(ring));
  6198. }
  6199. void igc_disable_tx_ring(struct igc_ring *ring)
  6200. {
  6201. igc_disable_tx_ring_hw(ring);
  6202. igc_clean_tx_ring(ring);
  6203. }
  6204. void igc_enable_tx_ring(struct igc_ring *ring)
  6205. {
  6206. struct igc_adapter *adapter = ring->q_vector->adapter;
  6207. igc_configure_tx_ring(adapter, ring);
  6208. }
  6209. /**
  6210. * igc_init_module - Driver Registration Routine
  6211. *
  6212. * igc_init_module is the first routine called when the driver is
  6213. * loaded. All it does is register with the PCI subsystem.
  6214. */
  6215. static int __init igc_init_module(void)
  6216. {
  6217. int ret;
  6218. pr_info("%s\n", igc_driver_string);
  6219. pr_info("%s\n", igc_copyright);
  6220. ret = pci_register_driver(&igc_driver);
  6221. return ret;
  6222. }
  6223. module_init(igc_init_module);
  6224. /**
  6225. * igc_exit_module - Driver Exit Cleanup Routine
  6226. *
  6227. * igc_exit_module is called just before the driver is removed
  6228. * from memory.
  6229. */
  6230. static void __exit igc_exit_module(void)
  6231. {
  6232. pci_unregister_driver(&igc_driver);
  6233. }
  6234. module_exit(igc_exit_module);
  6235. /* igc_main.c */