123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527 |
- --- linux/include/asm-generic/4level-fixup.h
- +++ linux/include/asm-generic/4level-fixup.h
- @@ -0,0 +1,34 @@
- +#ifndef _4LEVEL_FIXUP_H
- +#define _4LEVEL_FIXUP_H
- +
- +#define __ARCH_HAS_4LEVEL_HACK
- +
- +#define PUD_SIZE PGDIR_SIZE
- +#define PUD_MASK PGDIR_MASK
- +#define PTRS_PER_PUD 1
- +
- +#define pud_t pgd_t
- +
- +#define pmd_alloc(mm, pud, address) \
- +({ pmd_t *ret; \
- + if (pgd_none(*pud)) \
- + ret = __pmd_alloc(mm, pud, address); \
- + else \
- + ret = pmd_offset(pud, address); \
- + ret; \
- +})
- +
- +#define pud_alloc(mm, pgd, address) (pgd)
- +#define pud_offset(pgd, start) (pgd)
- +#define pud_none(pud) 0
- +#define pud_bad(pud) 0
- +#define pud_present(pud) 1
- +#define pud_ERROR(pud) do { } while (0)
- +#define pud_clear(pud) pgd_clear(pud)
- +
- +#undef pud_free_tlb
- +#define pud_free_tlb(tlb, x) do { } while (0)
- +#define pud_free(x) do { } while (0)
- +#define __pud_free_tlb(tlb, x) do { } while (0)
- +
- +#endif
- --- linux/include/asm-generic/bitops.h
- +++ linux/include/asm-generic/bitops.h
- @@ -0,0 +1,81 @@
- +#ifndef _ASM_GENERIC_BITOPS_H_
- +#define _ASM_GENERIC_BITOPS_H_
- +
- +/*
- + * For the benefit of those who are trying to port Linux to another
- + * architecture, here are some C-language equivalents. You should
- + * recode these in the native assembly language, if at all possible.
- + * To guarantee atomicity, these routines call cli() and sti() to
- + * disable interrupts while they operate. (You have to provide inline
- + * routines to cli() and sti().)
- + *
- + * Also note, these routines assume that you have 32 bit longs.
- + * You will have to change this if you are trying to port Linux to the
- + * Alpha architecture or to a Cray. :-)
- + *
- + * C language equivalents written by Theodore Ts'o, 9/26/92
- + */
- +
- +extern __inline__ int set_bit(int nr,long * addr)
- +{
- + int mask, retval;
- +
- + addr += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + cli();
- + retval = (mask & *addr) != 0;
- + *addr |= mask;
- + sti();
- + return retval;
- +}
- +
- +extern __inline__ int clear_bit(int nr, long * addr)
- +{
- + int mask, retval;
- +
- + addr += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + cli();
- + retval = (mask & *addr) != 0;
- + *addr &= ~mask;
- + sti();
- + return retval;
- +}
- +
- +extern __inline__ int test_bit(int nr, const unsigned long * addr)
- +{
- + int mask;
- +
- + addr += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + return ((mask & *addr) != 0);
- +}
- +
- +/*
- + * fls: find last bit set.
- + */
- +
- +#define fls(x) generic_fls(x)
- +
- +#ifdef __KERNEL__
- +
- +/*
- + * ffs: find first bit set. This is defined the same way as
- + * the libc and compiler builtin ffs routines, therefore
- + * differs in spirit from the above ffz (man ffs).
- + */
- +
- +#define ffs(x) generic_ffs(x)
- +
- +/*
- + * hweightN: returns the hamming weight (i.e. the number
- + * of bits set) of a N-bit word
- + */
- +
- +#define hweight32(x) generic_hweight32(x)
- +#define hweight16(x) generic_hweight16(x)
- +#define hweight8(x) generic_hweight8(x)
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _ASM_GENERIC_BITOPS_H */
- --- linux/include/asm-generic/bug.h
- +++ linux/include/asm-generic/bug.h
- @@ -0,0 +1,34 @@
- +#ifndef _ASM_GENERIC_BUG_H
- +#define _ASM_GENERIC_BUG_H
- +
- +#include <linux/compiler.h>
- +// #include <linux/config.h>
- +
- +#ifndef HAVE_ARCH_BUG
- +#define BUG() do { \
- + printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
- + panic("BUG!"); \
- +} while (0)
- +#endif
- +
- +#ifndef HAVE_ARCH_PAGE_BUG
- +#define PAGE_BUG(page) do { \
- + printk("page BUG for page at %p\n", page); \
- + BUG(); \
- +} while (0)
- +#endif
- +
- +#ifndef HAVE_ARCH_BUG_ON
- +#define BUG_ON(condition) do { if (unlikely((condition)!=0)) BUG(); } while(0)
- +#endif
- +
- +#ifndef HAVE_ARCH_WARN_ON
- +#define WARN_ON(condition) do { \
- + if (unlikely((condition)!=0)) { \
- + printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
- + dump_stack(); \
- + } \
- +} while (0)
- +#endif
- +
- +#endif
- --- linux/include/asm-generic/cpumask_arith.h
- +++ linux/include/asm-generic/cpumask_arith.h
- @@ -0,0 +1,49 @@
- +#ifndef __ASM_GENERIC_CPUMASK_ARITH_H
- +#define __ASM_GENERIC_CPUMASK_ARITH_H
- +
- +/*
- + * Arithmetic type -based cpu bitmaps. A single unsigned long is used
- + * to contain the whole cpu bitmap.
- + */
- +
- +#define cpu_set(cpu, map) set_bit(cpu, &(map))
- +#define cpu_clear(cpu, map) clear_bit(cpu, &(map))
- +#define cpu_isset(cpu, map) test_bit(cpu, &(map))
- +#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, &(map))
- +
- +#define cpus_and(dst,src1,src2) do { dst = (src1) & (src2); } while (0)
- +#define cpus_or(dst,src1,src2) do { dst = (src1) | (src2); } while (0)
- +#define cpus_clear(map) do { map = 0; } while (0)
- +#define cpus_complement(map) do { map = ~(map); } while (0)
- +#define cpus_equal(map1, map2) ((map1) == (map2))
- +#define cpus_empty(map) ((map) == 0)
- +#define cpus_addr(map) (&(map))
- +
- +#if BITS_PER_LONG == 32
- +#define cpus_weight(map) hweight32(map)
- +#elif BITS_PER_LONG == 64
- +#define cpus_weight(map) hweight64(map)
- +#endif
- +
- +#define cpus_shift_right(dst, src, n) do { dst = (src) >> (n); } while (0)
- +#define cpus_shift_left(dst, src, n) do { dst = (src) << (n); } while (0)
- +
- +#define any_online_cpu(map) \
- +({ \
- + cpumask_t __tmp__; \
- + cpus_and(__tmp__, map, cpu_online_map); \
- + __tmp__ ? first_cpu(__tmp__) : NR_CPUS; \
- +})
- +
- +#define CPU_MASK_ALL (~((cpumask_t)0) >> (8*sizeof(cpumask_t) - NR_CPUS))
- +#define CPU_MASK_NONE ((cpumask_t)0)
- +
- +/* only ever use this for things that are _never_ used on large boxen */
- +#define cpus_coerce(map) ((unsigned long)(map))
- +#define cpus_promote(map) ({ map; })
- +#define cpumask_of_cpu(cpu) ({ ((cpumask_t)1) << (cpu); })
- +
- +#define first_cpu(map) __ffs(map)
- +#define next_cpu(cpu, map) find_next_bit(&(map), NR_CPUS, cpu + 1)
- +
- +#endif /* __ASM_GENERIC_CPUMASK_ARITH_H */
- --- linux/include/asm-generic/cpumask_array.h
- +++ linux/include/asm-generic/cpumask_array.h
- @@ -0,0 +1,54 @@
- +#ifndef __ASM_GENERIC_CPUMASK_ARRAY_H
- +#define __ASM_GENERIC_CPUMASK_ARRAY_H
- +
- +/*
- + * Array-based cpu bitmaps. An array of unsigned longs is used to contain
- + * the bitmap, and then contained in a structure so it may be passed by
- + * value.
- + */
- +
- +#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
- +
- +#define cpu_set(cpu, map) set_bit(cpu, (map).mask)
- +#define cpu_clear(cpu, map) clear_bit(cpu, (map).mask)
- +#define cpu_isset(cpu, map) test_bit(cpu, (map).mask)
- +#define cpu_test_and_set(cpu, map) test_and_set_bit(cpu, (map).mask)
- +
- +#define cpus_and(dst,src1,src2) bitmap_and((dst).mask,(src1).mask, (src2).mask, NR_CPUS)
- +#define cpus_or(dst,src1,src2) bitmap_or((dst).mask, (src1).mask, (src2).mask, NR_CPUS)
- +#define cpus_clear(map) bitmap_clear((map).mask, NR_CPUS)
- +#define cpus_complement(map) bitmap_complement((map).mask, NR_CPUS)
- +#define cpus_equal(map1, map2) bitmap_equal((map1).mask, (map2).mask, NR_CPUS)
- +#define cpus_empty(map) bitmap_empty(map.mask, NR_CPUS)
- +#define cpus_addr(map) ((map).mask)
- +#define cpus_weight(map) bitmap_weight((map).mask, NR_CPUS)
- +#define cpus_shift_right(d, s, n) bitmap_shift_right((d).mask, (s).mask, n, NR_CPUS)
- +#define cpus_shift_left(d, s, n) bitmap_shift_left((d).mask, (s).mask, n, NR_CPUS)
- +#define first_cpu(map) find_first_bit((map).mask, NR_CPUS)
- +#define next_cpu(cpu, map) find_next_bit((map).mask, NR_CPUS, cpu + 1)
- +
- +/* only ever use this for things that are _never_ used on large boxen */
- +#define cpus_coerce(map) ((map).mask[0])
- +#define cpus_promote(map) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
- + __cpu_mask.mask[0] = map; \
- + __cpu_mask; \
- + })
- +#define cpumask_of_cpu(cpu) ({ cpumask_t __cpu_mask = CPU_MASK_NONE;\
- + cpu_set(cpu, __cpu_mask); \
- + __cpu_mask; \
- + })
- +#define any_online_cpu(map) \
- +({ \
- + cpumask_t __tmp__; \
- + cpus_and(__tmp__, map, cpu_online_map); \
- + find_first_bit(__tmp__.mask, NR_CPUS); \
- +})
- +
- +
- +/*
- + * um, these need to be usable as static initializers
- + */
- +#define CPU_MASK_ALL { {[0 ... CPU_ARRAY_SIZE-1] = ~0UL} }
- +#define CPU_MASK_NONE { {[0 ... CPU_ARRAY_SIZE-1] = 0UL} }
- +
- +#endif /* __ASM_GENERIC_CPUMASK_ARRAY_H */
- --- linux/include/asm-generic/cpumask_const_reference.h
- +++ linux/include/asm-generic/cpumask_const_reference.h
- @@ -0,0 +1,29 @@
- +#ifndef __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
- +#define __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H
- +
- +struct cpumask_ref {
- + const cpumask_t *val;
- +};
- +
- +typedef const struct cpumask_ref cpumask_const_t;
- +
- +#define mk_cpumask_const(map) ((cpumask_const_t){ &(map) })
- +#define cpu_isset_const(cpu, map) cpu_isset(cpu, *(map).val)
- +
- +#define cpus_and_const(dst,src1,src2) cpus_and(dst,*(src1).val,*(src2).val)
- +#define cpus_or_const(dst,src1,src2) cpus_or(dst,*(src1).val,*(src2).val)
- +
- +#define cpus_equal_const(map1, map2) cpus_equal(*(map1).val, *(map2).val)
- +
- +#define cpus_copy_const(map1, map2) bitmap_copy((map1).mask, (map2).val->mask, NR_CPUS)
- +
- +#define cpus_empty_const(map) cpus_empty(*(map).val)
- +#define cpus_weight_const(map) cpus_weight(*(map).val)
- +#define first_cpu_const(map) first_cpu(*(map).val)
- +#define next_cpu_const(cpu, map) next_cpu(cpu, *(map).val)
- +
- +/* only ever use this for things that are _never_ used on large boxen */
- +#define cpus_coerce_const(map) cpus_coerce(*(map).val)
- +#define any_online_cpu_const(map) any_online_cpu(*(map).val)
- +
- +#endif /* __ASM_GENERIC_CPUMASK_CONST_REFERENCE_H */
- --- linux/include/asm-generic/cpumask_const_value.h
- +++ linux/include/asm-generic/cpumask_const_value.h
- @@ -0,0 +1,21 @@
- +#ifndef __ASM_GENERIC_CPUMASK_CONST_VALUE_H
- +#define __ASM_GENERIC_CPUMASK_CONST_VALUE_H
- +
- +typedef const cpumask_t cpumask_const_t;
- +
- +#define mk_cpumask_const(map) (map)
- +#define cpu_isset_const(cpu, map) cpu_isset(cpu, map)
- +#define cpus_and_const(dst,src1,src2) cpus_and(dst, src1, src2)
- +#define cpus_or_const(dst,src1,src2) cpus_or(dst, src1, src2)
- +#define cpus_equal_const(map1, map2) cpus_equal(map1, map2)
- +#define cpus_empty_const(map) cpus_empty(map)
- +#define cpus_copy_const(map1, map2) do { map1 = (cpumask_t)map2; } while (0)
- +#define cpus_weight_const(map) cpus_weight(map)
- +#define first_cpu_const(map) first_cpu(map)
- +#define next_cpu_const(cpu, map) next_cpu(cpu, map)
- +
- +/* only ever use this for things that are _never_ used on large boxen */
- +#define cpus_coerce_const(map) cpus_coerce(map)
- +#define any_online_cpu_const(map) any_online_cpu(map)
- +
- +#endif /* __ASM_GENERIC_CPUMASK_CONST_VALUE_H */
- --- linux/include/asm-generic/cpumask.h
- +++ linux/include/asm-generic/cpumask.h
- @@ -0,0 +1,40 @@
- +#ifndef __ASM_GENERIC_CPUMASK_H
- +#define __ASM_GENERIC_CPUMASK_H
- +
- +// #include <linux/config.h>
- +#include <linux/kernel.h>
- +#include <linux/threads.h>
- +#include <linux/types.h>
- +#include <linux/bitmap.h>
- +
- +#if NR_CPUS > BITS_PER_LONG && NR_CPUS != 1
- +#define CPU_ARRAY_SIZE BITS_TO_LONGS(NR_CPUS)
- +
- +struct cpumask
- +{
- + unsigned long mask[CPU_ARRAY_SIZE];
- +};
- +
- +typedef struct cpumask cpumask_t;
- +
- +#else
- +typedef unsigned long cpumask_t;
- +#endif
- +
- +#ifdef CONFIG_SMP
- +#if NR_CPUS > BITS_PER_LONG
- +#include <asm-generic/cpumask_array.h>
- +#else
- +#include <asm-generic/cpumask_arith.h>
- +#endif
- +#else
- +#include <asm-generic/cpumask_up.h>
- +#endif
- +
- +#if NR_CPUS <= 4*BITS_PER_LONG
- +#include <asm-generic/cpumask_const_value.h>
- +#else
- +#include <asm-generic/cpumask_const_reference.h>
- +#endif
- +
- +#endif /* __ASM_GENERIC_CPUMASK_H */
- --- linux/include/asm-generic/cpumask_up.h
- +++ linux/include/asm-generic/cpumask_up.h
- @@ -0,0 +1,59 @@
- +#ifndef __ASM_GENERIC_CPUMASK_UP_H
- +#define __ASM_GENERIC_CPUMASK_UP_H
- +
- +#define cpus_coerce(map) (map)
- +
- +#define cpu_set(cpu, map) do { (void)(cpu); cpus_coerce(map) = 1UL; } while (0)
- +#define cpu_clear(cpu, map) do { (void)(cpu); cpus_coerce(map) = 0UL; } while (0)
- +#define cpu_isset(cpu, map) ((void)(cpu), cpus_coerce(map) != 0UL)
- +#define cpu_test_and_set(cpu, map) ((void)(cpu), test_and_set_bit(0, &(map)))
- +
- +#define cpus_and(dst, src1, src2) \
- + do { \
- + if (cpus_coerce(src1) && cpus_coerce(src2)) \
- + cpus_coerce(dst) = 1UL; \
- + else \
- + cpus_coerce(dst) = 0UL; \
- + } while (0)
- +
- +#define cpus_or(dst, src1, src2) \
- + do { \
- + if (cpus_coerce(src1) || cpus_coerce(src2)) \
- + cpus_coerce(dst) = 1UL; \
- + else \
- + cpus_coerce(dst) = 0UL; \
- + } while (0)
- +
- +#define cpus_clear(map) do { cpus_coerce(map) = 0UL; } while (0)
- +
- +#define cpus_complement(map) \
- + do { \
- + cpus_coerce(map) = !cpus_coerce(map); \
- + } while (0)
- +
- +#define cpus_equal(map1, map2) (cpus_coerce(map1) == cpus_coerce(map2))
- +#define cpus_empty(map) (cpus_coerce(map) == 0UL)
- +#define cpus_addr(map) (&(map))
- +#define cpus_weight(map) (cpus_coerce(map) ? 1UL : 0UL)
- +#define cpus_shift_right(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
- +#define cpus_shift_left(d, s, n) do { cpus_coerce(d) = 0UL; } while (0)
- +#define first_cpu(map) (cpus_coerce(map) ? 0 : 1)
- +#define next_cpu(cpu, map) 1
- +
- +/* only ever use this for things that are _never_ used on large boxen */
- +#define cpus_promote(map) \
- + ({ \
- + cpumask_t __tmp__; \
- + cpus_coerce(__tmp__) = map; \
- + __tmp__; \
- + })
- +#define cpumask_of_cpu(cpu) ((void)(cpu), cpus_promote(1))
- +#define any_online_cpu(map) (cpus_coerce(map) ? 0 : 1)
- +
- +/*
- + * um, these need to be usable as static initializers
- + */
- +#define CPU_MASK_ALL 1UL
- +#define CPU_MASK_NONE 0UL
- +
- +#endif /* __ASM_GENERIC_CPUMASK_UP_H */
- --- linux/include/asm-generic/cputime.h
- +++ linux/include/asm-generic/cputime.h
- @@ -0,0 +1,64 @@
- +#ifndef _ASM_GENERIC_CPUTIME_H
- +#define _ASM_GENERIC_CPUTIME_H
- +
- +#include <linux/time.h>
- +#include <linux/jiffies.h>
- +
- +typedef unsigned long cputime_t;
- +
- +#define cputime_zero (0UL)
- +#define cputime_max ((~0UL >> 1) - 1)
- +#define cputime_add(__a, __b) ((__a) + (__b))
- +#define cputime_sub(__a, __b) ((__a) - (__b))
- +#define cputime_eq(__a, __b) ((__a) == (__b))
- +#define cputime_gt(__a, __b) ((__a) > (__b))
- +#define cputime_ge(__a, __b) ((__a) >= (__b))
- +#define cputime_lt(__a, __b) ((__a) < (__b))
- +#define cputime_le(__a, __b) ((__a) <= (__b))
- +#define cputime_to_jiffies(__ct) (__ct)
- +#define jiffies_to_cputime(__hz) (__hz)
- +
- +typedef u64 cputime64_t;
- +
- +#define cputime64_zero (0ULL)
- +#define cputime64_add(__a, __b) ((__a) + (__b))
- +#define cputime64_to_jiffies64(__ct) (__ct)
- +#define cputime_to_cputime64(__ct) ((u64) __ct)
- +
- +
- +/*
- + * Convert cputime to milliseconds and back.
- + */
- +#define cputime_to_msecs(__ct) jiffies_to_msecs(__ct)
- +#define msecs_to_cputime(__msecs) msecs_to_jiffies(__msecs)
- +
- +/*
- + * Convert cputime to seconds and back.
- + */
- +#define cputime_to_secs(jif) ((jif) / HZ)
- +#define secs_to_cputime(sec) ((sec) * HZ)
- +
- +/*
- + * Convert cputime to timespec and back.
- + */
- +#define timespec_to_cputime(__val) timespec_to_jiffies(__val)
- +#define cputime_to_timespec(__ct,__val) jiffies_to_timespec(__ct,__val)
- +
- +/*
- + * Convert cputime to timeval and back.
- + */
- +#define timeval_to_cputime(__val) timeval_to_jiffies(__val)
- +#define cputime_to_timeval(__ct,__val) jiffies_to_timeval(__ct,__val)
- +
- +/*
- + * Convert cputime to clock and back.
- + */
- +#define cputime_to_clock_t(__ct) jiffies_to_clock_t(__ct)
- +#define clock_t_to_cputime(__x) clock_t_to_jiffies(__x)
- +
- +/*
- + * Convert cputime64 to clock.
- + */
- +#define cputime64_to_clock_t(__ct) jiffies_64_to_clock_t(__ct)
- +
- +#endif
- --- linux/include/asm-generic/div64.h
- +++ linux/include/asm-generic/div64.h
- @@ -0,0 +1,58 @@
- +#ifndef _ASM_GENERIC_DIV64_H
- +#define _ASM_GENERIC_DIV64_H
- +/*
- + * Copyright (C) 2003 Bernardo Innocenti <bernie@develer.com>
- + * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h
- + *
- + * The semantics of do_div() are:
- + *
- + * uint32_t do_div(uint64_t *n, uint32_t base)
- + * {
- + * uint32_t remainder = *n % base;
- + * *n = *n / base;
- + * return remainder;
- + * }
- + *
- + * NOTE: macro parameter n is evaluated multiple times,
- + * beware of side effects!
- + */
- +
- +#include <linux/types.h>
- +#include <linux/compiler.h>
- +
- +#if BITS_PER_LONG == 64
- +
- +# define do_div(n,base) ({ \
- + uint32_t __base = (base); \
- + uint32_t __rem; \
- + __rem = ((uint64_t)(n)) % __base; \
- + (n) = ((uint64_t)(n)) / __base; \
- + __rem; \
- + })
- +
- +#elif BITS_PER_LONG == 32
- +
- +extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor);
- +
- +/* The unnecessary pointer compare is there
- + * to check for type safety (n must be 64bit)
- + */
- +# define do_div(n,base) ({ \
- + uint32_t __base = (base); \
- + uint32_t __rem; \
- + (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \
- + if (likely(((n) >> 32) == 0)) { \
- + __rem = (uint32_t)(n) % __base; \
- + (n) = (uint32_t)(n) / __base; \
- + } else \
- + __rem = __div64_32(&(n), __base); \
- + __rem; \
- + })
- +
- +#else /* BITS_PER_LONG == ?? */
- +
- +# error do_div() does not yet support the C64
- +
- +#endif /* BITS_PER_LONG */
- +
- +#endif /* _ASM_GENERIC_DIV64_H */
- --- linux/include/asm-generic/dma-mapping-broken.h
- +++ linux/include/asm-generic/dma-mapping-broken.h
- @@ -0,0 +1,22 @@
- +#ifndef _ASM_GENERIC_DMA_MAPPING_H
- +#define _ASM_GENERIC_DMA_MAPPING_H
- +
- +/* This is used for archs that do not support DMA */
- +
- +
- +static inline void *
- +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
- + int flag)
- +{
- + BUG();
- + return NULL;
- +}
- +
- +static inline void
- +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
- + dma_addr_t dma_handle)
- +{
- + BUG();
- +}
- +
- +#endif /* _ASM_GENERIC_DMA_MAPPING_H */
- --- linux/include/asm-generic/dma-mapping.h
- +++ linux/include/asm-generic/dma-mapping.h
- @@ -0,0 +1,309 @@
- +/* Copyright (C) 2002 by James.Bottomley@HansenPartnership.com
- + *
- + * Implements the generic device dma API via the existing pci_ one
- + * for unconverted architectures
- + */
- +
- +#ifndef _ASM_GENERIC_DMA_MAPPING_H
- +#define _ASM_GENERIC_DMA_MAPPING_H
- +
- +// #include <linux/config.h>
- +
- +#ifdef CONFIG_PCI
- +
- +/* we implement the API below in terms of the existing PCI one,
- + * so include it */
- +#include <linux/pci.h>
- +/* need struct page definitions */
- +#include <linux/mm.h>
- +
- +static inline int
- +dma_supported(struct device *dev, u64 mask)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + return pci_dma_supported(to_pci_dev(dev), mask);
- +}
- +
- +static inline int
- +dma_set_mask(struct device *dev, u64 dma_mask)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + return pci_set_dma_mask(to_pci_dev(dev), dma_mask);
- +}
- +
- +static inline void *
- +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
- + int flag)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + return pci_alloc_consistent(to_pci_dev(dev), size, dma_handle);
- +}
- +
- +static inline void
- +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
- + dma_addr_t dma_handle)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_free_consistent(to_pci_dev(dev), size, cpu_addr, dma_handle);
- +}
- +
- +static inline dma_addr_t
- +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + return pci_map_single(to_pci_dev(dev), cpu_addr, size, (int)direction);
- +}
- +
- +static inline void
- +dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_unmap_single(to_pci_dev(dev), dma_addr, size, (int)direction);
- +}
- +
- +static inline dma_addr_t
- +dma_map_page(struct device *dev, struct page *page,
- + unsigned long offset, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + return pci_map_page(to_pci_dev(dev), page, offset, size, (int)direction);
- +}
- +
- +static inline void
- +dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_unmap_page(to_pci_dev(dev), dma_address, size, (int)direction);
- +}
- +
- +static inline int
- +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + return pci_map_sg(to_pci_dev(dev), sg, nents, (int)direction);
- +}
- +
- +static inline void
- +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_unmap_sg(to_pci_dev(dev), sg, nhwentries, (int)direction);
- +}
- +
- +static inline void
- +dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_dma_sync_single_for_cpu(to_pci_dev(dev), dma_handle,
- + size, (int)direction);
- +}
- +
- +static inline void
- +dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_dma_sync_single_for_device(to_pci_dev(dev), dma_handle,
- + size, (int)direction);
- +}
- +
- +static inline void
- +dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_dma_sync_sg_for_cpu(to_pci_dev(dev), sg, nelems, (int)direction);
- +}
- +
- +static inline void
- +dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,
- + enum dma_data_direction direction)
- +{
- + BUG_ON(dev->bus != &pci_bus_type);
- +
- + pci_dma_sync_sg_for_device(to_pci_dev(dev), sg, nelems, (int)direction);
- +}
- +
- +static inline int
- +dma_mapping_error(dma_addr_t dma_addr)
- +{
- + return pci_dma_mapping_error(dma_addr);
- +}
- +
- +
- +#else
- +
- +static inline int
- +dma_supported(struct device *dev, u64 mask)
- +{
- + return 0;
- +}
- +
- +static inline int
- +dma_set_mask(struct device *dev, u64 dma_mask)
- +{
- + BUG();
- + return 0;
- +}
- +
- +static inline void *
- +dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,
- + int flag)
- +{
- + BUG();
- + return NULL;
- +}
- +
- +static inline void
- +dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
- + dma_addr_t dma_handle)
- +{
- + BUG();
- +}
- +
- +static inline dma_addr_t
- +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG();
- + return 0;
- +}
- +
- +static inline void
- +dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG();
- +}
- +
- +static inline dma_addr_t
- +dma_map_page(struct device *dev, struct page *page,
- + unsigned long offset, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG();
- + return 0;
- +}
- +
- +static inline void
- +dma_unmap_page(struct device *dev, dma_addr_t dma_address, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG();
- +}
- +
- +static inline int
- +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
- + enum dma_data_direction direction)
- +{
- + BUG();
- + return 0;
- +}
- +
- +static inline void
- +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nhwentries,
- + enum dma_data_direction direction)
- +{
- + BUG();
- +}
- +
- +static inline void
- +dma_sync_single_for_cpu(struct device *dev, dma_addr_t dma_handle, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG();
- +}
- +
- +static inline void
- +dma_sync_single_for_device(struct device *dev, dma_addr_t dma_handle, size_t size,
- + enum dma_data_direction direction)
- +{
- + BUG();
- +}
- +
- +static inline void
- +dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nelems,
- + enum dma_data_direction direction)
- +{
- + BUG();
- +}
- +
- +static inline void
- +dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nelems,
- + enum dma_data_direction direction)
- +{
- + BUG();
- +}
- +
- +static inline int
- +dma_error(dma_addr_t dma_addr)
- +{
- + return 0;
- +}
- +
- +#endif
- +
- +/* Now for the API extensions over the pci_ one */
- +
- +#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
- +#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
- +#define dma_is_consistent(d) (1)
- +
- +static inline int
- +dma_get_cache_alignment(void)
- +{
- + /* no easy way to get cache size on all processors, so return
- + * the maximum possible, to be safe */
- + return (1 << L1_CACHE_SHIFT_MAX);
- +}
- +
- +static inline void
- +dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_handle,
- + unsigned long offset, size_t size,
- + enum dma_data_direction direction)
- +{
- + /* just sync everything, that's all the pci API can do */
- + dma_sync_single_for_cpu(dev, dma_handle, offset+size, direction);
- +}
- +
- +static inline void
- +dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_handle,
- + unsigned long offset, size_t size,
- + enum dma_data_direction direction)
- +{
- + /* just sync everything, that's all the pci API can do */
- + dma_sync_single_for_device(dev, dma_handle, offset+size, direction);
- +}
- +
- +static inline void
- +dma_cache_sync(void *vaddr, size_t size,
- + enum dma_data_direction direction)
- +{
- + /* could define this in terms of the dma_cache ... operations,
- + * but if you get this on a platform, you should convert the platform
- + * to using the generic device DMA API */
- + BUG();
- +}
- +
- +#endif
- +
- --- linux/include/asm-generic/errno-base.h
- +++ linux/include/asm-generic/errno-base.h
- @@ -0,0 +1,39 @@
- +#ifndef _ASM_GENERIC_ERRNO_BASE_H
- +#define _ASM_GENERIC_ERRNO_BASE_H
- +
- +#define EPERM 1 /* Operation not permitted */
- +#define ENOENT 2 /* No such file or directory */
- +#define ESRCH 3 /* No such process */
- +#define EINTR 4 /* Interrupted system call */
- +#define EIO 5 /* I/O error */
- +#define ENXIO 6 /* No such device or address */
- +#define E2BIG 7 /* Argument list too long */
- +#define ENOEXEC 8 /* Exec format error */
- +#define EBADF 9 /* Bad file number */
- +#define ECHILD 10 /* No child processes */
- +#define EAGAIN 11 /* Try again */
- +#define ENOMEM 12 /* Out of memory */
- +#define EACCES 13 /* Permission denied */
- +#define EFAULT 14 /* Bad address */
- +#define ENOTBLK 15 /* Block device required */
- +#define EBUSY 16 /* Device or resource busy */
- +#define EEXIST 17 /* File exists */
- +#define EXDEV 18 /* Cross-device link */
- +#define ENODEV 19 /* No such device */
- +#define ENOTDIR 20 /* Not a directory */
- +#define EISDIR 21 /* Is a directory */
- +#define EINVAL 22 /* Invalid argument */
- +#define ENFILE 23 /* File table overflow */
- +#define EMFILE 24 /* Too many open files */
- +#define ENOTTY 25 /* Not a typewriter */
- +#define ETXTBSY 26 /* Text file busy */
- +#define EFBIG 27 /* File too large */
- +#define ENOSPC 28 /* No space left on device */
- +#define ESPIPE 29 /* Illegal seek */
- +#define EROFS 30 /* Read-only file system */
- +#define EMLINK 31 /* Too many links */
- +#define EPIPE 32 /* Broken pipe */
- +#define EDOM 33 /* Math argument out of domain of func */
- +#define ERANGE 34 /* Math result not representable */
- +
- +#endif
- --- linux/include/asm-generic/errno.h
- +++ linux/include/asm-generic/errno.h
- @@ -0,0 +1,105 @@
- +#ifndef _ASM_GENERIC_ERRNO_H
- +#define _ASM_GENERIC_ERRNO_H
- +
- +#include <asm-generic/errno-base.h>
- +
- +#define EDEADLK 35 /* Resource deadlock would occur */
- +#define ENAMETOOLONG 36 /* File name too long */
- +#define ENOLCK 37 /* No record locks available */
- +#define ENOSYS 38 /* Function not implemented */
- +#define ENOTEMPTY 39 /* Directory not empty */
- +#define ELOOP 40 /* Too many symbolic links encountered */
- +#define EWOULDBLOCK EAGAIN /* Operation would block */
- +#define ENOMSG 42 /* No message of desired type */
- +#define EIDRM 43 /* Identifier removed */
- +#define ECHRNG 44 /* Channel number out of range */
- +#define EL2NSYNC 45 /* Level 2 not synchronized */
- +#define EL3HLT 46 /* Level 3 halted */
- +#define EL3RST 47 /* Level 3 reset */
- +#define ELNRNG 48 /* Link number out of range */
- +#define EUNATCH 49 /* Protocol driver not attached */
- +#define ENOCSI 50 /* No CSI structure available */
- +#define EL2HLT 51 /* Level 2 halted */
- +#define EBADE 52 /* Invalid exchange */
- +#define EBADR 53 /* Invalid request descriptor */
- +#define EXFULL 54 /* Exchange full */
- +#define ENOANO 55 /* No anode */
- +#define EBADRQC 56 /* Invalid request code */
- +#define EBADSLT 57 /* Invalid slot */
- +
- +#define EDEADLOCK EDEADLK
- +
- +#define EBFONT 59 /* Bad font file format */
- +#define ENOSTR 60 /* Device not a stream */
- +#define ENODATA 61 /* No data available */
- +#define ETIME 62 /* Timer expired */
- +#define ENOSR 63 /* Out of streams resources */
- +#define ENONET 64 /* Machine is not on the network */
- +#define ENOPKG 65 /* Package not installed */
- +#define EREMOTE 66 /* Object is remote */
- +#define ENOLINK 67 /* Link has been severed */
- +#define EADV 68 /* Advertise error */
- +#define ESRMNT 69 /* Srmount error */
- +#define ECOMM 70 /* Communication error on send */
- +#define EPROTO 71 /* Protocol error */
- +#define EMULTIHOP 72 /* Multihop attempted */
- +#define EDOTDOT 73 /* RFS specific error */
- +#define EBADMSG 74 /* Not a data message */
- +#define EOVERFLOW 75 /* Value too large for defined data type */
- +#define ENOTUNIQ 76 /* Name not unique on network */
- +#define EBADFD 77 /* File descriptor in bad state */
- +#define EREMCHG 78 /* Remote address changed */
- +#define ELIBACC 79 /* Can not access a needed shared library */
- +#define ELIBBAD 80 /* Accessing a corrupted shared library */
- +#define ELIBSCN 81 /* .lib section in a.out corrupted */
- +#define ELIBMAX 82 /* Attempting to link in too many shared libraries */
- +#define ELIBEXEC 83 /* Cannot exec a shared library directly */
- +#define EILSEQ 84 /* Illegal byte sequence */
- +#define ERESTART 85 /* Interrupted system call should be restarted */
- +#define ESTRPIPE 86 /* Streams pipe error */
- +#define EUSERS 87 /* Too many users */
- +#define ENOTSOCK 88 /* Socket operation on non-socket */
- +#define EDESTADDRREQ 89 /* Destination address required */
- +#define EMSGSIZE 90 /* Message too long */
- +#define EPROTOTYPE 91 /* Protocol wrong type for socket */
- +#define ENOPROTOOPT 92 /* Protocol not available */
- +#define EPROTONOSUPPORT 93 /* Protocol not supported */
- +#define ESOCKTNOSUPPORT 94 /* Socket type not supported */
- +#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */
- +#define EPFNOSUPPORT 96 /* Protocol family not supported */
- +#define EAFNOSUPPORT 97 /* Address family not supported by protocol */
- +#define EADDRINUSE 98 /* Address already in use */
- +#define EADDRNOTAVAIL 99 /* Cannot assign requested address */
- +#define ENETDOWN 100 /* Network is down */
- +#define ENETUNREACH 101 /* Network is unreachable */
- +#define ENETRESET 102 /* Network dropped connection because of reset */
- +#define ECONNABORTED 103 /* Software caused connection abort */
- +#define ECONNRESET 104 /* Connection reset by peer */
- +#define ENOBUFS 105 /* No buffer space available */
- +#define EISCONN 106 /* Transport endpoint is already connected */
- +#define ENOTCONN 107 /* Transport endpoint is not connected */
- +#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */
- +#define ETOOMANYREFS 109 /* Too many references: cannot splice */
- +#define ETIMEDOUT 110 /* Connection timed out */
- +#define ECONNREFUSED 111 /* Connection refused */
- +#define EHOSTDOWN 112 /* Host is down */
- +#define EHOSTUNREACH 113 /* No route to host */
- +#define EALREADY 114 /* Operation already in progress */
- +#define EINPROGRESS 115 /* Operation now in progress */
- +#define ESTALE 116 /* Stale NFS file handle */
- +#define EUCLEAN 117 /* Structure needs cleaning */
- +#define ENOTNAM 118 /* Not a XENIX named type file */
- +#define ENAVAIL 119 /* No XENIX semaphores available */
- +#define EISNAM 120 /* Is a named type file */
- +#define EREMOTEIO 121 /* Remote I/O error */
- +#define EDQUOT 122 /* Quota exceeded */
- +
- +#define ENOMEDIUM 123 /* No medium found */
- +#define EMEDIUMTYPE 124 /* Wrong medium type */
- +#define ECANCELED 125 /* Operation Canceled */
- +#define ENOKEY 126 /* Required key not available */
- +#define EKEYEXPIRED 127 /* Key has expired */
- +#define EKEYREVOKED 128 /* Key has been revoked */
- +#define EKEYREJECTED 129 /* Key was rejected by service */
- +
- +#endif
- --- linux/include/asm-generic/hdreg.h
- +++ linux/include/asm-generic/hdreg.h
- @@ -0,0 +1,8 @@
- +#warning <asm/hdreg.h> is obsolete, please do not use it
- +
- +#ifndef __ASM_GENERIC_HDREG_H
- +#define __ASM_GENERIC_HDREG_H
- +
- +typedef unsigned long ide_ioreg_t;
- +
- +#endif /* __ASM_GENERIC_HDREG_H */
- --- linux/include/asm-generic/ide_iops.h
- +++ linux/include/asm-generic/ide_iops.h
- @@ -0,0 +1,38 @@
- +/* Generic I/O and MEMIO string operations. */
- +
- +#define __ide_insw insw
- +#define __ide_insl insl
- +#define __ide_outsw outsw
- +#define __ide_outsl outsl
- +
- +static __inline__ void __ide_mm_insw(void __iomem *port, void *addr, u32 count)
- +{
- + while (count--) {
- + *(u16 *)addr = readw(port);
- + addr += 2;
- + }
- +}
- +
- +static __inline__ void __ide_mm_insl(void __iomem *port, void *addr, u32 count)
- +{
- + while (count--) {
- + *(u32 *)addr = readl(port);
- + addr += 4;
- + }
- +}
- +
- +static __inline__ void __ide_mm_outsw(void __iomem *port, void *addr, u32 count)
- +{
- + while (count--) {
- + writew(*(u16 *)addr, port);
- + addr += 2;
- + }
- +}
- +
- +static __inline__ void __ide_mm_outsl(void __iomem * port, void *addr, u32 count)
- +{
- + while (count--) {
- + writel(*(u32 *)addr, port);
- + addr += 4;
- + }
- +}
- --- linux/include/asm-generic/iomap.h
- +++ linux/include/asm-generic/iomap.h
- @@ -0,0 +1,63 @@
- +#ifndef __GENERIC_IO_H
- +#define __GENERIC_IO_H
- +
- +#include <linux/linkage.h>
- +
- +/*
- + * These are the "generic" interfaces for doing new-style
- + * memory-mapped or PIO accesses. Architectures may do
- + * their own arch-optimized versions, these just act as
- + * wrappers around the old-style IO register access functions:
- + * read[bwl]/write[bwl]/in[bwl]/out[bwl]
- + *
- + * Don't include this directly, include it from <asm/io.h>.
- + */
- +
- +/*
- + * Read/write from/to an (offsettable) iomem cookie. It might be a PIO
- + * access or a MMIO access, these functions don't care. The info is
- + * encoded in the hardware mapping set up by the mapping functions
- + * (or the cookie itself, depending on implementation and hw).
- + *
- + * The generic routines just encode the PIO/MMIO as part of the
- + * cookie, and coldly assume that the MMIO IO mappings are not
- + * in the low address range. Architectures for which this is not
- + * true can't use this generic implementation.
- + */
- +extern unsigned int fastcall ioread8(void __iomem *);
- +extern unsigned int fastcall ioread16(void __iomem *);
- +extern unsigned int fastcall ioread32(void __iomem *);
- +
- +extern void fastcall iowrite8(u8, void __iomem *);
- +extern void fastcall iowrite16(u16, void __iomem *);
- +extern void fastcall iowrite32(u32, void __iomem *);
- +
- +/*
- + * "string" versions of the above. Note that they
- + * use native byte ordering for the accesses (on
- + * the assumption that IO and memory agree on a
- + * byte order, and CPU byteorder is irrelevant).
- + *
- + * They do _not_ update the port address. If you
- + * want MMIO that copies stuff laid out in MMIO
- + * memory across multiple ports, use "memcpy_toio()"
- + * and friends.
- + */
- +extern void fastcall ioread8_rep(void __iomem *port, void *buf, unsigned long count);
- +extern void fastcall ioread16_rep(void __iomem *port, void *buf, unsigned long count);
- +extern void fastcall ioread32_rep(void __iomem *port, void *buf, unsigned long count);
- +
- +extern void fastcall iowrite8_rep(void __iomem *port, const void *buf, unsigned long count);
- +extern void fastcall iowrite16_rep(void __iomem *port, const void *buf, unsigned long count);
- +extern void fastcall iowrite32_rep(void __iomem *port, const void *buf, unsigned long count);
- +
- +/* Create a virtual mapping cookie for an IO port range */
- +extern void __iomem *ioport_map(unsigned long port, unsigned int nr);
- +extern void ioport_unmap(void __iomem *);
- +
- +/* Create a virtual mapping cookie for a PCI BAR (memory or IO) */
- +struct pci_dev;
- +extern void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max);
- +extern void pci_iounmap(struct pci_dev *dev, void __iomem *);
- +
- +#endif
- --- linux/include/asm-generic/local.h
- +++ linux/include/asm-generic/local.h
- @@ -0,0 +1,118 @@
- +#ifndef _ASM_GENERIC_LOCAL_H
- +#define _ASM_GENERIC_LOCAL_H
- +
- +// #include <linux/config.h>
- +#include <linux/percpu.h>
- +#include <linux/hardirq.h>
- +#include <asm/types.h>
- +
- +/* An unsigned long type for operations which are atomic for a single
- + * CPU. Usually used in combination with per-cpu variables. */
- +
- +#if BITS_PER_LONG == 32
- +/* Implement in terms of atomics. */
- +
- +/* Don't use typedef: don't want them to be mixed with atomic_t's. */
- +typedef struct
- +{
- + atomic_t a;
- +} local_t;
- +
- +#define LOCAL_INIT(i) { ATOMIC_INIT(i) }
- +
- +#define local_read(l) ((unsigned long)atomic_read(&(l)->a))
- +#define local_set(l,i) atomic_set((&(l)->a),(i))
- +#define local_inc(l) atomic_inc(&(l)->a)
- +#define local_dec(l) atomic_dec(&(l)->a)
- +#define local_add(i,l) atomic_add((i),(&(l)->a))
- +#define local_sub(i,l) atomic_sub((i),(&(l)->a))
- +
- +/* Non-atomic variants, ie. preemption disabled and won't be touched
- + * in interrupt, etc. Some archs can optimize this case well. */
- +#define __local_inc(l) local_set((l), local_read(l) + 1)
- +#define __local_dec(l) local_set((l), local_read(l) - 1)
- +#define __local_add(i,l) local_set((l), local_read(l) + (i))
- +#define __local_sub(i,l) local_set((l), local_read(l) - (i))
- +
- +#else /* ... can't use atomics. */
- +/* Implement in terms of three variables.
- + Another option would be to use local_irq_save/restore. */
- +
- +typedef struct
- +{
- + /* 0 = in hardirq, 1 = in softirq, 2 = usermode. */
- + unsigned long v[3];
- +} local_t;
- +
- +#define _LOCAL_VAR(l) ((l)->v[!in_interrupt() + !in_irq()])
- +
- +#define LOCAL_INIT(i) { { (i), 0, 0 } }
- +
- +static inline unsigned long local_read(local_t *l)
- +{
- + return l->v[0] + l->v[1] + l->v[2];
- +}
- +
- +static inline void local_set(local_t *l, unsigned long v)
- +{
- + l->v[0] = v;
- + l->v[1] = l->v[2] = 0;
- +}
- +
- +static inline void local_inc(local_t *l)
- +{
- + preempt_disable();
- + _LOCAL_VAR(l)++;
- + preempt_enable();
- +}
- +
- +static inline void local_dec(local_t *l)
- +{
- + preempt_disable();
- + _LOCAL_VAR(l)--;
- + preempt_enable();
- +}
- +
- +static inline void local_add(unsigned long v, local_t *l)
- +{
- + preempt_disable();
- + _LOCAL_VAR(l) += v;
- + preempt_enable();
- +}
- +
- +static inline void local_sub(unsigned long v, local_t *l)
- +{
- + preempt_disable();
- + _LOCAL_VAR(l) -= v;
- + preempt_enable();
- +}
- +
- +/* Non-atomic variants, ie. preemption disabled and won't be touched
- + * in interrupt, etc. Some archs can optimize this case well. */
- +#define __local_inc(l) ((l)->v[0]++)
- +#define __local_dec(l) ((l)->v[0]--)
- +#define __local_add(i,l) ((l)->v[0] += (i))
- +#define __local_sub(i,l) ((l)->v[0] -= (i))
- +
- +#endif /* Non-atomic implementation */
- +
- +/* Use these for per-cpu local_t variables: on some archs they are
- + * much more efficient than these naive implementations. Note they take
- + * a variable (eg. mystruct.foo), not an address.
- + */
- +#define cpu_local_read(v) local_read(&__get_cpu_var(v))
- +#define cpu_local_set(v, i) local_set(&__get_cpu_var(v), (i))
- +#define cpu_local_inc(v) local_inc(&__get_cpu_var(v))
- +#define cpu_local_dec(v) local_dec(&__get_cpu_var(v))
- +#define cpu_local_add(i, v) local_add((i), &__get_cpu_var(v))
- +#define cpu_local_sub(i, v) local_sub((i), &__get_cpu_var(v))
- +
- +/* Non-atomic increments, ie. preemption disabled and won't be touched
- + * in interrupt, etc. Some archs can optimize this case well.
- + */
- +#define __cpu_local_inc(v) __local_inc(&__get_cpu_var(v))
- +#define __cpu_local_dec(v) __local_dec(&__get_cpu_var(v))
- +#define __cpu_local_add(i, v) __local_add((i), &__get_cpu_var(v))
- +#define __cpu_local_sub(i, v) __local_sub((i), &__get_cpu_var(v))
- +
- +#endif /* _ASM_GENERIC_LOCAL_H */
- --- linux/include/asm-generic/pci-dma-compat.h
- +++ linux/include/asm-generic/pci-dma-compat.h
- @@ -0,0 +1,107 @@
- +/* include this file if the platform implements the dma_ DMA Mapping API
- + * and wants to provide the pci_ DMA Mapping API in terms of it */
- +
- +#ifndef _ASM_GENERIC_PCI_DMA_COMPAT_H
- +#define _ASM_GENERIC_PCI_DMA_COMPAT_H
- +
- +#include <linux/dma-mapping.h>
- +
- +/* note pci_set_dma_mask isn't here, since it's a public function
- + * exported from drivers/pci, use dma_supported instead */
- +
- +static inline int
- +pci_dma_supported(struct pci_dev *hwdev, u64 mask)
- +{
- + return dma_supported(hwdev == NULL ? NULL : &hwdev->dev, mask);
- +}
- +
- +static inline void *
- +pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
- + dma_addr_t *dma_handle)
- +{
- + return dma_alloc_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, dma_handle, GFP_ATOMIC);
- +}
- +
- +static inline void
- +pci_free_consistent(struct pci_dev *hwdev, size_t size,
- + void *vaddr, dma_addr_t dma_handle)
- +{
- + dma_free_coherent(hwdev == NULL ? NULL : &hwdev->dev, size, vaddr, dma_handle);
- +}
- +
- +static inline dma_addr_t
- +pci_map_single(struct pci_dev *hwdev, void *ptr, size_t size, int direction)
- +{
- + return dma_map_single(hwdev == NULL ? NULL : &hwdev->dev, ptr, size, (enum dma_data_direction)direction);
- +}
- +
- +static inline void
- +pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
- + size_t size, int direction)
- +{
- + dma_unmap_single(hwdev == NULL ? NULL : &hwdev->dev, dma_addr, size, (enum dma_data_direction)direction);
- +}
- +
- +static inline dma_addr_t
- +pci_map_page(struct pci_dev *hwdev, struct page *page,
- + unsigned long offset, size_t size, int direction)
- +{
- + return dma_map_page(hwdev == NULL ? NULL : &hwdev->dev, page, offset, size, (enum dma_data_direction)direction);
- +}
- +
- +static inline void
- +pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
- + size_t size, int direction)
- +{
- + dma_unmap_page(hwdev == NULL ? NULL : &hwdev->dev, dma_address, size, (enum dma_data_direction)direction);
- +}
- +
- +static inline int
- +pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nents, int direction)
- +{
- + return dma_map_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
- +}
- +
- +static inline void
- +pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nents, int direction)
- +{
- + dma_unmap_sg(hwdev == NULL ? NULL : &hwdev->dev, sg, nents, (enum dma_data_direction)direction);
- +}
- +
- +static inline void
- +pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle,
- + size_t size, int direction)
- +{
- + dma_sync_single_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
- +}
- +
- +static inline void
- +pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle,
- + size_t size, int direction)
- +{
- + dma_sync_single_for_device(hwdev == NULL ? NULL : &hwdev->dev, dma_handle, size, (enum dma_data_direction)direction);
- +}
- +
- +static inline void
- +pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nelems, int direction)
- +{
- + dma_sync_sg_for_cpu(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
- +}
- +
- +static inline void
- +pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nelems, int direction)
- +{
- + dma_sync_sg_for_device(hwdev == NULL ? NULL : &hwdev->dev, sg, nelems, (enum dma_data_direction)direction);
- +}
- +
- +static inline int
- +pci_dma_mapping_error(dma_addr_t dma_addr)
- +{
- + return dma_mapping_error(dma_addr);
- +}
- +
- +#endif
- --- linux/include/asm-generic/pci.h
- +++ linux/include/asm-generic/pci.h
- @@ -0,0 +1,34 @@
- +/*
- + * linux/include/asm-generic/pci.h
- + *
- + * Copyright (C) 2003 Russell King
- + */
- +#ifndef _ASM_GENERIC_PCI_H
- +#define _ASM_GENERIC_PCI_H
- +
- +/**
- + * pcibios_resource_to_bus - convert resource to PCI bus address
- + * @dev: device which owns this resource
- + * @region: converted bus-centric region (start,end)
- + * @res: resource to convert
- + *
- + * Convert a resource to a PCI device bus address or bus window.
- + */
- +static inline void
- +pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
- + struct resource *res)
- +{
- + region->start = res->start;
- + region->end = res->end;
- +}
- +
- +#define pcibios_scan_all_fns(a, b) 0
- +
- +#ifndef HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ
- +static inline int pci_get_legacy_ide_irq(struct pci_dev *dev, int channel)
- +{
- + return channel ? 15 : 14;
- +}
- +#endif /* HAVE_ARCH_PCI_GET_LEGACY_IDE_IRQ */
- +
- +#endif
- --- linux/include/asm-generic/percpu.h
- +++ linux/include/asm-generic/percpu.h
- @@ -0,0 +1,42 @@
- +#ifndef _ASM_GENERIC_PERCPU_H_
- +#define _ASM_GENERIC_PERCPU_H_
- +#include <linux/compiler.h>
- +
- +#define __GENERIC_PER_CPU
- +#ifdef CONFIG_SMP
- +
- +extern unsigned long __per_cpu_offset[NR_CPUS];
- +
- +/* Separate out the type, so (int[3], foo) works. */
- +#define DEFINE_PER_CPU(type, name) \
- + __attribute__((__section__(".data.percpu"))) __typeof__(type) per_cpu__##name
- +
- +/* var is in discarded region: offset to particular copy we want */
- +#define per_cpu(var, cpu) (*RELOC_HIDE(&per_cpu__##var, __per_cpu_offset[cpu]))
- +#define __get_cpu_var(var) per_cpu(var, smp_processor_id())
- +
- +/* A macro to avoid #include hell... */
- +#define percpu_modcopy(pcpudst, src, size) \
- +do { \
- + unsigned int __i; \
- + for (__i = 0; __i < NR_CPUS; __i++) \
- + if (cpu_possible(__i)) \
- + memcpy((pcpudst)+__per_cpu_offset[__i], \
- + (src), (size)); \
- +} while (0)
- +#else /* ! SMP */
- +
- +#define DEFINE_PER_CPU(type, name) \
- + __typeof__(type) per_cpu__##name
- +
- +#define per_cpu(var, cpu) (*((void)cpu, &per_cpu__##var))
- +#define __get_cpu_var(var) per_cpu__##var
- +
- +#endif /* SMP */
- +
- +#define DECLARE_PER_CPU(type, name) extern __typeof__(type) per_cpu__##name
- +
- +#define EXPORT_PER_CPU_SYMBOL(var) EXPORT_SYMBOL(per_cpu__##var)
- +#define EXPORT_PER_CPU_SYMBOL_GPL(var) EXPORT_SYMBOL_GPL(per_cpu__##var)
- +
- +#endif /* _ASM_GENERIC_PERCPU_H_ */
- --- linux/include/asm-generic/pgtable.h
- +++ linux/include/asm-generic/pgtable.h
- @@ -0,0 +1,137 @@
- +#ifndef _ASM_GENERIC_PGTABLE_H
- +#define _ASM_GENERIC_PGTABLE_H
- +
- +#ifndef __HAVE_ARCH_PTEP_ESTABLISH
- +/*
- + * Establish a new mapping:
- + * - flush the old one
- + * - update the page tables
- + * - inform the TLB about the new one
- + *
- + * We hold the mm semaphore for reading and vma->vm_mm->page_table_lock.
- + *
- + * Note: the old pte is known to not be writable, so we don't need to
- + * worry about dirty bits etc getting lost.
- + */
- +#ifndef __HAVE_ARCH_SET_PTE_ATOMIC
- +#define ptep_establish(__vma, __address, __ptep, __entry) \
- +do { \
- + set_pte(__ptep, __entry); \
- + flush_tlb_page(__vma, __address); \
- +} while (0)
- +#else /* __HAVE_ARCH_SET_PTE_ATOMIC */
- +#define ptep_establish(__vma, __address, __ptep, __entry) \
- +do { \
- + set_pte_atomic(__ptep, __entry); \
- + flush_tlb_page(__vma, __address); \
- +} while (0)
- +#endif /* __HAVE_ARCH_SET_PTE_ATOMIC */
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS
- +/*
- + * Largely same as above, but only sets the access flags (dirty,
- + * accessed, and writable). Furthermore, we know it always gets set
- + * to a "more permissive" setting, which allows most architectures
- + * to optimize this.
- + */
- +#define ptep_set_access_flags(__vma, __address, __ptep, __entry, __dirty) \
- +do { \
- + set_pte(__ptep, __entry); \
- + flush_tlb_page(__vma, __address); \
- +} while (0)
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG
- +static inline int ptep_test_and_clear_young(pte_t *ptep)
- +{
- + pte_t pte = *ptep;
- + if (!pte_young(pte))
- + return 0;
- + set_pte(ptep, pte_mkold(pte));
- + return 1;
- +}
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH
- +#define ptep_clear_flush_young(__vma, __address, __ptep) \
- +({ \
- + int __young = ptep_test_and_clear_young(__ptep); \
- + if (__young) \
- + flush_tlb_page(__vma, __address); \
- + __young; \
- +})
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY
- +static inline int ptep_test_and_clear_dirty(pte_t *ptep)
- +{
- + pte_t pte = *ptep;
- + if (!pte_dirty(pte))
- + return 0;
- + set_pte(ptep, pte_mkclean(pte));
- + return 1;
- +}
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_CLEAR_DIRTY_FLUSH
- +#define ptep_clear_flush_dirty(__vma, __address, __ptep) \
- +({ \
- + int __dirty = ptep_test_and_clear_dirty(__ptep); \
- + if (__dirty) \
- + flush_tlb_page(__vma, __address); \
- + __dirty; \
- +})
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR
- +static inline pte_t ptep_get_and_clear(pte_t *ptep)
- +{
- + pte_t pte = *ptep;
- + pte_clear(ptep);
- + return pte;
- +}
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_CLEAR_FLUSH
- +#define ptep_clear_flush(__vma, __address, __ptep) \
- +({ \
- + pte_t __pte = ptep_get_and_clear(__ptep); \
- + flush_tlb_page(__vma, __address); \
- + __pte; \
- +})
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_SET_WRPROTECT
- +static inline void ptep_set_wrprotect(pte_t *ptep)
- +{
- + pte_t old_pte = *ptep;
- + set_pte(ptep, pte_wrprotect(old_pte));
- +}
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTEP_MKDIRTY
- +static inline void ptep_mkdirty(pte_t *ptep)
- +{
- + pte_t old_pte = *ptep;
- + set_pte(ptep, pte_mkdirty(old_pte));
- +}
- +#endif
- +
- +#ifndef __HAVE_ARCH_PTE_SAME
- +#define pte_same(A,B) (pte_val(A) == pte_val(B))
- +#endif
- +
- +#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_DIRTY
- +#define page_test_and_clear_dirty(page) (0)
- +#endif
- +
- +#ifndef __HAVE_ARCH_PAGE_TEST_AND_CLEAR_YOUNG
- +#define page_test_and_clear_young(page) (0)
- +#endif
- +
- +#ifndef __HAVE_ARCH_PGD_OFFSET_GATE
- +#define pgd_offset_gate(mm, addr) pgd_offset(mm, addr)
- +#endif
- +
- +#endif /* _ASM_GENERIC_PGTABLE_H */
- --- linux/include/asm-generic/pgtable-nopmd.h
- +++ linux/include/asm-generic/pgtable-nopmd.h
- @@ -0,0 +1,60 @@
- +#ifndef _PGTABLE_NOPMD_H
- +#define _PGTABLE_NOPMD_H
- +
- +#ifndef __ASSEMBLY__
- +
- +#include <asm-generic/pgtable-nopud.h>
- +
- +/*
- + * Having the pmd type consist of a pud gets the size right, and allows
- + * us to conceptually access the pud entry that this pmd is folded into
- + * without casting.
- + */
- +typedef struct { pud_t pud; } pmd_t;
- +
- +#define PMD_SHIFT PUD_SHIFT
- +#define PTRS_PER_PMD 1
- +#define PMD_SIZE (1UL << PMD_SHIFT)
- +#define PMD_MASK (~(PMD_SIZE-1))
- +
- +/*
- + * The "pud_xxx()" functions here are trivial for a folded two-level
- + * setup: the pmd is never bad, and a pmd always exists (as it's folded
- + * into the pud entry)
- + */
- +static inline int pud_none(pud_t pud) { return 0; }
- +static inline int pud_bad(pud_t pud) { return 0; }
- +static inline int pud_present(pud_t pud) { return 1; }
- +static inline void pud_clear(pud_t *pud) { }
- +#define pmd_ERROR(pmd) (pud_ERROR((pmd).pud))
- +
- +#define pud_populate(mm, pmd, pte) do { } while (0)
- +
- +/*
- + * (pmds are folded into puds so this doesn't get actually called,
- + * but the define is needed for a generic inline function.)
- + */
- +#define set_pud(pudptr, pudval) set_pmd((pmd_t *)(pudptr), (pmd_t) { pudval })
- +
- +static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
- +{
- + return (pmd_t *)pud;
- +}
- +
- +#define pmd_val(x) (pud_val((x).pud))
- +#define __pmd(x) ((pmd_t) { __pud(x) } )
- +
- +#define pud_page(pud) (pmd_page((pmd_t){ pud }))
- +#define pud_page_kernel(pud) (pmd_page_kernel((pmd_t){ pud }))
- +
- +/*
- + * allocating and freeing a pmd is trivial: the 1-entry pmd is
- + * inside the pud, so has no extra memory associated with it.
- + */
- +#define pmd_alloc_one(mm, address) NULL
- +#define pmd_free(x) do { } while (0)
- +#define __pmd_free_tlb(tlb, x) do { } while (0)
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* _PGTABLE_NOPMD_H */
- --- linux/include/asm-generic/pgtable-nopud.h
- +++ linux/include/asm-generic/pgtable-nopud.h
- @@ -0,0 +1,56 @@
- +#ifndef _PGTABLE_NOPUD_H
- +#define _PGTABLE_NOPUD_H
- +
- +#ifndef __ASSEMBLY__
- +
- +/*
- + * Having the pud type consist of a pgd gets the size right, and allows
- + * us to conceptually access the pgd entry that this pud is folded into
- + * without casting.
- + */
- +typedef struct { pgd_t pgd; } pud_t;
- +
- +#define PUD_SHIFT PGDIR_SHIFT
- +#define PTRS_PER_PUD 1
- +#define PUD_SIZE (1UL << PUD_SHIFT)
- +#define PUD_MASK (~(PUD_SIZE-1))
- +
- +/*
- + * The "pgd_xxx()" functions here are trivial for a folded two-level
- + * setup: the pud is never bad, and a pud always exists (as it's folded
- + * into the pgd entry)
- + */
- +static inline int pgd_none(pgd_t pgd) { return 0; }
- +static inline int pgd_bad(pgd_t pgd) { return 0; }
- +static inline int pgd_present(pgd_t pgd) { return 1; }
- +static inline void pgd_clear(pgd_t *pgd) { }
- +#define pud_ERROR(pud) (pgd_ERROR((pud).pgd))
- +
- +#define pgd_populate(mm, pgd, pud) do { } while (0)
- +/*
- + * (puds are folded into pgds so this doesn't get actually called,
- + * but the define is needed for a generic inline function.)
- + */
- +#define set_pgd(pgdptr, pgdval) set_pud((pud_t *)(pgdptr), (pud_t) { pgdval })
- +
- +static inline pud_t * pud_offset(pgd_t * pgd, unsigned long address)
- +{
- + return (pud_t *)pgd;
- +}
- +
- +#define pud_val(x) (pgd_val((x).pgd))
- +#define __pud(x) ((pud_t) { __pgd(x) } )
- +
- +#define pgd_page(pgd) (pud_page((pud_t){ pgd }))
- +#define pgd_page_kernel(pgd) (pud_page_kernel((pud_t){ pgd }))
- +
- +/*
- + * allocating and freeing a pud is trivial: the 1-entry pud is
- + * inside the pgd, so has no extra memory associated with it.
- + */
- +#define pud_alloc_one(mm, address) NULL
- +#define pud_free(x) do { } while (0)
- +#define __pud_free_tlb(tlb, x) do { } while (0)
- +
- +#endif /* __ASSEMBLY__ */
- +#endif /* _PGTABLE_NOPUD_H */
- --- linux/include/asm-generic/resource.h
- +++ linux/include/asm-generic/resource.h
- @@ -0,0 +1,60 @@
- +#ifndef _ASM_GENERIC_RESOURCE_H
- +#define _ASM_GENERIC_RESOURCE_H
- +
- +/*
- + * Resource limits
- + */
- +
- +/* Allow arch to control resource order */
- +#ifndef __ARCH_RLIMIT_ORDER
- +#define RLIMIT_CPU 0 /* CPU time in ms */
- +#define RLIMIT_FSIZE 1 /* Maximum filesize */
- +#define RLIMIT_DATA 2 /* max data size */
- +#define RLIMIT_STACK 3 /* max stack size */
- +#define RLIMIT_CORE 4 /* max core file size */
- +#define RLIMIT_RSS 5 /* max resident set size */
- +#define RLIMIT_NPROC 6 /* max number of processes */
- +#define RLIMIT_NOFILE 7 /* max number of open files */
- +#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */
- +#define RLIMIT_AS 9 /* address space limit */
- +#define RLIMIT_LOCKS 10 /* maximum file locks held */
- +#define RLIMIT_SIGPENDING 11 /* max number of pending signals */
- +#define RLIMIT_MSGQUEUE 12 /* maximum bytes in POSIX mqueues */
- +
- +#define RLIM_NLIMITS 13
- +#endif
- +
- +/*
- + * SuS says limits have to be unsigned.
- + * Which makes a ton more sense anyway.
- + */
- +#ifndef RLIM_INFINITY
- +#define RLIM_INFINITY (~0UL)
- +#endif
- +
- +#ifndef _STK_LIM_MAX
- +#define _STK_LIM_MAX RLIM_INFINITY
- +#endif
- +
- +#ifdef __KERNEL__
- +
- +#define INIT_RLIMITS \
- +{ \
- + [RLIMIT_CPU] = { RLIM_INFINITY, RLIM_INFINITY }, \
- + [RLIMIT_FSIZE] = { RLIM_INFINITY, RLIM_INFINITY }, \
- + [RLIMIT_DATA] = { RLIM_INFINITY, RLIM_INFINITY }, \
- + [RLIMIT_STACK] = { _STK_LIM, _STK_LIM_MAX }, \
- + [RLIMIT_CORE] = { 0, RLIM_INFINITY }, \
- + [RLIMIT_RSS] = { RLIM_INFINITY, RLIM_INFINITY }, \
- + [RLIMIT_NPROC] = { 0, 0 }, \
- + [RLIMIT_NOFILE] = { INR_OPEN, INR_OPEN }, \
- + [RLIMIT_MEMLOCK] = { MLOCK_LIMIT, MLOCK_LIMIT }, \
- + [RLIMIT_AS] = { RLIM_INFINITY, RLIM_INFINITY }, \
- + [RLIMIT_LOCKS] = { RLIM_INFINITY, RLIM_INFINITY }, \
- + [RLIMIT_SIGPENDING] = { MAX_SIGPENDING, MAX_SIGPENDING }, \
- + [RLIMIT_MSGQUEUE] = { MQ_BYTES_MAX, MQ_BYTES_MAX }, \
- +}
- +
- +#endif /* __KERNEL__ */
- +
- +#endif
- --- linux/include/asm-generic/rmap.h
- +++ linux/include/asm-generic/rmap.h
- @@ -0,0 +1,90 @@
- +#ifndef _GENERIC_RMAP_H
- +#define _GENERIC_RMAP_H
- +/*
- + * linux/include/asm-generic/rmap.h
- + *
- + * Architecture dependent parts of the reverse mapping code,
- + * this version should work for most architectures with a
- + * 'normal' page table layout.
- + *
- + * We use the struct page of the page table page to find out
- + * the process and full address of a page table entry:
- + * - page->mapping points to the process' mm_struct
- + * - page->index has the high bits of the address
- + * - the lower bits of the address are calculated from the
- + * offset of the page table entry within the page table page
- + *
- + * For CONFIG_HIGHPTE, we need to represent the address of a pte in a
- + * scalar pte_addr_t. The pfn of the pte's page is shifted left by PAGE_SIZE
- + * bits and is then ORed with the byte offset of the pte within its page.
- + *
- + * For CONFIG_HIGHMEM4G, the pte_addr_t is 32 bits. 20 for the pfn, 12 for
- + * the offset.
- + *
- + * For CONFIG_HIGHMEM64G, the pte_addr_t is 64 bits. 52 for the pfn, 12 for
- + * the offset.
- + */
- +#include <linux/mm.h>
- +
- +static inline void pgtable_add_rmap(struct page * page, struct mm_struct * mm, unsigned long address)
- +{
- +#ifdef BROKEN_PPC_PTE_ALLOC_ONE
- + /* OK, so PPC calls pte_alloc() before mem_map[] is setup ... ;( */
- + extern int mem_init_done;
- +
- + if (!mem_init_done)
- + return;
- +#endif
- + page->mapping = (void *)mm;
- + page->index = address & ~((PTRS_PER_PTE * PAGE_SIZE) - 1);
- + inc_page_state(nr_page_table_pages);
- +}
- +
- +static inline void pgtable_remove_rmap(struct page * page)
- +{
- + page->mapping = NULL;
- + page->index = 0;
- + dec_page_state(nr_page_table_pages);
- +}
- +
- +static inline struct mm_struct * ptep_to_mm(pte_t * ptep)
- +{
- + struct page * page = kmap_atomic_to_page(ptep);
- + return (struct mm_struct *) page->mapping;
- +}
- +
- +static inline unsigned long ptep_to_address(pte_t * ptep)
- +{
- + struct page * page = kmap_atomic_to_page(ptep);
- + unsigned long low_bits;
- + low_bits = ((unsigned long)ptep & ~PAGE_MASK) * PTRS_PER_PTE;
- + return page->index + low_bits;
- +}
- +
- +#ifdef CONFIG_HIGHPTE
- +static inline pte_addr_t ptep_to_paddr(pte_t *ptep)
- +{
- + pte_addr_t paddr;
- + paddr = ((pte_addr_t)page_to_pfn(kmap_atomic_to_page(ptep))) << PAGE_SHIFT;
- + return paddr + (pte_addr_t)((unsigned long)ptep & ~PAGE_MASK);
- +}
- +#else
- +static inline pte_addr_t ptep_to_paddr(pte_t *ptep)
- +{
- + return (pte_addr_t)ptep;
- +}
- +#endif
- +
- +#ifndef CONFIG_HIGHPTE
- +static inline pte_t *rmap_ptep_map(pte_addr_t pte_paddr)
- +{
- + return (pte_t *)pte_paddr;
- +}
- +
- +static inline void rmap_ptep_unmap(pte_t *pte)
- +{
- + return;
- +}
- +#endif
- +
- +#endif /* _GENERIC_RMAP_H */
- --- linux/include/asm-generic/rtc.h
- +++ linux/include/asm-generic/rtc.h
- @@ -0,0 +1,213 @@
- +/*
- + * inclue/asm-generic/rtc.h
- + *
- + * Author: Tom Rini <trini@mvista.com>
- + *
- + * Based on:
- + * drivers/char/rtc.c
- + *
- + * Please read the COPYING file for all license details.
- + */
- +
- +#ifndef __ASM_RTC_H__
- +#define __ASM_RTC_H__
- +
- +#ifdef __KERNEL__
- +
- +#include <linux/mc146818rtc.h>
- +#include <linux/rtc.h>
- +#include <linux/bcd.h>
- +
- +#define RTC_PIE 0x40 /* periodic interrupt enable */
- +#define RTC_AIE 0x20 /* alarm interrupt enable */
- +#define RTC_UIE 0x10 /* update-finished interrupt enable */
- +
- +/* some dummy definitions */
- +#define RTC_BATT_BAD 0x100 /* battery bad */
- +#define RTC_SQWE 0x08 /* enable square-wave output */
- +#define RTC_DM_BINARY 0x04 /* all time/date values are BCD if clear */
- +#define RTC_24H 0x02 /* 24 hour mode - else hours bit 7 means pm */
- +#define RTC_DST_EN 0x01 /* auto switch DST - works f. USA only */
- +
- +/*
- + * Returns true if a clock update is in progress
- + */
- +static inline unsigned char rtc_is_updating(void)
- +{
- + unsigned char uip;
- +
- + spin_lock_irq(&rtc_lock);
- + uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP);
- + spin_unlock_irq(&rtc_lock);
- + return uip;
- +}
- +
- +static inline unsigned int get_rtc_time(struct rtc_time *time)
- +{
- + unsigned long uip_watchdog = jiffies;
- + unsigned char ctrl;
- +#ifdef CONFIG_MACH_DECSTATION
- + unsigned int real_year;
- +#endif
- +
- + /*
- + * read RTC once any update in progress is done. The update
- + * can take just over 2ms. We wait 10 to 20ms. There is no need to
- + * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP.
- + * If you need to know *exactly* when a second has started, enable
- + * periodic update complete interrupts, (via ioctl) and then
- + * immediately read /dev/rtc which will block until you get the IRQ.
- + * Once the read clears, read the RTC time (again via ioctl). Easy.
- + */
- +
- + if (rtc_is_updating() != 0)
- + while (jiffies - uip_watchdog < 2*HZ/100) {
- + barrier();
- + cpu_relax();
- + }
- +
- + /*
- + * Only the values that we read from the RTC are set. We leave
- + * tm_wday, tm_yday and tm_isdst untouched. Even though the
- + * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated
- + * by the RTC when initially set to a non-zero value.
- + */
- + spin_lock_irq(&rtc_lock);
- + time->tm_sec = CMOS_READ(RTC_SECONDS);
- + time->tm_min = CMOS_READ(RTC_MINUTES);
- + time->tm_hour = CMOS_READ(RTC_HOURS);
- + time->tm_mday = CMOS_READ(RTC_DAY_OF_MONTH);
- + time->tm_mon = CMOS_READ(RTC_MONTH);
- + time->tm_year = CMOS_READ(RTC_YEAR);
- +#ifdef CONFIG_MACH_DECSTATION
- + real_year = CMOS_READ(RTC_DEC_YEAR);
- +#endif
- + ctrl = CMOS_READ(RTC_CONTROL);
- + spin_unlock_irq(&rtc_lock);
- +
- + if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD)
- + {
- + BCD_TO_BIN(time->tm_sec);
- + BCD_TO_BIN(time->tm_min);
- + BCD_TO_BIN(time->tm_hour);
- + BCD_TO_BIN(time->tm_mday);
- + BCD_TO_BIN(time->tm_mon);
- + BCD_TO_BIN(time->tm_year);
- + }
- +
- +#ifdef CONFIG_MACH_DECSTATION
- + time->tm_year += real_year - 72;
- +#endif
- +
- + /*
- + * Account for differences between how the RTC uses the values
- + * and how they are defined in a struct rtc_time;
- + */
- + if (time->tm_year <= 69)
- + time->tm_year += 100;
- +
- + time->tm_mon--;
- +
- + return RTC_24H;
- +}
- +
- +/* Set the current date and time in the real time clock. */
- +static inline int set_rtc_time(struct rtc_time *time)
- +{
- + unsigned char mon, day, hrs, min, sec;
- + unsigned char save_control, save_freq_select;
- + unsigned int yrs;
- +#ifdef CONFIG_MACH_DECSTATION
- + unsigned int real_yrs, leap_yr;
- +#endif
- +
- + yrs = time->tm_year;
- + mon = time->tm_mon + 1; /* tm_mon starts at zero */
- + day = time->tm_mday;
- + hrs = time->tm_hour;
- + min = time->tm_min;
- + sec = time->tm_sec;
- +
- + if (yrs > 255) /* They are unsigned */
- + return -EINVAL;
- +
- + spin_lock_irq(&rtc_lock);
- +#ifdef CONFIG_MACH_DECSTATION
- + real_yrs = yrs;
- + leap_yr = ((!((yrs + 1900) % 4) && ((yrs + 1900) % 100)) ||
- + !((yrs + 1900) % 400));
- + yrs = 72;
- +
- + /*
- + * We want to keep the year set to 73 until March
- + * for non-leap years, so that Feb, 29th is handled
- + * correctly.
- + */
- + if (!leap_yr && mon < 3) {
- + real_yrs--;
- + yrs = 73;
- + }
- +#endif
- + /* These limits and adjustments are independent of
- + * whether the chip is in binary mode or not.
- + */
- + if (yrs > 169) {
- + spin_unlock_irq(&rtc_lock);
- + return -EINVAL;
- + }
- +
- + if (yrs >= 100)
- + yrs -= 100;
- +
- + if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY)
- + || RTC_ALWAYS_BCD) {
- + BIN_TO_BCD(sec);
- + BIN_TO_BCD(min);
- + BIN_TO_BCD(hrs);
- + BIN_TO_BCD(day);
- + BIN_TO_BCD(mon);
- + BIN_TO_BCD(yrs);
- + }
- +
- + save_control = CMOS_READ(RTC_CONTROL);
- + CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL);
- + save_freq_select = CMOS_READ(RTC_FREQ_SELECT);
- + CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT);
- +
- +#ifdef CONFIG_MACH_DECSTATION
- + CMOS_WRITE(real_yrs, RTC_DEC_YEAR);
- +#endif
- + CMOS_WRITE(yrs, RTC_YEAR);
- + CMOS_WRITE(mon, RTC_MONTH);
- + CMOS_WRITE(day, RTC_DAY_OF_MONTH);
- + CMOS_WRITE(hrs, RTC_HOURS);
- + CMOS_WRITE(min, RTC_MINUTES);
- + CMOS_WRITE(sec, RTC_SECONDS);
- +
- + CMOS_WRITE(save_control, RTC_CONTROL);
- + CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT);
- +
- + spin_unlock_irq(&rtc_lock);
- +
- + return 0;
- +}
- +
- +static inline unsigned int get_rtc_ss(void)
- +{
- + struct rtc_time h;
- +
- + get_rtc_time(&h);
- + return h.tm_sec;
- +}
- +
- +static inline int get_rtc_pll(struct rtc_pll_info *pll)
- +{
- + return -EINVAL;
- +}
- +static inline int set_rtc_pll(struct rtc_pll_info *pll)
- +{
- + return -EINVAL;
- +}
- +
- +#endif /* __KERNEL__ */
- +#endif /* __ASM_RTC_H__ */
- --- linux/include/asm-generic/sections.h
- +++ linux/include/asm-generic/sections.h
- @@ -0,0 +1,13 @@
- +#ifndef _ASM_GENERIC_SECTIONS_H_
- +#define _ASM_GENERIC_SECTIONS_H_
- +
- +/* References to section boundaries */
- +
- +extern char _text[], _stext[], _etext[];
- +extern char _data[], _sdata[], _edata[];
- +extern char __bss_start[], __bss_stop[];
- +extern char __init_begin[], __init_end[];
- +extern char _sinittext[], _einittext[];
- +extern char _end[];
- +
- +#endif /* _ASM_GENERIC_SECTIONS_H_ */
- --- linux/include/asm-generic/siginfo.h
- +++ linux/include/asm-generic/siginfo.h
- @@ -0,0 +1,288 @@
- +#ifndef _ASM_GENERIC_SIGINFO_H
- +#define _ASM_GENERIC_SIGINFO_H
- +
- +#include <linux/compiler.h>
- +#include <linux/types.h>
- +#include <linux/resource.h>
- +
- +typedef union sigval {
- + int sival_int;
- + void __user *sival_ptr;
- +} sigval_t;
- +
- +/*
- + * This is the size (including padding) of the part of the
- + * struct siginfo that is before the union.
- + */
- +#ifndef __ARCH_SI_PREAMBLE_SIZE
- +#define __ARCH_SI_PREAMBLE_SIZE (3 * sizeof(int))
- +#endif
- +
- +#define SI_MAX_SIZE 128
- +#ifndef SI_PAD_SIZE
- +#define SI_PAD_SIZE ((SI_MAX_SIZE - __ARCH_SI_PREAMBLE_SIZE) / sizeof(int))
- +#endif
- +
- +#ifndef __ARCH_SI_UID_T
- +#define __ARCH_SI_UID_T uid_t
- +#endif
- +
- +/*
- + * The default "si_band" type is "long", as specified by POSIX.
- + * However, some architectures want to override this to "int"
- + * for historical compatibility reasons, so we allow that.
- + */
- +#ifndef __ARCH_SI_BAND_T
- +#define __ARCH_SI_BAND_T long
- +#endif
- +
- +#ifndef HAVE_ARCH_SIGINFO_T
- +
- +typedef struct siginfo {
- + int si_signo;
- + int si_errno;
- + int si_code;
- +
- + union {
- + int _pad[SI_PAD_SIZE];
- +
- + /* kill() */
- + struct {
- + pid_t _pid; /* sender's pid */
- + __ARCH_SI_UID_T _uid; /* sender's uid */
- + } _kill;
- +
- + /* POSIX.1b timers */
- + struct {
- + timer_t _tid; /* timer id */
- + int _overrun; /* overrun count */
- + char _pad[sizeof( __ARCH_SI_UID_T) - sizeof(int)];
- + sigval_t _sigval; /* same as below */
- + int _sys_private; /* not to be passed to user */
- + } _timer;
- +
- + /* POSIX.1b signals */
- + struct {
- + pid_t _pid; /* sender's pid */
- + __ARCH_SI_UID_T _uid; /* sender's uid */
- + sigval_t _sigval;
- + } _rt;
- +
- + /* SIGCHLD */
- + struct {
- + pid_t _pid; /* which child */
- + __ARCH_SI_UID_T _uid; /* sender's uid */
- + int _status; /* exit code */
- + clock_t _utime;
- + clock_t _stime;
- + } _sigchld;
- +
- + /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
- + struct {
- + void __user *_addr; /* faulting insn/memory ref. */
- +#ifdef __ARCH_SI_TRAPNO
- + int _trapno; /* TRAP # which caused the signal */
- +#endif
- + } _sigfault;
- +
- + /* SIGPOLL */
- + struct {
- + __ARCH_SI_BAND_T _band; /* POLL_IN, POLL_OUT, POLL_MSG */
- + int _fd;
- + } _sigpoll;
- + } _sifields;
- +} siginfo_t;
- +
- +#endif
- +
- +/*
- + * How these fields are to be accessed.
- + */
- +#define si_pid _sifields._kill._pid
- +#define si_uid _sifields._kill._uid
- +#define si_tid _sifields._timer._tid
- +#define si_overrun _sifields._timer._overrun
- +#define si_sys_private _sifields._timer._sys_private
- +#define si_status _sifields._sigchld._status
- +#define si_utime _sifields._sigchld._utime
- +#define si_stime _sifields._sigchld._stime
- +#define si_value _sifields._rt._sigval
- +#define si_int _sifields._rt._sigval.sival_int
- +#define si_ptr _sifields._rt._sigval.sival_ptr
- +#define si_addr _sifields._sigfault._addr
- +#ifdef __ARCH_SI_TRAPNO
- +#define si_trapno _sifields._sigfault._trapno
- +#endif
- +#define si_band _sifields._sigpoll._band
- +#define si_fd _sifields._sigpoll._fd
- +
- +#ifdef __KERNEL__
- +#define __SI_MASK 0xffff0000u
- +#define __SI_KILL (0 << 16)
- +#define __SI_TIMER (1 << 16)
- +#define __SI_POLL (2 << 16)
- +#define __SI_FAULT (3 << 16)
- +#define __SI_CHLD (4 << 16)
- +#define __SI_RT (5 << 16)
- +#define __SI_MESGQ (6 << 16)
- +#define __SI_CODE(T,N) ((T) | ((N) & 0xffff))
- +#else
- +#define __SI_KILL 0
- +#define __SI_TIMER 0
- +#define __SI_POLL 0
- +#define __SI_FAULT 0
- +#define __SI_CHLD 0
- +#define __SI_RT 0
- +#define __SI_MESGQ 0
- +#define __SI_CODE(T,N) (N)
- +#endif
- +
- +/*
- + * si_code values
- + * Digital reserves positive values for kernel-generated signals.
- + */
- +#define SI_USER 0 /* sent by kill, sigsend, raise */
- +#define SI_KERNEL 0x80 /* sent by the kernel from somewhere */
- +#define SI_QUEUE -1 /* sent by sigqueue */
- +#define SI_TIMER __SI_CODE(__SI_TIMER,-2) /* sent by timer expiration */
- +#define SI_MESGQ __SI_CODE(__SI_MESGQ,-3) /* sent by real time mesq state change */
- +#define SI_ASYNCIO -4 /* sent by AIO completion */
- +#define SI_SIGIO -5 /* sent by queued SIGIO */
- +#define SI_TKILL -6 /* sent by tkill system call */
- +#define SI_DETHREAD -7 /* sent by execve() killing subsidiary threads */
- +
- +#define SI_FROMUSER(siptr) ((siptr)->si_code <= 0)
- +#define SI_FROMKERNEL(siptr) ((siptr)->si_code > 0)
- +
- +/*
- + * SIGILL si_codes
- + */
- +#define ILL_ILLOPC (__SI_FAULT|1) /* illegal opcode */
- +#define ILL_ILLOPN (__SI_FAULT|2) /* illegal operand */
- +#define ILL_ILLADR (__SI_FAULT|3) /* illegal addressing mode */
- +#define ILL_ILLTRP (__SI_FAULT|4) /* illegal trap */
- +#define ILL_PRVOPC (__SI_FAULT|5) /* privileged opcode */
- +#define ILL_PRVREG (__SI_FAULT|6) /* privileged register */
- +#define ILL_COPROC (__SI_FAULT|7) /* coprocessor error */
- +#define ILL_BADSTK (__SI_FAULT|8) /* internal stack error */
- +#define NSIGILL 8
- +
- +/*
- + * SIGFPE si_codes
- + */
- +#define FPE_INTDIV (__SI_FAULT|1) /* integer divide by zero */
- +#define FPE_INTOVF (__SI_FAULT|2) /* integer overflow */
- +#define FPE_FLTDIV (__SI_FAULT|3) /* floating point divide by zero */
- +#define FPE_FLTOVF (__SI_FAULT|4) /* floating point overflow */
- +#define FPE_FLTUND (__SI_FAULT|5) /* floating point underflow */
- +#define FPE_FLTRES (__SI_FAULT|6) /* floating point inexact result */
- +#define FPE_FLTINV (__SI_FAULT|7) /* floating point invalid operation */
- +#define FPE_FLTSUB (__SI_FAULT|8) /* subscript out of range */
- +#define NSIGFPE 8
- +
- +/*
- + * SIGSEGV si_codes
- + */
- +#define SEGV_MAPERR (__SI_FAULT|1) /* address not mapped to object */
- +#define SEGV_ACCERR (__SI_FAULT|2) /* invalid permissions for mapped object */
- +#define NSIGSEGV 2
- +
- +/*
- + * SIGBUS si_codes
- + */
- +#define BUS_ADRALN (__SI_FAULT|1) /* invalid address alignment */
- +#define BUS_ADRERR (__SI_FAULT|2) /* non-existant physical address */
- +#define BUS_OBJERR (__SI_FAULT|3) /* object specific hardware error */
- +#define NSIGBUS 3
- +
- +/*
- + * SIGTRAP si_codes
- + */
- +#define TRAP_BRKPT (__SI_FAULT|1) /* process breakpoint */
- +#define TRAP_TRACE (__SI_FAULT|2) /* process trace trap */
- +#define NSIGTRAP 2
- +
- +/*
- + * SIGCHLD si_codes
- + */
- +#define CLD_EXITED (__SI_CHLD|1) /* child has exited */
- +#define CLD_KILLED (__SI_CHLD|2) /* child was killed */
- +#define CLD_DUMPED (__SI_CHLD|3) /* child terminated abnormally */
- +#define CLD_TRAPPED (__SI_CHLD|4) /* traced child has trapped */
- +#define CLD_STOPPED (__SI_CHLD|5) /* child has stopped */
- +#define CLD_CONTINUED (__SI_CHLD|6) /* stopped child has continued */
- +#define NSIGCHLD 6
- +
- +/*
- + * SIGPOLL si_codes
- + */
- +#define POLL_IN (__SI_POLL|1) /* data input available */
- +#define POLL_OUT (__SI_POLL|2) /* output buffers available */
- +#define POLL_MSG (__SI_POLL|3) /* input message available */
- +#define POLL_ERR (__SI_POLL|4) /* i/o error */
- +#define POLL_PRI (__SI_POLL|5) /* high priority input available */
- +#define POLL_HUP (__SI_POLL|6) /* device disconnected */
- +#define NSIGPOLL 6
- +
- +/*
- + * sigevent definitions
- + *
- + * It seems likely that SIGEV_THREAD will have to be handled from
- + * userspace, libpthread transmuting it to SIGEV_SIGNAL, which the
- + * thread manager then catches and does the appropriate nonsense.
- + * However, everything is written out here so as to not get lost.
- + */
- +#define SIGEV_SIGNAL 0 /* notify via signal */
- +#define SIGEV_NONE 1 /* other notification: meaningless */
- +#define SIGEV_THREAD 2 /* deliver via thread creation */
- +#define SIGEV_THREAD_ID 4 /* deliver to thread */
- +
- +#define SIGEV_MAX_SIZE 64
- +#ifndef SIGEV_PAD_SIZE
- +#define SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
- +#endif
- +
- +typedef struct sigevent {
- + sigval_t sigev_value;
- + int sigev_signo;
- + int sigev_notify;
- + union {
- + int _pad[SIGEV_PAD_SIZE];
- + int _tid;
- +
- + struct {
- + void (*_function)(sigval_t);
- + void *_attribute; /* really pthread_attr_t */
- + } _sigev_thread;
- + } _sigev_un;
- +} sigevent_t;
- +
- +#define sigev_notify_function _sigev_un._sigev_thread._function
- +#define sigev_notify_attributes _sigev_un._sigev_thread._attribute
- +#define sigev_notify_thread_id _sigev_un._tid
- +
- +#ifdef __KERNEL__
- +
- +struct siginfo;
- +void do_schedule_next_timer(struct siginfo *info);
- +
- +#ifndef HAVE_ARCH_COPY_SIGINFO
- +
- +#include <linux/string.h>
- +
- +static inline void copy_siginfo(struct siginfo *to, struct siginfo *from)
- +{
- + if (from->si_code < 0)
- + memcpy(to, from, sizeof(*to));
- + else
- + /* _sigchld is currently the largest know union member */
- + memcpy(to, from, __ARCH_SI_PREAMBLE_SIZE + sizeof(from->_sifields._sigchld));
- +}
- +
- +#endif
- +
- +extern int copy_siginfo_to_user(struct siginfo __user *to, struct siginfo *from);
- +
- +#endif /* __KERNEL__ */
- +
- +#endif
- --- linux/include/asm-generic/statfs.h
- +++ linux/include/asm-generic/statfs.h
- @@ -0,0 +1,51 @@
- +#ifndef _GENERIC_STATFS_H
- +#define _GENERIC_STATFS_H
- +
- +#ifndef __KERNEL_STRICT_NAMES
- +# include <linux/types.h>
- +typedef __kernel_fsid_t fsid_t;
- +#endif
- +
- +struct statfs {
- + __u32 f_type;
- + __u32 f_bsize;
- + __u32 f_blocks;
- + __u32 f_bfree;
- + __u32 f_bavail;
- + __u32 f_files;
- + __u32 f_ffree;
- + __kernel_fsid_t f_fsid;
- + __u32 f_namelen;
- + __u32 f_frsize;
- + __u32 f_spare[5];
- +};
- +
- +struct statfs64 {
- + __u32 f_type;
- + __u32 f_bsize;
- + __u64 f_blocks;
- + __u64 f_bfree;
- + __u64 f_bavail;
- + __u64 f_files;
- + __u64 f_ffree;
- + __kernel_fsid_t f_fsid;
- + __u32 f_namelen;
- + __u32 f_frsize;
- + __u32 f_spare[5];
- +};
- +
- +struct compat_statfs64 {
- + __u32 f_type;
- + __u32 f_bsize;
- + __u64 f_blocks;
- + __u64 f_bfree;
- + __u64 f_bavail;
- + __u64 f_files;
- + __u64 f_ffree;
- + __kernel_fsid_t f_fsid;
- + __u32 f_namelen;
- + __u32 f_frsize;
- + __u32 f_spare[5];
- +};
- +
- +#endif
- --- linux/include/asm-generic/termios.h
- +++ linux/include/asm-generic/termios.h
- @@ -0,0 +1,69 @@
- +/* termios.h: generic termios/termio user copying/translation
- + */
- +
- +#ifndef _ASM_GENERIC_TERMIOS_H
- +#define _ASM_GENERIC_TERMIOS_H
- +
- +#include <asm/uaccess.h>
- +
- +#ifndef __ARCH_TERMIO_GETPUT
- +
- +/*
- + * Translate a "termio" structure into a "termios". Ugh.
- + */
- +static inline int user_termio_to_kernel_termios(struct termios *termios,
- + struct termio __user *termio)
- +{
- + unsigned short tmp;
- +
- + if (get_user(tmp, &termio->c_iflag) < 0)
- + goto fault;
- + termios->c_iflag = (0xffff0000 & termios->c_iflag) | tmp;
- +
- + if (get_user(tmp, &termio->c_oflag) < 0)
- + goto fault;
- + termios->c_oflag = (0xffff0000 & termios->c_oflag) | tmp;
- +
- + if (get_user(tmp, &termio->c_cflag) < 0)
- + goto fault;
- + termios->c_cflag = (0xffff0000 & termios->c_cflag) | tmp;
- +
- + if (get_user(tmp, &termio->c_lflag) < 0)
- + goto fault;
- + termios->c_lflag = (0xffff0000 & termios->c_lflag) | tmp;
- +
- + if (get_user(termios->c_line, &termio->c_line) < 0)
- + goto fault;
- +
- + if (copy_from_user(termios->c_cc, termio->c_cc, NCC) != 0)
- + goto fault;
- +
- + return 0;
- +
- + fault:
- + return -EFAULT;
- +}
- +
- +/*
- + * Translate a "termios" structure into a "termio". Ugh.
- + */
- +static inline int kernel_termios_to_user_termio(struct termio __user *termio,
- + struct termios *termios)
- +{
- + if (put_user(termios->c_iflag, &termio->c_iflag) < 0 ||
- + put_user(termios->c_oflag, &termio->c_oflag) < 0 ||
- + put_user(termios->c_cflag, &termio->c_cflag) < 0 ||
- + put_user(termios->c_lflag, &termio->c_lflag) < 0 ||
- + put_user(termios->c_line, &termio->c_line) < 0 ||
- + copy_to_user(termio->c_cc, termios->c_cc, NCC) != 0)
- + return -EFAULT;
- +
- + return 0;
- +}
- +
- +#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
- +#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
- +
- +#endif /* __ARCH_TERMIO_GETPUT */
- +
- +#endif /* _ASM_GENERIC_TERMIOS_H */
- --- linux/include/asm-generic/tlb.h
- +++ linux/include/asm-generic/tlb.h
- @@ -0,0 +1,160 @@
- +/* asm-generic/tlb.h
- + *
- + * Generic TLB shootdown code
- + *
- + * Copyright 2001 Red Hat, Inc.
- + * Based on code from mm/memory.c Copyright Linus Torvalds and others.
- + *
- + * This program is free software; you can redistribute it and/or
- + * modify it under the terms of the GNU General Public License
- + * as published by the Free Software Foundation; either version
- + * 2 of the License, or (at your option) any later version.
- + */
- +#ifndef _ASM_GENERIC__TLB_H
- +#define _ASM_GENERIC__TLB_H
- +
- +// #include <linux/config.h>
- +#include <linux/swap.h>
- +#include <asm/pgalloc.h>
- +#include <asm/tlbflush.h>
- +
- +/*
- + * For UP we don't need to worry about TLB flush
- + * and page free order so much..
- + */
- +#ifdef CONFIG_SMP
- + #define FREE_PTE_NR 506
- + #define tlb_fast_mode(tlb) ((tlb)->nr == ~0U)
- +#else
- + #define FREE_PTE_NR 1
- + #define tlb_fast_mode(tlb) 1
- +#endif
- +
- +/* struct mmu_gather is an opaque type used by the mm code for passing around
- + * any data needed by arch specific code for tlb_remove_page. This structure
- + * can be per-CPU or per-MM as the page table lock is held for the duration of
- + * TLB shootdown.
- + */
- +struct mmu_gather {
- + struct mm_struct *mm;
- + unsigned int nr; /* set to ~0U means fast mode */
- + unsigned int need_flush;/* Really unmapped some ptes? */
- + unsigned int fullmm; /* non-zero means full mm flush */
- + unsigned long freed;
- + struct page * pages[FREE_PTE_NR];
- +};
- +
- +/* Users of the generic TLB shootdown code must declare this storage space. */
- +DECLARE_PER_CPU(struct mmu_gather, mmu_gathers);
- +
- +/* tlb_gather_mmu
- + * Return a pointer to an initialized struct mmu_gather.
- + */
- +static inline struct mmu_gather *
- +tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush)
- +{
- + struct mmu_gather *tlb = &per_cpu(mmu_gathers, smp_processor_id());
- +
- + tlb->mm = mm;
- +
- + /* Use fast mode if only one CPU is online */
- + tlb->nr = num_online_cpus() > 1 ? 0U : ~0U;
- +
- + tlb->fullmm = full_mm_flush;
- + tlb->freed = 0;
- +
- + return tlb;
- +}
- +
- +static inline void
- +tlb_flush_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
- +{
- + if (!tlb->need_flush)
- + return;
- + tlb->need_flush = 0;
- + tlb_flush(tlb);
- + if (!tlb_fast_mode(tlb)) {
- + free_pages_and_swap_cache(tlb->pages, tlb->nr);
- + tlb->nr = 0;
- + }
- +}
- +
- +/* tlb_finish_mmu
- + * Called at the end of the shootdown operation to free up any resources
- + * that were required. The page table lock is still held at this point.
- + */
- +static inline void
- +tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end)
- +{
- + int freed = tlb->freed;
- + struct mm_struct *mm = tlb->mm;
- + int rss = mm->rss;
- +
- + if (rss < freed)
- + freed = rss;
- + mm->rss = rss - freed;
- + tlb_flush_mmu(tlb, start, end);
- +
- + /* keep the page table cache within bounds */
- + check_pgt_cache();
- +}
- +
- +static inline unsigned int
- +tlb_is_full_mm(struct mmu_gather *tlb)
- +{
- + return tlb->fullmm;
- +}
- +
- +/* tlb_remove_page
- + * Must perform the equivalent to __free_pte(pte_get_and_clear(ptep)), while
- + * handling the additional races in SMP caused by other CPUs caching valid
- + * mappings in their TLBs.
- + */
- +static inline void tlb_remove_page(struct mmu_gather *tlb, struct page *page)
- +{
- + tlb->need_flush = 1;
- + if (tlb_fast_mode(tlb)) {
- + free_page_and_swap_cache(page);
- + return;
- + }
- + tlb->pages[tlb->nr++] = page;
- + if (tlb->nr >= FREE_PTE_NR)
- + tlb_flush_mmu(tlb, 0, 0);
- +}
- +
- +/**
- + * tlb_remove_tlb_entry - remember a pte unmapping for later tlb invalidation.
- + *
- + * Record the fact that pte's were really umapped in ->need_flush, so we can
- + * later optimise away the tlb invalidate. This helps when userspace is
- + * unmapping already-unmapped pages, which happens quite a lot.
- + */
- +#define tlb_remove_tlb_entry(tlb, ptep, address) \
- + do { \
- + tlb->need_flush = 1; \
- + __tlb_remove_tlb_entry(tlb, ptep, address); \
- + } while (0)
- +
- +#define pte_free_tlb(tlb, ptep) \
- + do { \
- + tlb->need_flush = 1; \
- + __pte_free_tlb(tlb, ptep); \
- + } while (0)
- +
- +#ifndef __ARCH_HAS_4LEVEL_HACK
- +#define pud_free_tlb(tlb, pudp) \
- + do { \
- + tlb->need_flush = 1; \
- + __pud_free_tlb(tlb, pudp); \
- + } while (0)
- +#endif
- +
- +#define pmd_free_tlb(tlb, pmdp) \
- + do { \
- + tlb->need_flush = 1; \
- + __pmd_free_tlb(tlb, pmdp); \
- + } while (0)
- +
- +#define tlb_migrate_finish(mm) do {} while (0)
- +
- +#endif /* _ASM_GENERIC__TLB_H */
- --- linux/include/asm-generic/topology.h
- +++ linux/include/asm-generic/topology.h
- @@ -0,0 +1,48 @@
- +/*
- + * linux/include/asm-generic/topology.h
- + *
- + * Written by: Matthew Dobson, IBM Corporation
- + *
- + * Copyright (C) 2002, IBM Corp.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + * Send feedback to <colpatch@us.ibm.com>
- + */
- +#ifndef _ASM_GENERIC_TOPOLOGY_H
- +#define _ASM_GENERIC_TOPOLOGY_H
- +
- +/* Other architectures wishing to use this simple topology API should fill
- + in the below functions as appropriate in their own <asm/topology.h> file. */
- +#ifndef cpu_to_node
- +#define cpu_to_node(cpu) (0)
- +#endif
- +#ifndef parent_node
- +#define parent_node(node) (0)
- +#endif
- +#ifndef node_to_cpumask
- +#define node_to_cpumask(node) (cpu_online_map)
- +#endif
- +#ifndef node_to_first_cpu
- +#define node_to_first_cpu(node) (0)
- +#endif
- +#ifndef pcibus_to_cpumask
- +#define pcibus_to_cpumask(bus) (cpu_online_map)
- +#endif
- +
- +#endif /* _ASM_GENERIC_TOPOLOGY_H */
- --- linux/include/asm-generic/uaccess.h
- +++ linux/include/asm-generic/uaccess.h
- @@ -0,0 +1,26 @@
- +#ifndef _ASM_GENERIC_UACCESS_H_
- +#define _ASM_GENERIC_UACCESS_H_
- +
- +/*
- + * This macro should be used instead of __get_user() when accessing
- + * values at locations that are not known to be aligned.
- + */
- +#define __get_user_unaligned(x, ptr) \
- +({ \
- + __typeof__ (*(ptr)) __x; \
- + __copy_from_user(&__x, (ptr), sizeof(*(ptr))) ? -EFAULT : 0; \
- + (x) = __x; \
- +})
- +
- +
- +/*
- + * This macro should be used instead of __put_user() when accessing
- + * values at locations that are not known to be aligned.
- + */
- +#define __put_user_unaligned(x, ptr) \
- +({ \
- + __typeof__ (*(ptr)) __x = (x); \
- + __copy_to_user((ptr), &__x, sizeof(*(ptr))) ? -EFAULT : 0; \
- +})
- +
- +#endif /* _ASM_GENERIC_UACCESS_H */
- --- linux/include/asm-generic/unaligned.h
- +++ linux/include/asm-generic/unaligned.h
- @@ -0,0 +1,20 @@
- +#ifndef _ASM_GENERIC_UNALIGNED_H_
- +#define _ASM_GENERIC_UNALIGNED_H_
- +
- +/*
- + * For the benefit of those who are trying to port Linux to another
- + * architecture, here are some C-language equivalents.
- + */
- +
- +#include <asm/string.h>
- +
- +
- +#define get_unaligned(ptr) \
- + ({ __typeof__(*(ptr)) __tmp; memcpy(&__tmp, (ptr), sizeof(*(ptr))); __tmp; })
- +
- +#define put_unaligned(val, ptr) \
- + ({ __typeof__(*(ptr)) __tmp = (val); \
- + memcpy((ptr), &__tmp, sizeof(*(ptr))); \
- + (void)0; })
- +
- +#endif /* _ASM_GENERIC_UNALIGNED_H */
- --- linux/include/asm-generic/vmlinux.lds.h
- +++ linux/include/asm-generic/vmlinux.lds.h
- @@ -0,0 +1,90 @@
- +#ifndef LOAD_OFFSET
- +#define LOAD_OFFSET 0
- +#endif
- +
- +#ifndef VMLINUX_SYMBOL
- +#define VMLINUX_SYMBOL(_sym_) _sym_
- +#endif
- +
- +#define RODATA \
- + .rodata : AT(ADDR(.rodata) - LOAD_OFFSET) { \
- + *(.rodata) *(.rodata.*) \
- + *(__vermagic) /* Kernel version magic */ \
- + } \
- + \
- + .rodata1 : AT(ADDR(.rodata1) - LOAD_OFFSET) { \
- + *(.rodata1) \
- + } \
- + \
- + /* PCI quirks */ \
- + .pci_fixup : AT(ADDR(.pci_fixup) - LOAD_OFFSET) { \
- + VMLINUX_SYMBOL(__start_pci_fixups_early) = .; \
- + *(.pci_fixup_early) \
- + VMLINUX_SYMBOL(__end_pci_fixups_early) = .; \
- + VMLINUX_SYMBOL(__start_pci_fixups_header) = .; \
- + *(.pci_fixup_header) \
- + VMLINUX_SYMBOL(__end_pci_fixups_header) = .; \
- + VMLINUX_SYMBOL(__start_pci_fixups_final) = .; \
- + *(.pci_fixup_final) \
- + VMLINUX_SYMBOL(__end_pci_fixups_final) = .; \
- + VMLINUX_SYMBOL(__start_pci_fixups_enable) = .; \
- + *(.pci_fixup_enable) \
- + VMLINUX_SYMBOL(__end_pci_fixups_enable) = .; \
- + } \
- + \
- + /* Kernel symbol table: Normal symbols */ \
- + __ksymtab : AT(ADDR(__ksymtab) - LOAD_OFFSET) { \
- + VMLINUX_SYMBOL(__start___ksymtab) = .; \
- + *(__ksymtab) \
- + VMLINUX_SYMBOL(__stop___ksymtab) = .; \
- + } \
- + \
- + /* Kernel symbol table: GPL-only symbols */ \
- + __ksymtab_gpl : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) { \
- + VMLINUX_SYMBOL(__start___ksymtab_gpl) = .; \
- + *(__ksymtab_gpl) \
- + VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .; \
- + } \
- + \
- + /* Kernel symbol table: Normal symbols */ \
- + __kcrctab : AT(ADDR(__kcrctab) - LOAD_OFFSET) { \
- + VMLINUX_SYMBOL(__start___kcrctab) = .; \
- + *(__kcrctab) \
- + VMLINUX_SYMBOL(__stop___kcrctab) = .; \
- + } \
- + \
- + /* Kernel symbol table: GPL-only symbols */ \
- + __kcrctab_gpl : AT(ADDR(__kcrctab_gpl) - LOAD_OFFSET) { \
- + VMLINUX_SYMBOL(__start___kcrctab_gpl) = .; \
- + *(__kcrctab_gpl) \
- + VMLINUX_SYMBOL(__stop___kcrctab_gpl) = .; \
- + } \
- + \
- + /* Kernel symbol table: strings */ \
- + __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) { \
- + *(__ksymtab_strings) \
- + } \
- + \
- + /* Built-in module parameters. */ \
- + __param : AT(ADDR(__param) - LOAD_OFFSET) { \
- + VMLINUX_SYMBOL(__start___param) = .; \
- + *(__param) \
- + VMLINUX_SYMBOL(__stop___param) = .; \
- + }
- +
- +#define SECURITY_INIT \
- + .security_initcall.init : { \
- + VMLINUX_SYMBOL(__security_initcall_start) = .; \
- + *(.security_initcall.init) \
- + VMLINUX_SYMBOL(__security_initcall_end) = .; \
- + }
- +
- +#define SCHED_TEXT \
- + VMLINUX_SYMBOL(__sched_text_start) = .; \
- + *(.sched.text) \
- + VMLINUX_SYMBOL(__sched_text_end) = .;
- +
- +#define LOCK_TEXT \
- + VMLINUX_SYMBOL(__lock_text_start) = .; \
- + *(.spinlock.text) \
- + VMLINUX_SYMBOL(__lock_text_end) = .;
- --- linux/include/asm-generic/xor.h
- +++ linux/include/asm-generic/xor.h
- @@ -0,0 +1,718 @@
- +/*
- + * include/asm-generic/xor.h
- + *
- + * Generic optimized RAID-5 checksumming functions.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2, or (at your option)
- + * any later version.
- + *
- + * You should have received a copy of the GNU General Public License
- + * (for example /usr/src/linux/COPYING); if not, write to the Free
- + * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + */
- +
- +#include <asm/processor.h>
- +
- +static void
- +xor_8regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + p1[0] ^= p2[0];
- + p1[1] ^= p2[1];
- + p1[2] ^= p2[2];
- + p1[3] ^= p2[3];
- + p1[4] ^= p2[4];
- + p1[5] ^= p2[5];
- + p1[6] ^= p2[6];
- + p1[7] ^= p2[7];
- + p1 += 8;
- + p2 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_8regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + p1[0] ^= p2[0] ^ p3[0];
- + p1[1] ^= p2[1] ^ p3[1];
- + p1[2] ^= p2[2] ^ p3[2];
- + p1[3] ^= p2[3] ^ p3[3];
- + p1[4] ^= p2[4] ^ p3[4];
- + p1[5] ^= p2[5] ^ p3[5];
- + p1[6] ^= p2[6] ^ p3[6];
- + p1[7] ^= p2[7] ^ p3[7];
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_8regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
- + p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
- + p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
- + p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
- + p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
- + p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
- + p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
- + p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_8regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4, unsigned long *p5)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
- + p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
- + p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
- + p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
- + p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
- + p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
- + p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
- + p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + p5 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_32regs_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_32regs_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + d0 ^= p3[0];
- + d1 ^= p3[1];
- + d2 ^= p3[2];
- + d3 ^= p3[3];
- + d4 ^= p3[4];
- + d5 ^= p3[5];
- + d6 ^= p3[6];
- + d7 ^= p3[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_32regs_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + d0 ^= p3[0];
- + d1 ^= p3[1];
- + d2 ^= p3[2];
- + d3 ^= p3[3];
- + d4 ^= p3[4];
- + d5 ^= p3[5];
- + d6 ^= p3[6];
- + d7 ^= p3[7];
- + d0 ^= p4[0];
- + d1 ^= p4[1];
- + d2 ^= p4[2];
- + d3 ^= p4[3];
- + d4 ^= p4[4];
- + d5 ^= p4[5];
- + d6 ^= p4[6];
- + d7 ^= p4[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_32regs_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4, unsigned long *p5)
- +{
- + long lines = bytes / (sizeof (long)) / 8;
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + d0 ^= p3[0];
- + d1 ^= p3[1];
- + d2 ^= p3[2];
- + d3 ^= p3[3];
- + d4 ^= p3[4];
- + d5 ^= p3[5];
- + d6 ^= p3[6];
- + d7 ^= p3[7];
- + d0 ^= p4[0];
- + d1 ^= p4[1];
- + d2 ^= p4[2];
- + d3 ^= p4[3];
- + d4 ^= p4[4];
- + d5 ^= p4[5];
- + d6 ^= p4[6];
- + d7 ^= p4[7];
- + d0 ^= p5[0];
- + d1 ^= p5[1];
- + d2 ^= p5[2];
- + d3 ^= p5[3];
- + d4 ^= p5[4];
- + d5 ^= p5[5];
- + d6 ^= p5[6];
- + d7 ^= p5[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + p5 += 8;
- + } while (--lines > 0);
- +}
- +
- +static void
- +xor_8regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- + prefetchw(p1);
- + prefetch(p2);
- +
- + do {
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + once_more:
- + p1[0] ^= p2[0];
- + p1[1] ^= p2[1];
- + p1[2] ^= p2[2];
- + p1[3] ^= p2[3];
- + p1[4] ^= p2[4];
- + p1[5] ^= p2[5];
- + p1[6] ^= p2[6];
- + p1[7] ^= p2[7];
- + p1 += 8;
- + p2 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static void
- +xor_8regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- + prefetchw(p1);
- + prefetch(p2);
- + prefetch(p3);
- +
- + do {
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + prefetch(p3+8);
- + once_more:
- + p1[0] ^= p2[0] ^ p3[0];
- + p1[1] ^= p2[1] ^ p3[1];
- + p1[2] ^= p2[2] ^ p3[2];
- + p1[3] ^= p2[3] ^ p3[3];
- + p1[4] ^= p2[4] ^ p3[4];
- + p1[5] ^= p2[5] ^ p3[5];
- + p1[6] ^= p2[6] ^ p3[6];
- + p1[7] ^= p2[7] ^ p3[7];
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static void
- +xor_8regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- +
- + prefetchw(p1);
- + prefetch(p2);
- + prefetch(p3);
- + prefetch(p4);
- +
- + do {
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + prefetch(p3+8);
- + prefetch(p4+8);
- + once_more:
- + p1[0] ^= p2[0] ^ p3[0] ^ p4[0];
- + p1[1] ^= p2[1] ^ p3[1] ^ p4[1];
- + p1[2] ^= p2[2] ^ p3[2] ^ p4[2];
- + p1[3] ^= p2[3] ^ p3[3] ^ p4[3];
- + p1[4] ^= p2[4] ^ p3[4] ^ p4[4];
- + p1[5] ^= p2[5] ^ p3[5] ^ p4[5];
- + p1[6] ^= p2[6] ^ p3[6] ^ p4[6];
- + p1[7] ^= p2[7] ^ p3[7] ^ p4[7];
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static void
- +xor_8regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4, unsigned long *p5)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- +
- + prefetchw(p1);
- + prefetch(p2);
- + prefetch(p3);
- + prefetch(p4);
- + prefetch(p5);
- +
- + do {
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + prefetch(p3+8);
- + prefetch(p4+8);
- + prefetch(p5+8);
- + once_more:
- + p1[0] ^= p2[0] ^ p3[0] ^ p4[0] ^ p5[0];
- + p1[1] ^= p2[1] ^ p3[1] ^ p4[1] ^ p5[1];
- + p1[2] ^= p2[2] ^ p3[2] ^ p4[2] ^ p5[2];
- + p1[3] ^= p2[3] ^ p3[3] ^ p4[3] ^ p5[3];
- + p1[4] ^= p2[4] ^ p3[4] ^ p4[4] ^ p5[4];
- + p1[5] ^= p2[5] ^ p3[5] ^ p4[5] ^ p5[5];
- + p1[6] ^= p2[6] ^ p3[6] ^ p4[6] ^ p5[6];
- + p1[7] ^= p2[7] ^ p3[7] ^ p4[7] ^ p5[7];
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + p5 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static void
- +xor_32regs_p_2(unsigned long bytes, unsigned long *p1, unsigned long *p2)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- +
- + prefetchw(p1);
- + prefetch(p2);
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- +
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + once_more:
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static void
- +xor_32regs_p_3(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- +
- + prefetchw(p1);
- + prefetch(p2);
- + prefetch(p3);
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- +
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + prefetch(p3+8);
- + once_more:
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + d0 ^= p3[0];
- + d1 ^= p3[1];
- + d2 ^= p3[2];
- + d3 ^= p3[3];
- + d4 ^= p3[4];
- + d5 ^= p3[5];
- + d6 ^= p3[6];
- + d7 ^= p3[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static void
- +xor_32regs_p_4(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- +
- + prefetchw(p1);
- + prefetch(p2);
- + prefetch(p3);
- + prefetch(p4);
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- +
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + prefetch(p3+8);
- + prefetch(p4+8);
- + once_more:
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + d0 ^= p3[0];
- + d1 ^= p3[1];
- + d2 ^= p3[2];
- + d3 ^= p3[3];
- + d4 ^= p3[4];
- + d5 ^= p3[5];
- + d6 ^= p3[6];
- + d7 ^= p3[7];
- + d0 ^= p4[0];
- + d1 ^= p4[1];
- + d2 ^= p4[2];
- + d3 ^= p4[3];
- + d4 ^= p4[4];
- + d5 ^= p4[5];
- + d6 ^= p4[6];
- + d7 ^= p4[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static void
- +xor_32regs_p_5(unsigned long bytes, unsigned long *p1, unsigned long *p2,
- + unsigned long *p3, unsigned long *p4, unsigned long *p5)
- +{
- + long lines = bytes / (sizeof (long)) / 8 - 1;
- +
- + prefetchw(p1);
- + prefetch(p2);
- + prefetch(p3);
- + prefetch(p4);
- + prefetch(p5);
- +
- + do {
- + register long d0, d1, d2, d3, d4, d5, d6, d7;
- +
- + prefetchw(p1+8);
- + prefetch(p2+8);
- + prefetch(p3+8);
- + prefetch(p4+8);
- + prefetch(p5+8);
- + once_more:
- + d0 = p1[0]; /* Pull the stuff into registers */
- + d1 = p1[1]; /* ... in bursts, if possible. */
- + d2 = p1[2];
- + d3 = p1[3];
- + d4 = p1[4];
- + d5 = p1[5];
- + d6 = p1[6];
- + d7 = p1[7];
- + d0 ^= p2[0];
- + d1 ^= p2[1];
- + d2 ^= p2[2];
- + d3 ^= p2[3];
- + d4 ^= p2[4];
- + d5 ^= p2[5];
- + d6 ^= p2[6];
- + d7 ^= p2[7];
- + d0 ^= p3[0];
- + d1 ^= p3[1];
- + d2 ^= p3[2];
- + d3 ^= p3[3];
- + d4 ^= p3[4];
- + d5 ^= p3[5];
- + d6 ^= p3[6];
- + d7 ^= p3[7];
- + d0 ^= p4[0];
- + d1 ^= p4[1];
- + d2 ^= p4[2];
- + d3 ^= p4[3];
- + d4 ^= p4[4];
- + d5 ^= p4[5];
- + d6 ^= p4[6];
- + d7 ^= p4[7];
- + d0 ^= p5[0];
- + d1 ^= p5[1];
- + d2 ^= p5[2];
- + d3 ^= p5[3];
- + d4 ^= p5[4];
- + d5 ^= p5[5];
- + d6 ^= p5[6];
- + d7 ^= p5[7];
- + p1[0] = d0; /* Store the result (in bursts) */
- + p1[1] = d1;
- + p1[2] = d2;
- + p1[3] = d3;
- + p1[4] = d4;
- + p1[5] = d5;
- + p1[6] = d6;
- + p1[7] = d7;
- + p1 += 8;
- + p2 += 8;
- + p3 += 8;
- + p4 += 8;
- + p5 += 8;
- + } while (--lines > 0);
- + if (lines == 0)
- + goto once_more;
- +}
- +
- +static struct xor_block_template xor_block_8regs = {
- + .name = "8regs",
- + .do_2 = xor_8regs_2,
- + .do_3 = xor_8regs_3,
- + .do_4 = xor_8regs_4,
- + .do_5 = xor_8regs_5,
- +};
- +
- +static struct xor_block_template xor_block_32regs = {
- + .name = "32regs",
- + .do_2 = xor_32regs_2,
- + .do_3 = xor_32regs_3,
- + .do_4 = xor_32regs_4,
- + .do_5 = xor_32regs_5,
- +};
- +
- +static struct xor_block_template xor_block_8regs_p = {
- + .name = "8regs_prefetch",
- + .do_2 = xor_8regs_p_2,
- + .do_3 = xor_8regs_p_3,
- + .do_4 = xor_8regs_p_4,
- + .do_5 = xor_8regs_p_5,
- +};
- +
- +static struct xor_block_template xor_block_32regs_p = {
- + .name = "32regs_prefetch",
- + .do_2 = xor_32regs_p_2,
- + .do_3 = xor_32regs_p_3,
- + .do_4 = xor_32regs_p_4,
- + .do_5 = xor_32regs_p_5,
- +};
- +
- +#define XOR_TRY_TEMPLATES \
- + do { \
- + xor_speed(&xor_block_8regs); \
- + xor_speed(&xor_block_8regs_p); \
- + xor_speed(&xor_block_32regs); \
- + xor_speed(&xor_block_32regs_p); \
- + } while (0)
- --- linux/include/asm-nios2nommu/altera_juart.h
- +++ linux/include/asm-nios2nommu/altera_juart.h
- @@ -0,0 +1,36 @@
- +/*------------------------------------------------------------------------
- + *
- + * linux/drivers/serial/altera_juart.h
- + *
- + * Driver for Altera JTAG UART core with Avalon interface
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * History:
- + * Jun/20/2005 DGT Microtronix Datacom NiosII
- + *
- + -----------------------------------------------------------------------*/
- +
- +#ifndef _ALTERA_JUART_H_
- + #define _ALTERA_JUART_H_
- +
- + /* jtag uart details needed outside of the driver itself: */
- + /* by: arch/kernel/start.c - boot time error message(s) */
- +
- + void jtaguart_console_write
- + ( struct console *co,
- + const char *s,
- + unsigned int count);
- +
- +#endif /* _ALTERA_JUART_H_ */
- --- linux/include/asm-nios2nommu/a.out.h
- +++ linux/include/asm-nios2nommu/a.out.h
- @@ -0,0 +1,85 @@
- +/* $Id: a.out.h,v 1.4 2004/03/30 19:35:04 ken-h Exp $ */
- +/*
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef __NIOS2NOMMU_A_OUT_H__
- +#define __NIOS2NOMMU_A_OUT_H__
- +
- +#define SPARC_PGSIZE 0x1000 /* Thanks to the sun4 architecture... */
- +#define SEGMENT_SIZE SPARC_PGSIZE /* whee... */
- +
- +struct exec {
- + unsigned char a_dynamic:1; /* A __DYNAMIC is in this image */
- + unsigned char a_toolversion:7;
- + unsigned char a_machtype;
- + unsigned short a_info;
- + unsigned long a_text; /* length of text, in bytes */
- + unsigned long a_data; /* length of data, in bytes */
- + unsigned long a_bss; /* length of bss, in bytes */
- + unsigned long a_syms; /* length of symbol table, in bytes */
- + unsigned long a_entry; /* where program begins */
- + unsigned long a_trsize;
- + unsigned long a_drsize;
- +};
- +
- +#define INIT_EXEC { \
- + .a_dynamic = 0, \
- + .a_toolversion = 0, \
- + .a_machtype = 0, \
- + .a_info = 0, \
- + .a_text = 0, \
- + .a_data = 0, \
- + .a_bss = 0, \
- + .a_syms = 0, \
- + .a_entry = 0, \
- + .a_trsize = 0, \
- + .a_drsize = 0, \
- +}
- +
- +/* Where in the file does the text information begin? */
- +#define N_TXTOFF(x) (N_MAGIC(x) == ZMAGIC ? 0 : sizeof (struct exec))
- +
- +/* Where do the Symbols start? */
- +#define N_SYMOFF(x) (N_TXTOFF(x) + (x).a_text + \
- + (x).a_data + (x).a_trsize + \
- + (x).a_drsize)
- +
- +/* Where does text segment go in memory after being loaded? */
- +#define N_TXTADDR(x) (((N_MAGIC(x) == ZMAGIC) && \
- + ((x).a_entry < SPARC_PGSIZE)) ? \
- + 0 : SPARC_PGSIZE)
- +
- +/* And same for the data segment.. */
- +#define N_DATADDR(x) (N_MAGIC(x)==OMAGIC ? \
- + (N_TXTADDR(x) + (x).a_text) \
- + : (_N_SEGMENT_ROUND (_N_TXTENDADDR(x))))
- +
- +#define N_TRSIZE(a) ((a).a_trsize)
- +#define N_DRSIZE(a) ((a).a_drsize)
- +#define N_SYMSIZE(a) ((a).a_syms)
- +
- +#ifdef __KERNEL__
- +
- +#define STACK_TOP TASK_SIZE
- +
- +#endif
- +
- +#endif /* __NIOS2NOMMU_A_OUT_H__ */
- --- linux/include/asm-nios2nommu/asm-macros.h
- +++ linux/include/asm-nios2nommu/asm-macros.h
- @@ -0,0 +1,331 @@
- +/*
- + * Macro used to simplify coding multi-line assembler.
- + * Some of the bit test macro can simplify down to one line
- + * depending on the mask value.
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +/*
- + * ANDs reg2 with mask and places the result in reg1.
- + *
- + * You cannnot use the same register for reg1 & reg2.
- + */
- +
- +.macro ANDI32 reg1,reg2,mask
- + .if \mask & 0xffff
- + .if \mask & 0xffff0000
- + movhi \reg1,%hi(\mask)
- + movui \reg1,%lo(\mask)
- + and \reg1,\reg1,\reg2
- + .else
- + andi \reg1,\reg2,%lo(\mask)
- + .endif
- + .else
- + andhi \reg1,\reg2,%hi(\mask)
- + .endif
- +.endm
- +
- +/*
- + * ORs reg2 with mask and places the result in reg1.
- + *
- + * It is safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro ORI32 reg1,reg2,mask
- + .if \mask & 0xffff
- + .if \mask & 0xffff0000
- + orhi \reg1,\reg2,%hi(\mask)
- + ori \reg1,\reg2,%lo(\mask)
- + .else
- + ori \reg1,\reg2,%lo(\mask)
- + .endif
- + .else
- + orhi \reg1,\reg2,%hi(\mask)
- + .endif
- +.endm
- +
- +/*
- + * XORs reg2 with mask and places the result in reg1.
- + *
- + * It is safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro XORI32 reg1,reg2,mask
- + .if \mask & 0xffff
- + .if \mask & 0xffff0000
- + xorhi \reg1,\reg2,%hi(\mask)
- + xori \reg1,\reg1,%lo(\mask)
- + .else
- + xori \reg1,\reg2,%lo(\mask)
- + .endif
- + .else
- + xorhi \reg1,\reg2,%hi(\mask)
- + .endif
- +.endm
- +
- +/*
- + * This is a support macro for BTBZ & BTBNZ. It checks
- + * the bit to make sure it is valid 32 value.
- + *
- + * It is safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BT reg1,reg2,bit
- +.if \bit > 31
- + .err
- +.else
- + .if \bit < 16
- + andi \reg1,\reg2,(1 << \bit)
- + .else
- + andhi \reg1,\reg2,(1 << (\bit - 16))
- + .endif
- +.endif
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and branches to label if the
- + * bit is zero. The result of the bit test is stored in reg1.
- + *
- + * It is safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTBZ reg1,reg2,bit,label
- + BT \reg1,\reg2,\bit
- + beq \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and branches to label if the
- + * bit is non-zero. The result of the bit test is stored in reg1.
- + *
- + * It is safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTBNZ reg1,reg2,bit,label
- + BT \reg1,\reg2,\bit
- + bne \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then compliments the bit in reg2.
- + * The result of the bit test is stored in reg1.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTC reg1,reg2,bit
- +.if \bit > 31
- + .err
- +.else
- + .if \bit < 16
- + andi \reg1,\reg2,(1 << \bit)
- + xori \reg2,\reg2,(1 << \bit)
- + .else
- + andhi \reg1,\reg2,(1 << (\bit - 16))
- + xorhi \reg2,\reg2,(1 << (\bit - 16))
- + .endif
- +.endif
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then sets the bit in reg2.
- + * The result of the bit test is stored in reg1.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTS reg1,reg2,bit
- +.if \bit > 31
- + .err
- +.else
- + .if \bit < 16
- + andi \reg1,\reg2,(1 << \bit)
- + ori \reg2,\reg2,(1 << \bit)
- + .else
- + andhi \reg1,\reg2,(1 << (\bit - 16))
- + orhi \reg2,\reg2,(1 << (\bit - 16))
- + .endif
- +.endif
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then resets the bit in reg2.
- + * The result of the bit test is stored in reg1.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTR reg1,reg2,bit
- +.if \bit > 31
- + .err
- +.else
- + .if \bit < 16
- + andi \reg1,\reg2,(1 << \bit)
- + andi \reg2,\reg2,%lo(~(1 << \bit))
- + .else
- + andhi \reg1,\reg2,(1 << (\bit - 16))
- + andhi \reg2,\reg2,%lo(~(1 << (\bit - 16)))
- + .endif
- +.endif
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then compliments the bit in reg2.
- + * The result of the bit test is stored in reg1. If the
- + * original bit was zero it branches to label.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTCBZ reg1,reg2,bit,label
- + BTC \reg1,\reg2,\bit
- + beq \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then compliments the bit in reg2.
- + * The result of the bit test is stored in reg1. If the
- + * original bit was non-zero it branches to label.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTCBNZ reg1,reg2,bit,label
- + BTC \reg1,\reg2,\bit
- + bne \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then sets the bit in reg2.
- + * The result of the bit test is stored in reg1. If the
- + * original bit was zero it branches to label.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTSBZ reg1,reg2,bit,label
- + BTS \reg1,\reg2,\bit
- + beq \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then sets the bit in reg2.
- + * The result of the bit test is stored in reg1. If the
- + * original bit was non-zero it branches to label.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTSBNZ reg1,reg2,bit,label
- + BTS \reg1,\reg2,\bit
- + bne \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then resets the bit in reg2.
- + * The result of the bit test is stored in reg1. If the
- + * original bit was zero it branches to label.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTRBZ reg1,reg2,bit,label
- + BTR \reg1,\reg2,\bit
- + bne \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bit in reg2 and then resets the bit in reg2.
- + * The result of the bit test is stored in reg1. If the
- + * original bit was non-zero it branches to label.
- + *
- + * It is NOT safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro BTRBNZ reg1,reg2,bit,label
- + BTR \reg1,\reg2,\bit
- + bne \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bits in mask against reg2 stores the result in reg1.
- + * If the all the bits in the mask are zero it branches to label.
- + *
- + * It is safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro TSTBZ reg1,reg2,mask,label
- + ANDI32 \reg1,\reg2,\mask
- + beq \reg1,r0,\label
- +.endm
- +
- +/*
- + * Tests the bits in mask against reg2 stores the result in reg1.
- + * If the any of the bits in the mask are 1 it branches to label.
- + *
- + * It is safe to use the same register for reg1 & reg2.
- + */
- +
- +.macro TSTBNZ reg1,reg2,mask,label
- + ANDI32 \reg1,\reg2,\mask
- + bne \reg1,r0,\label
- +.endm
- +
- +/*
- + * Pushes reg onto the stack.
- + */
- +
- +.macro PUSH reg
- + addi sp,sp,-4
- + stw \reg,0(sp)
- +.endm
- +
- +/*
- + * Pops the top of the stack into reg.
- + */
- +
- +.macro POP reg
- + ldw \reg,0(sp)
- + addi sp,sp,4
- +.endm
- +
- +/*
- + * Clears reg
- + */
- +
- +.macro CLR reg
- + mov \reg,r0
- +.endm
- +
- +/*
- + * The preprocessor macro does not work for
- + * the nios2 compiler. Undefine ENTRY and define
- + * a real assembler macro.
- + */
- +#undef ENTRY
- +#define ENTRY(name) ASM_ENTRY name
- +
- +.macro ASM_ENTRY name
- +.globl \name
- +__ALIGN
- + \name:
- +.endm
- --- linux/include/asm-nios2nommu/atomic.h
- +++ linux/include/asm-nios2nommu/atomic.h
- @@ -0,0 +1,190 @@
- +//vic - add 'atomic_add/sub_return', 'atomic_add_negative'
- +//vic from v850 architecture
- +
- +/* atomic.h:
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + * Copyright (C) 2001 Vic Phillips (vic@microtronix.com)
- + *
- + * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __ARCH_NIOS2NOMMU_ATOMIC__
- +#define __ARCH_NIOS2NOMMU_ATOMIC__
- +
- +#include <asm/system.h>
- +
- +typedef struct { int counter; } atomic_t;
- +#define ATOMIC_INIT(i) { (i) }
- +
- +#define atomic_read(v) ((v)->counter)
- +#define atomic_set(v, i) (((v)->counter) = i)
- +
- +
- +extern __inline__ void atomic_add(int i, atomic_t *v)
- +{
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + v->counter += i;
- + local_irq_restore(flags);
- +}
- +
- +extern __inline__ int atomic_add_negative(int i, atomic_t *v)
- +{
- + unsigned long flags;
- + int result;
- +
- + local_irq_save(flags);
- + v->counter += i;
- + result = (v->counter < 0);
- + local_irq_restore(flags);
- + return result;
- +}
- +
- +extern __inline__ void atomic_sub(int i, atomic_t *v)
- +{
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + v->counter -= i;
- + local_irq_restore(flags);
- +}
- +
- +extern __inline__ int atomic_sub_and_test(int i, atomic_t *v)
- +{
- + int result;
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + v->counter -= i;
- + result = (v->counter == 0);
- + local_irq_restore(flags);
- + return result;
- +}
- +
- +extern __inline__ void atomic_inc(atomic_t *v)
- +{
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + v->counter += 1;
- + local_irq_restore(flags);
- +}
- +
- +extern __inline__ int atomic_inc_and_test(atomic_t *v)
- +{
- + unsigned long flags;
- + int result;
- +
- + local_irq_save(flags);
- + v->counter += 1;
- + result = (v->counter == 0);
- + local_irq_restore(flags);
- + return result;
- +}
- +
- +extern __inline__ void atomic_dec(atomic_t *v)
- +{
- + int i = 1; /* the compiler optimizes better this way */
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + v->counter -= i;
- + local_irq_restore(flags);
- +}
- +
- +extern __inline__ int atomic_dec_and_test(atomic_t *v)
- +{
- + int result;
- + int i = 1; /* the compiler optimizes better this way */
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + v->counter -= i;
- + result = (v->counter == 0);
- + local_irq_restore(flags);
- + return result;
- +}
- +
- +extern __inline__ int atomic_inc_return(atomic_t *v)
- +{
- + int result;
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + result = ++v->counter;
- + local_irq_restore(flags);
- + return result;
- +}
- +
- +extern __inline__ int atomic_dec_return(atomic_t *v)
- +{
- + int result;
- + int i = 1; /* the compiler optimizes better this way */
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + v->counter -= i;
- + result = v->counter;
- + local_irq_restore(flags);
- + return result;
- +}
- +
- +extern __inline__ int atomic_add_return (int i, volatile atomic_t *v)
- +{
- + int res;
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + res = v->counter + i;
- + v->counter = res;
- + local_irq_restore(flags);
- +
- + return res;
- +}
- +
- +static __inline__ int atomic_sub_return (int i, volatile atomic_t *v)
- +{
- + int res;
- + unsigned long flags;
- +
- + local_irq_save(flags);
- + res = v->counter - i;
- + v->counter = res;
- + local_irq_restore(flags);
- +
- + return res;
- +}
- +
- +#define atomic_dec_return(v) atomic_sub_return(1,(v))
- +#define atomic_inc_return(v) atomic_add_return(1,(v))
- +
- +/* Atomic operations are already serializing */
- +#define smp_mb__before_atomic_dec() barrier()
- +#define smp_mb__after_atomic_dec() barrier()
- +#define smp_mb__before_atomic_inc() barrier()
- +#define smp_mb__after_atomic_inc() barrier()
- +
- +
- +#endif /* !(__ARCH_NIOS2NOMMU_ATOMIC__) */
- +
- +
- --- linux/include/asm-nios2nommu/bitops.h
- +++ linux/include/asm-nios2nommu/bitops.h
- @@ -0,0 +1,472 @@
- +#ifndef _ASM_NIOS_BITOPS_H_
- +#define _ASM_NIOS_BITOPS_H_
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/bitops.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#ifdef __KERNEL__
- +// #include <linux/config.h>
- +#include <linux/compiler.h>
- +#include <asm/byteorder.h> /* swab32 */
- +#include <asm/system.h>
- +#endif
- +
- +/*
- + * Adapted to NIOS from generic bitops.h:
- + *
- + * For the benefit of those who are trying to port Linux to another
- + * architecture, here are some C-language equivalents. You should
- + * recode these in the native assembly language, if at all possible.
- + * To guarantee atomicity, these routines call cli() and sti() to
- + * disable interrupts while they operate. (You have to provide inline
- + * routines to cli() and sti().)
- + *
- + * Also note, these routines assume that you have 32 bit integers.
- + * You will have to change this if you are trying to port Linux to the
- + * Alpha architecture or to a Cray. :-)
- + *
- + * C language equivalents written by Theodore Ts'o, 9/26/92
- + */
- +
- +/*
- + * Generic ffs().
- + */
- +static inline int ffs(int x)
- +{
- + int r = 1;
- +
- + if (!x)
- + return 0;
- + if (!(x & 0xffff)) {
- + x >>= 16;
- + r += 16;
- + }
- + if (!(x & 0xff)) {
- + x >>= 8;
- + r += 8;
- + }
- + if (!(x & 0xf)) {
- + x >>= 4;
- + r += 4;
- + }
- + if (!(x & 3)) {
- + x >>= 2;
- + r += 2;
- + }
- + if (!(x & 1)) {
- + x >>= 1;
- + r += 1;
- + }
- + return r;
- +}
- +
- +/*
- + * Generic __ffs().
- + */
- +static inline int __ffs(int x)
- +{
- + int r = 0;
- +
- + if (!x)
- + return 0;
- + if (!(x & 0xffff)) {
- + x >>= 16;
- + r += 16;
- + }
- + if (!(x & 0xff)) {
- + x >>= 8;
- + r += 8;
- + }
- + if (!(x & 0xf)) {
- + x >>= 4;
- + r += 4;
- + }
- + if (!(x & 3)) {
- + x >>= 2;
- + r += 2;
- + }
- + if (!(x & 1)) {
- + x >>= 1;
- + r += 1;
- + }
- + return r;
- +}
- +
- +/*
- + * fls: find last bit set.
- + */
- +#define fls(x) generic_fls(x)
- +
- +
- +/*
- + * Every architecture must define this function. It's the fastest
- + * way of searching a 140-bit bitmap where the first 100 bits are
- + * unlikely to be set. It's guaranteed that at least one of the 140
- + * bits is cleared.
- + */
- +static inline int sched_find_first_bit(unsigned long *b)
- +{
- + if (unlikely(b[0]))
- + return __ffs(b[0]);
- + if (unlikely(b[1]))
- + return __ffs(b[1]) + 32;
- + if (unlikely(b[2]))
- + return __ffs(b[2]) + 64;
- + if (b[3])
- + return __ffs(b[3]) + 96;
- + return __ffs(b[4]) + 128;
- +}
- +
- +/*
- + * ffz = Find First Zero in word. Undefined if no zero exists,
- + * so code should check against ~0UL first..
- + */
- +static __inline__ unsigned long ffz(unsigned long word)
- +{
- + unsigned long result = 0;
- +
- + while(word & 1) {
- + result++;
- + word >>= 1;
- + }
- + return result;
- +}
- +
- +
- +static __inline__ void set_bit(int nr, volatile unsigned long * addr)
- +{
- + int * a = (int *) addr;
- + int mask;
- + unsigned long flags;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + local_irq_save(flags);
- + *a |= mask;
- + local_irq_restore(flags);
- +}
- +
- +static __inline__ void __set_bit(int nr, volatile unsigned long * addr)
- +{
- + int * a = (int *) addr;
- + int mask;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + *a |= mask;
- +}
- +
- +/*
- + * clear_bit() doesn't provide any barrier for the compiler.
- + */
- +#define smp_mb__before_clear_bit() barrier()
- +#define smp_mb__after_clear_bit() barrier()
- +
- +static __inline__ void clear_bit(int nr, volatile unsigned long * addr)
- +{
- + int * a = (int *) addr;
- + int mask;
- + unsigned long flags;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + local_irq_save(flags);
- + *a &= ~mask;
- + local_irq_restore(flags);
- +}
- +
- +static __inline__ void __clear_bit(int nr, volatile unsigned long * addr)
- +{
- + int * a = (int *) addr;
- + int mask;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + *a &= ~mask;
- +}
- +
- +static __inline__ void change_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask, flags;
- + unsigned long *ADDR = (unsigned long *) addr;
- +
- + ADDR += nr >> 5;
- + mask = 1 << (nr & 31);
- + local_irq_save(flags);
- + *ADDR ^= mask;
- + local_irq_restore(flags);
- +}
- +
- +static __inline__ void __change_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask;
- + unsigned long *ADDR = (unsigned long *) addr;
- +
- + ADDR += nr >> 5;
- + mask = 1 << (nr & 31);
- + *ADDR ^= mask;
- +}
- +
- +static __inline__ int test_and_set_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask, retval;
- + volatile unsigned int *a = (volatile unsigned int *) addr;
- + unsigned long flags;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + local_irq_save(flags);
- + retval = (mask & *a) != 0;
- + *a |= mask;
- + local_irq_restore(flags);
- +
- + return retval;
- +}
- +
- +static __inline__ int __test_and_set_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask, retval;
- + volatile unsigned int *a = (volatile unsigned int *) addr;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + retval = (mask & *a) != 0;
- + *a |= mask;
- + return retval;
- +}
- +
- +static __inline__ int test_and_clear_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask, retval;
- + volatile unsigned int *a = (volatile unsigned int *) addr;
- + unsigned long flags;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + local_irq_save(flags);
- + retval = (mask & *a) != 0;
- + *a &= ~mask;
- + local_irq_restore(flags);
- +
- + return retval;
- +}
- +
- +static __inline__ int __test_and_clear_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask, retval;
- + volatile unsigned int *a = (volatile unsigned int *) addr;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + retval = (mask & *a) != 0;
- + *a &= ~mask;
- + return retval;
- +}
- +
- +static __inline__ int test_and_change_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask, retval;
- + volatile unsigned int *a = (volatile unsigned int *) addr;
- + unsigned long flags;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + local_irq_save(flags);
- + retval = (mask & *a) != 0;
- + *a ^= mask;
- + local_irq_restore(flags);
- +
- + return retval;
- +}
- +
- +static __inline__ int __test_and_change_bit(int nr, volatile unsigned long * addr)
- +{
- + int mask, retval;
- + volatile unsigned int *a = (volatile unsigned int *) addr;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + retval = (mask & *a) != 0;
- + *a ^= mask;
- + return retval;
- +}
- +
- +/*
- + * This routine doesn't need to be atomic.
- + */
- +static __inline__ int __constant_test_bit(int nr, const volatile unsigned long * addr)
- +{
- + return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
- +}
- +
- +static __inline__ int __test_bit(int nr, const volatile unsigned long * addr)
- +{
- + int * a = (int *) addr;
- + int mask;
- +
- + a += nr >> 5;
- + mask = 1 << (nr & 0x1f);
- + return ((mask & *a) != 0);
- +}
- +
- +#define test_bit(nr,addr) \
- +(__builtin_constant_p(nr) ? \
- + __constant_test_bit((nr),(unsigned long *)(addr)) : \
- + __test_bit((nr),(unsigned long *)(addr)))
- +
- +
- +/* find_next_zero_bit() finds the first zero bit in a bit string of length
- + * 'size' bits, starting the search at bit 'offset'. This is largely based
- + * on Linus's ALPHA routines, which are pretty portable BTW.
- + */
- +
- +extern __inline__ unsigned long find_next_zero_bit(void *addr, unsigned long size, unsigned long offset)
- +{
- + unsigned long *p = ((unsigned long *) addr) + (offset >> 5);
- + unsigned long result = offset & ~31UL;
- + unsigned long tmp;
- +
- + if (offset >= size)
- + return size;
- + size -= result;
- + offset &= 31UL;
- + if (offset) {
- + tmp = *(p++);
- + tmp |= ~0UL >> (32-offset);
- + if (size < 32)
- + goto found_first;
- + if (~tmp)
- + goto found_middle;
- + size -= 32;
- + result += 32;
- + }
- + while (size & ~31UL) {
- + if (~(tmp = *(p++)))
- + goto found_middle;
- + result += 32;
- + size -= 32;
- + }
- + if (!size)
- + return result;
- + tmp = *p;
- +
- +found_first:
- + tmp |= ~0UL << size;
- + if (tmp == ~0UL)
- + return result + size;
- +found_middle:
- + return result + ffz(tmp);
- +}
- +
- +/*
- + * Find next one bit in a bitmap reasonably efficiently.
- + */
- +extern __inline__ unsigned long find_next_bit(const unsigned long *addr,
- + unsigned long size, unsigned long offset)
- +{
- + unsigned int *p = ((unsigned int *) addr) + (offset >> 5);
- + unsigned int result = offset & ~31UL;
- + unsigned int tmp;
- +
- + if (offset >= size)
- + return size;
- + size -= result;
- + offset &= 31UL;
- + if (offset) {
- + tmp = *p++;
- + tmp &= ~0UL << offset;
- + if (size < 32)
- + goto found_first;
- + if (tmp)
- + goto found_middle;
- + size -= 32;
- + result += 32;
- + }
- + while (size >= 32) {
- + if ((tmp = *p++) != 0)
- + goto found_middle;
- + result += 32;
- + size -= 32;
- + }
- + if (!size)
- + return result;
- + tmp = *p;
- +
- +found_first:
- + tmp &= ~0UL >> (32 - size);
- + if (tmp == 0UL) /* Are any bits set? */
- + return result + size; /* Nope. */
- +found_middle:
- + return result + __ffs(tmp);
- +}
- +
- +/*
- + * hweightN: returns the hamming weight (i.e. the number
- + * of bits set) of a N-bit word
- + */
- +
- +#define hweight32(x) generic_hweight32(x)
- +#define hweight16(x) generic_hweight16(x)
- +#define hweight8(x) generic_hweight8(x)
- +
- +/* Linus sez that gcc can optimize the following correctly, we'll see if this
- + * holds on the Sparc as it does for the ALPHA.
- + */
- +
- +#define find_first_zero_bit(addr, size) \
- + find_next_zero_bit((addr), (size), 0)
- +#define find_first_bit(addr, size) \
- + find_next_bit((addr), (size), 0)
- +
- +/* Now for the ext2 filesystem bit operations and helper routines.
- + *
- + * Both NIOS and ext2 are little endian, so these are the same as above.
- + */
- +
- +#define ext2_set_bit test_and_set_bit
- +#define ext2_clear_bit test_and_clear_bit
- +#define ext2_test_bit test_bit
- +
- +#define ext2_set_bit_atomic(lock, nr, addr) \
- + ({ \
- + int ret; \
- + spin_lock(lock); \
- + ret = ext2_set_bit((nr),(unsigned long *) (addr)); \
- + spin_unlock(lock); \
- + ret; \
- + })
- +
- +#define ext2_clear_bit_atomic(lock, nr, addr) \
- + ({ \
- + int ret; \
- + spin_lock(lock); \
- + ret = ext2_clear_bit((nr),(unsigned long *) (addr)); \
- + spin_unlock(lock); \
- + ret; \
- + })
- +
- +#define ext2_find_first_zero_bit find_first_zero_bit
- +#define ext2_find_next_zero_bit find_next_zero_bit
- +
- +#endif /* _ASM_NIOS_BITOPS_H */
- --- linux/include/asm-nios2nommu/bootinfo.h
- +++ linux/include/asm-nios2nommu/bootinfo.h
- @@ -0,0 +1,2 @@
- +
- +/* Nothing for nios2nommu */
- --- linux/include/asm-nios2nommu/bug.h
- +++ linux/include/asm-nios2nommu/bug.h
- @@ -0,0 +1,48 @@
- +#ifndef _NIOS2NOMMU_BUG_H
- +#define _NIOS2NOMMU_BUG_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/bug.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#define BUG() do { \
- + printk("%s(%d): kernel BUG!\n", __FILE__, __LINE__); \
- +} while (0)
- +
- +#define BUG_ON(condition) do { \
- + if (unlikely((condition)!=0)) \
- + BUG(); \
- +} while(0)
- +
- +#define PAGE_BUG(page) do { \
- + BUG(); \
- +} while (0)
- +
- +#define WARN_ON(condition) do { \
- + if (unlikely((condition)!=0)) { \
- + printk("Badness in %s at %s:%d\n", __FUNCTION__, __FILE__, __LINE__); \
- + dump_stack(); \
- + } \
- +} while (0)
- +
- +#endif
- --- linux/include/asm-nios2nommu/bugs.h
- +++ linux/include/asm-nios2nommu/bugs.h
- @@ -0,0 +1,40 @@
- +#ifndef __ASM_NIOS_BUGS_H
- +#define __ASM_NIOS_BUGS_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/bugs.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 1994 Linus Torvalds
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/*
- + * This is included by init/main.c to check for architecture-dependent bugs.
- + *
- + * Needs:
- + * void check_bugs(void);
- + */
- +
- +static void check_bugs(void)
- +{
- +}
- +
- +#endif
- --- linux/include/asm-nios2nommu/byteorder.h
- +++ linux/include/asm-nios2nommu/byteorder.h
- @@ -0,0 +1,38 @@
- +#ifndef __ASM_NIOS_BYTEORDER_H
- +#define __ASM_NIOS_BYTEORDER_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/byteorder.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/types.h>
- +
- +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
- +# define __BYTEORDER_HAS_U64__
- +# define __SWAB_64_THRU_32__
- +#endif
- +
- +#include <linux/byteorder/little_endian.h>
- +
- +#endif
- +
- --- linux/include/asm-nios2nommu/cachectl.h
- +++ linux/include/asm-nios2nommu/cachectl.h
- @@ -0,0 +1,36 @@
- +/*
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2NOMMU_CACHECTL_H
- +#define _NIOS2NOMMU_CACHECTL_H
- +
- +/* Definitions for the cacheflush system call. */
- +
- +#define FLUSH_SCOPE_LINE 1 /* Flush a cache line */
- +#define FLUSH_SCOPE_PAGE 2 /* Flush a page */
- +#define FLUSH_SCOPE_ALL 3 /* Flush the whole cache -- superuser only */
- +
- +#define FLUSH_CACHE_DATA 1 /* Writeback and flush data cache */
- +#define FLUSH_CACHE_INSN 2 /* Flush instruction cache */
- +#define FLUSH_CACHE_BOTH 3 /* Flush both caches */
- +
- +#endif /* _NIOS2NOMMU_CACHECTL_H */
- --- linux/include/asm-nios2nommu/cacheflush.h
- +++ linux/include/asm-nios2nommu/cacheflush.h
- @@ -0,0 +1,59 @@
- +#ifndef _NIOS2NOMMU_CACHEFLUSH_H
- +#define _NIOS2NOMMU_CACHEFLUSH_H
- +
- +/*
- + * Ported from m68knommu.
- + *
- + * (C) Copyright 2003, Microtronix Datacom Ltd.
- + * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com>
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#include <linux/mm.h>
- +
- +extern void cache_push (unsigned long vaddr, int len);
- +extern void dcache_push (unsigned long vaddr, int len);
- +extern void icache_push (unsigned long vaddr, int len);
- +extern void cache_push_all (void);
- +extern void cache_clear (unsigned long paddr, int len);
- +
- +#define flush_cache_all() __flush_cache_all()
- +#define flush_cache_mm(mm) do { } while (0)
- +#define flush_cache_range(vma, start, end) cache_push(start, end - start)
- +#define flush_cache_page(vma, vmaddr) do { } while (0)
- +#define flush_dcache_range(start,end) dcache_push(start, end - start)
- +#define flush_dcache_page(page) do { } while (0)
- +#define flush_dcache_mmap_lock(mapping) do { } while (0)
- +#define flush_dcache_mmap_unlock(mapping) do { } while (0)
- +#define flush_icache_range(start,end) cache_push(start, end - start)
- +#define flush_icache_page(vma,pg) do { } while (0)
- +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
- +
- +#define copy_to_user_page(vma, page, vaddr, dst, src, len) \
- + memcpy(dst, src, len)
- +#define copy_from_user_page(vma, page, vaddr, dst, src, len) \
- + memcpy(dst, src, len)
- +
- +
- +extern inline void __flush_cache_all(void)
- +{
- + cache_push_all();
- +}
- +
- +#endif /* _NIOS2NOMMU_CACHEFLUSH_H */
- --- linux/include/asm-nios2nommu/cache.h
- +++ linux/include/asm-nios2nommu/cache.h
- @@ -0,0 +1,34 @@
- +/*
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef __ARCH_NIOS2NOMMU_CACHE_H
- +#define __ARCH_NIOS2NOMMU_CACHE_H
- +
- +#include <asm/nios.h>
- +
- +/* bytes per L1 cache line */
- +#define L1_CACHE_BYTES nasys_icache_line_size /* this need to be at least 1 */
- +
- +
- +#define __cacheline_aligned
- +#define ____cacheline_aligned
- +
- +#endif
- --- linux/include/asm-nios2nommu/ChangeLog
- +++ linux/include/asm-nios2nommu/ChangeLog
- @@ -0,0 +1,14 @@
- +2004-06-29 Ken Hill <khill@microtronix.com>
- +
- + * bitops.h (find_next_zero_bit): Fix problem with with masking for found_first
- + handling. The masking of the upper bits for size < 32 bits would set all
- + the bits to 1. Removing any zero's there may have been.
- +
- +2004-06-02 Ken Hill <khill@microtronix.com>
- +
- + * processor.h (TASK_SIZE): Change na_sdram_end to nasys_program_mem_end to remove
- + dependancy on quartus memory component name.
- +
- + * page.h (PAGE_OFFSET): Change na_sdram to nasys_program_mem to remove
- + dependancy on quartus memory component name.
- +
- --- linux/include/asm-nios2nommu/checksum.h
- +++ linux/include/asm-nios2nommu/checksum.h
- @@ -0,0 +1,320 @@
- +#ifndef __NIOS2_CHECKSUM_H
- +#define __NIOS2_CHECKSUM_H
- +
- +/* checksum.h: IP/UDP/TCP checksum routines on the NIOS.
- + *
- + * Copyright(C) 1995 Linus Torvalds
- + * Copyright(C) 1995 Miguel de Icaza
- + * Copyright(C) 1996 David S. Miller
- + * Copyright(C) 2001 Ken Hill
- + * Copyright(C) 2004 Microtronix Datacom Ltd.
- + *
- + * derived from:
- + * Alpha checksum c-code
- + * ix86 inline assembly
- + * Spar nommu
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +/*
- + * computes the checksum of the TCP/UDP pseudo-header
- + * returns a 16-bit checksum, already complemented
- + */
- +
- +extern inline unsigned short csum_tcpudp_magic(unsigned long saddr,
- + unsigned long daddr,
- + unsigned short len,
- + unsigned short proto,
- + unsigned int sum)
- +{
- + barrier();
- + __asm__ __volatile__(
- +" add %0, %3, %0\n"
- +" bgeu %0, %3, 1f\n"
- +" addi %0, %0, 1\n"
- +"1: add %0, %4, %0\n"
- +" bgeu %0, %4, 1f\n"
- +" addi %0, %0, 1\n"
- +"1: add %0, %5, %0\n"
- +" bgeu %0, %5, 1f\n"
- +" addi %0, %0, 1\n"
- +"1:\n"
- +/*
- + We need the carry from the addition of 16-bit
- + significant addition, so we zap out the low bits
- + in one half, zap out the high bits in another,
- + shift them both up to the top 16-bits of a word
- + and do the carry producing addition, finally
- + shift the result back down to the low 16-bits.
- +
- + Actually, we can further optimize away two shifts
- + because we know the low bits of the original
- + value will be added to zero-only bits so cannot
- + affect the addition result nor the final carry
- + bit.
- +*/
- +" slli %1,%0, 16\n" /* Need a copy to fold with */
- + /* Bring the LOW 16 bits up */
- +" add %0, %1, %0\n" /* add and set carry, neat eh? */
- +" cmpltu r15, %0, %1\n" /* get remaining carry bit */
- +" srli %0, %0, 16\n" /* shift back down the result */
- +" add %0, %0, r15\n"
- +" nor %0, %0, %0\n" /* negate */
- + : "=&r" (sum), "=&r" (saddr)
- + : "0" (sum), "1" (saddr), "r" (ntohl(len+proto)), "r" (daddr)
- + : "r15");
- + return ((unsigned short) sum);
- + barrier();
- +}
- +
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +
- + extern inline unsigned short from32to16(unsigned long x)
- + {
- + barrier();
- + __asm__ __volatile__(
- + "add %0, %1, %0\n"
- + "cmpltu r15, %0, %1\n"
- + "srli %0, %0, 16\n"
- + "add %0, %0, r15\n"
- + : "=r" (x)
- + : "r" (x << 16), "0" (x)
- + : "r15");
- + return x;
- + barrier();
- + }
- +
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +
- +extern inline unsigned long do_csum(const unsigned char * buff, int len)
- +{
- + int odd, count;
- + unsigned long result = 0;
- +
- + barrier();
- + if (len <= 0)
- + goto out;
- + odd = 1 & (unsigned long) buff;
- + if (odd) {
- +////result = *buff; // dgt: Big endian
- + result = *buff << 8; // dgt: Little endian
- +
- + len--;
- + buff++;
- + }
- + count = len >> 1; /* nr of 16-bit words.. */
- + if (count) {
- + if (2 & (unsigned long) buff) {
- + result += *(unsigned short *) buff;
- + count--;
- + len -= 2;
- + buff += 2;
- + }
- + count >>= 1; /* nr of 32-bit words.. */
- + if (count) {
- + unsigned long carry = 0;
- + do {
- + unsigned long w = *(unsigned long *) buff;
- + count--;
- + buff += 4;
- + result += carry;
- + result += w;
- + carry = (w > result);
- + } while (count);
- + result += carry;
- + result = (result & 0xffff) + (result >> 16);
- + }
- + if (len & 2) {
- + result += *(unsigned short *) buff;
- + buff += 2;
- + }
- + }
- + if (len & 1)
- + result += *buff; /* This is little machine, byte is right */
- + result = from32to16(result);
- + if (odd)
- + result = ((result >> 8) & 0xff) | ((result & 0xff) << 8);
- +out:
- + return result;
- + barrier();
- + }
- +
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +
- +/* ihl is always 5 or greater, almost always is 5, iph is always word
- + * aligned but can fail to be dword aligned very often.
- + */
- +
- + extern inline unsigned short ip_fast_csum(const unsigned char *iph, unsigned int ihl)
- + {
- + unsigned int sum;
- +
- + barrier();
- + __asm__ __volatile__(
- +" andi r8, %1, 2\n" /* Remember original alignment */
- +" ldw %0, (%1)\n" /* 16 or 32 bit boundary */
- +" beq r8, r0, 1f\n" /* Aligned on 32 bit boundary, go */
- +" srli %0, %0, 16\n" /* Get correct 16 bits */
- +" addi %2, %2, -1\n" /* Take off for 4 bytes, pickup last 2 at end */
- +" addi %1, %1, 2\n" /* Adjust pointer to 32 bit boundary */
- +" br 2f\n"
- +"1:\n"
- +" addi %2, %2, -1\n"
- +" addi %1, %1, 4\n" /* Bump ptr a long word */
- +"2:\n"
- +" ldw r9, (%1)\n"
- +"1:\n"
- +" add %0, r9, %0\n"
- +" bgeu %0, r9, 2f\n"
- +" addi %0, %0, 1\n"
- +"2:\n"
- +" addi %1, %1, 4\n"
- +" addi %2, %2, -1\n"
- +" ldw r9, (%1)\n"
- +" bne %2, r0, 1b\n"
- +" beq r8, r0, 1f\n" /* 32 bit boundary time to leave */
- +" srli r9, r9, 16\n" /* 16 bit boundary, get correct 16 bits */
- +" add %0, r9, %0\n"
- +" bgeu %0, r9, 1f\n"
- +" addi %0, %0, 1\n"
- +"1:\n"
- +" slli %2, %0, 16\n"
- +" add %0, %2, %0\n"
- +" cmpltu r8, %0, %2\n"
- +" srli %0, %0, 16\n"
- +" add %0, %0, r8\n"
- +" nor %0, %0, %0\n"
- + : "=&r" (sum), "=&r" (iph), "=&r" (ihl)
- + : "1" (iph), "2" (ihl)
- + : "r8", "r9");
- + return sum;
- + barrier();
- + }
- +
- +/*these 2 functions are now in checksum.c */
- +unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum);
- +unsigned int csum_partial_copy(const char *src, char *dst, int len, int sum);
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +/*
- + * the same as csum_partial_copy, but copies from user space.
- + *
- + * here even more important to align src and dst on a 32-bit (or even
- + * better 64-bit) boundary
- + */
- +extern inline unsigned int
- +csum_partial_copy_from_user(const char *src, char *dst, int len, int sum, int *csum_err)
- +{
- + barrier();
- + if (csum_err) *csum_err = 0;
- + memcpy(dst, src, len);
- + return csum_partial(dst, len, sum);
- + barrier();
- +}
- +
- +#define csum_partial_copy_nocheck(src, dst, len, sum) \
- + csum_partial_copy ((src), (dst), (len), (sum))
- +
- +
- +/*
- + * this routine is used for miscellaneous IP-like checksums, mainly
- + * in icmp.c
- + */
- +
- +extern inline unsigned short ip_compute_csum(unsigned char * buff, int len)
- +{
- + barrier();
- + return ~from32to16(do_csum(buff,len));
- + barrier();
- +}
- +
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +
- +#define csum_partial_copy_fromuser(s, d, l, w) \
- + csum_partial_copy((char *) (s), (d), (l), (w))
- +
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +
- +/*
- + * Fold a partial checksum without adding pseudo headers
- + */
- +extern __inline__ unsigned int csum_fold(unsigned int sum)
- +{
- + barrier();
- + __asm__ __volatile__(
- + "add %0, %1, %0\n"
- + "cmpltu r8, %0, %1\n"
- + "srli %0, %0, 16\n"
- + "add %0, %0, r8\n"
- + "nor %0, %0, %0\n"
- + : "=r" (sum)
- + : "r" (sum << 16), "0" (sum)
- + : "r8");
- + return sum;
- + barrier();
- +}
- +
- +
- +/*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- +
- +
- +extern __inline__ unsigned long csum_tcpudp_nofold(unsigned long saddr,
- + unsigned long daddr,
- + unsigned short len,
- + unsigned short proto,
- + unsigned int sum)
- +{
- + barrier();
- + __asm__ __volatile__(
- + "add %0, %1, %0\n"
- + "cmpltu r8, %0, %1\n"
- + "add %0, %0, r8\n" /* add carry */
- + "add %0, %2, %0\n"
- + "cmpltu r8, %0, %2\n"
- + "add %0, %0, r8\n" /* add carry */
- + "add %0, %3, %0\n"
- + "cmpltu r8, %0, %3\n"
- + "add %0, %0, r8\n" /* add carry */
- + : "=r" (sum), "=r" (saddr)
- + : "r" (daddr), "r" ( (ntohs(len)<<16) + (proto*256) ),
- + "0" (sum),
- + "1" (saddr)
- + : "r8");
- +
- + return sum;
- + barrier();
- +}
- +
- +
- +#endif /* (__NIOS2_CHECKSUM_H) */
- --- linux/include/asm-nios2nommu/cprefix.h
- +++ linux/include/asm-nios2nommu/cprefix.h
- @@ -0,0 +1,38 @@
- +/* cprefix.h: This file is included by assembly source which needs
- + * to know what the c-label prefixes are. The newer versions
- + * of cpp that come with gcc predefine such things to help
- + * us out. The reason this stuff is needed is to make
- + * solaris compiles of the kernel work.
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef __NIOS2_CPREFIX_H
- +#define __NIOS2_CPREFIX_H
- +
- +#define C_LABEL_PREFIX
- +
- +#define CONCAT(a, b) CONCAT2(a, b)
- +#define CONCAT2(a, b) a##b
- +
- +#define C_LABEL(name) CONCAT(C_LABEL_PREFIX, name)
- +
- +#endif /* !(__NIOS2_CPREFIX_H) */
- --- linux/include/asm-nios2nommu/cpumask.h
- +++ linux/include/asm-nios2nommu/cpumask.h
- @@ -0,0 +1,28 @@
- +/*
- + * All rights reserved.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _ASM_NIOS2NOMMU_CPUMASK_H
- +#define _ASM_NIOS2NOMMU_CPUMASK_H
- +
- +#include <asm-generic/cpumask.h>
- +
- +#endif /* _ASM_NIOS2NOMMU_CPUMASK_H */
- --- linux/include/asm-nios2nommu/cputime.h
- +++ linux/include/asm-nios2nommu/cputime.h
- @@ -0,0 +1,31 @@
- +/*
- + * cputime.h
- + * (C) Copyright 2004, Microtronix Datacom Ltd.
- + *
- + * Taken from m68knommu
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2NOMMU_CPUTIME_H
- +#define __NIOS2NOMMU_CPUTIME_H
- +
- +#include <asm-generic/cputime.h>
- +
- +#endif /* __NIOS@NOMMU_CPUTIME_H */
- --- linux/include/asm-nios2nommu/current.h
- +++ linux/include/asm-nios2nommu/current.h
- @@ -0,0 +1,39 @@
- +#ifndef _NIOS2NOMMU_CURRENT_H
- +#define _NIOS2NOMMU_CURRENT_H
- +/*
- + * current.h
- + * (C) Copyright 2000, Lineo, David McCullough <davidm@uclinux.org>
- + * (C) Copyright 2002, Greg Ungerer (gerg@snapgear.com)
- + * (C) Copyright 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#include <linux/thread_info.h>
- +
- +struct task_struct;
- +
- +static inline struct task_struct *get_current(void)
- +{
- + return(current_thread_info()->task);
- +}
- +
- +#define current get_current()
- +
- +#endif /* _NIOS2NOMMU_CURRENT_H */
- --- linux/include/asm-nios2nommu/delay.h
- +++ linux/include/asm-nios2nommu/delay.h
- @@ -0,0 +1,96 @@
- +#ifndef _NIOS_DELAY_H
- +#define _NIOS_DELAY_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/delay.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/param.h>
- +
- +extern __inline__ void __delay(unsigned long loops)
- +{
- + int dummy;
- +
- + __asm__ __volatile__(
- + "1: \n\t"
- + " beq %0,zero,2f\n\t"
- + " addi %0, %0, -1\n\t"
- + " br 1b\n\t"
- + "2: \n\t"
- +
- + : "=r" (dummy) /* Need output for optimizer */
- +
- + : "0" (loops) /* %0 Input */
- + );
- +}
- +
- +/*
- + * Note that 19 * 226 == 4294 ==~ 2^32 / 10^6, so
- + * loops = (4294 * usecs * loops_per_jiffy * HZ) / 2^32.
- + *
- + * The mul instruction gives us loops = (a * b) / 2^32.
- + * We choose a = usecs * 19 * HZ and b = loops_per_jiffy * 226
- + * because this lets us support a wide range of HZ and
- + * loops_per_jiffy values without either a or b overflowing 2^32.
- + * Thus we need usecs * HZ <= (2^32 - 1) / 19 = 226050910 and
- + * loops_per_jiffy <= (2^32 - 1) / 226 = 19004280
- + * (which corresponds to ~3800 bogomips at HZ = 100).
- + * -- paulus
- + */
- +#define __MAX_UDELAY (226050910UL/HZ) /* maximum udelay argument */
- +#define __MAX_NDELAY (4294967295UL/HZ) /* maximum ndelay argument */
- +
- +extern unsigned long loops_per_jiffy;
- +
- +extern __inline__ void __udelay(unsigned int x)
- +{
- + unsigned int loops;
- +
- + __asm__("mulxuu %0,%1,%2" : "=r" (loops) :
- + "r" (x), "r" (loops_per_jiffy * 226));
- + __delay(loops);
- +}
- +
- +extern __inline__ void __ndelay(unsigned int x)
- +{
- + unsigned int loops;
- +
- + __asm__("mulxuu %0,%1,%2" : "=r" (loops) :
- + "r" (x), "r" (loops_per_jiffy * 5));
- + __delay(loops);
- +}
- +
- +extern void __bad_udelay(void); /* deliberately undefined */
- +extern void __bad_ndelay(void); /* deliberately undefined */
- +
- +#define udelay(n) (__builtin_constant_p(n)? \
- + ((n) > __MAX_UDELAY? __bad_udelay(): __udelay((n) * (19 * HZ))) : \
- + __udelay((n) * (19 * HZ)))
- +
- +#define ndelay(n) (__builtin_constant_p(n)? \
- + ((n) > __MAX_NDELAY? __bad_ndelay(): __ndelay((n) * HZ)) : \
- + __ndelay((n) * HZ))
- +
- +#define muldiv(a, b, c) (((a)*(b))/(c))
- +
- +#endif /* defined(_NIOS_DELAY_H) */
- --- linux/include/asm-nios2nommu/div64.h
- +++ linux/include/asm-nios2nommu/div64.h
- @@ -0,0 +1,31 @@
- +#ifndef __ASMNIOS_DIV64_H
- +#define __ASMNIOS_DIV64_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/div64.h
- + *
- + * Derived from m68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm-generic/div64.h>
- +
- +#endif
- +
- --- linux/include/asm-nios2nommu/dma.h
- +++ linux/include/asm-nios2nommu/dma.h
- @@ -0,0 +1,57 @@
- +/* $Id: dma.h,v 1.6 2005/04/07 21:00:26 wentao Exp $
- + *
- + * Copyright 2004 (C) Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _ASM_NIOS2_DMA_H
- +#define _ASM_NIOS2_DMA_H
- +
- +#include <linux/kernel.h>
- +#include <asm/asm-offsets.h>
- +
- +#define MAX_DMA_ADDRESS (LINUX_SDRAM_END)
- +
- +int request_dma(unsigned int, const char *);
- +void free_dma(unsigned int);
- +void enable_dma(unsigned int dmanr);
- +void disable_dma(unsigned int dmanr);
- +void set_dma_count(unsigned int dmanr, unsigned int count);
- +int get_dma_residue(unsigned int dmanr);
- +void nios2_set_dma_data_width(unsigned int dmanr, unsigned int width);
- +
- +void nios2_set_dma_handler(unsigned int dmanr, int (*handler)(void*, int), void* user);
- +int nios2_request_dma(const char *);
- +
- +void nios2_set_dma_mode(unsigned int dmanr, unsigned int mode);
- +void nios2_set_dma_rcon(unsigned int dmanr, unsigned int set);
- +void nios2_set_dma_wcon(unsigned int dmanr, unsigned int set);
- +void nios2_set_dma_raddr(unsigned int dmanr, unsigned int a);
- +void nios2_set_dma_waddr(unsigned int dmanr, unsigned int a);
- +
- +static inline unsigned long claim_dma_lock(void)
- +{
- +}
- +
- +static inline void release_dma_lock(unsigned long flags)
- +{
- +}
- +
- +#endif /* !(_ASM_NIOS2_DMA_H) */
- --- linux/include/asm-nios2nommu/dma-mapping.h
- +++ linux/include/asm-nios2nommu/dma-mapping.h
- @@ -0,0 +1,133 @@
- +/*
- + * include/asm-nios2nommu/dma-mapping.h
- + *
- + * This file exists so that #include <dma-mapping.h> doesn't break anything.
- + */
- +
- +#ifndef _ASM_DMA_MAPPING_H
- +#define _ASM_DMA_MAPPING_H
- +
- +#include <asm/scatterlist.h>
- +#include <linux/mm.h>
- +#include <asm/io.h>
- +#include <asm/cacheflush.h>
- +
- +static inline void *dma_alloc_coherent(struct device *dev, size_t size,
- + dma_addr_t *dma_handle, int flag)
- +{
- + BUG();
- + return 0;
- +}
- +
- +static inline void dma_free_coherent(struct device *dev, size_t size,
- + void *vaddr, dma_addr_t dma_handle)
- +{
- + BUG();
- +}
- +
- +/**
- + * dma_map_single - map a single buffer for streaming DMA
- + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
- + * @cpu_addr: CPU direct mapped address of buffer
- + * @size: size of buffer to map
- + * @dir: DMA transfer direction
- + *
- + * Ensure that any data held in the cache is appropriately discarded
- + * or written back.
- + *
- + * The device owns this memory once this call has completed. The CPU
- + * can regain ownership by calling dma_unmap_single() or
- + * dma_sync_single_for_cpu().
- + */
- +static inline dma_addr_t
- +dma_map_single(struct device *dev, void *cpu_addr, size_t size,
- + enum dma_data_direction dir)
- +{
- + cache_push ((unsigned long)cpu_addr, size);
- + return virt_to_bus((unsigned long)cpu_addr);
- +}
- +
- +/**
- + * dma_unmap_single - unmap a single buffer previously mapped
- + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
- + * @handle: DMA address of buffer
- + * @size: size of buffer to map
- + * @dir: DMA transfer direction
- + *
- + * Unmap a single streaming mode DMA translation. The handle and size
- + * must match what was provided in the previous dma_map_single() call.
- + * All other usages are undefined.
- + *
- + * After this call, reads by the CPU to the buffer are guaranteed to see
- + * whatever the device wrote there.
- + */
- +static inline void
- +dma_unmap_single(struct device *dev, dma_addr_t handle, size_t size,
- + enum dma_data_direction dir)
- +{
- + cache_clear((unsigned long)bus_to_virt(handle), size);
- +}
- +
- +/**
- + * dma_map_sg - map a set of SG buffers for streaming mode DMA
- + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
- + * @sg: list of buffers
- + * @nents: number of buffers to map
- + * @dir: DMA transfer direction
- + *
- + * Map a set of buffers described by scatterlist in streaming
- + * mode for DMA. This is the scatter-gather version of the
- + * above dma_map_single interface. Here the scatter gather list
- + * elements are each tagged with the appropriate dma address
- + * and length. They are obtained via sg_dma_{address,length}(SG).
- + *
- + * NOTE: An implementation may be able to use a smaller number of
- + * DMA address/length pairs than there are SG table elements.
- + * (for example via virtual mapping capabilities)
- + * The routine returns the number of addr/length pairs actually
- + * used, at most nents.
- + *
- + * Device ownership issues as mentioned above for dma_map_single are
- + * the same here.
- + */
- +static inline int
- +dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
- + enum dma_data_direction dir)
- +{
- + int i;
- +
- + for (i = 0; i < nents; i++, sg++) {
- + char *virt;
- +
- + sg->dma_address = page_to_bus(sg->page) + sg->offset;
- + virt = page_address(sg->page) + sg->offset;
- + cache_push ((unsigned long)virt, sg->length);
- + }
- +
- + return nents;
- +}
- +
- +/**
- + * dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
- + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
- + * @sg: list of buffers
- + * @nents: number of buffers to map
- + * @dir: DMA transfer direction
- + *
- + * Unmap a set of streaming mode DMA translations.
- + * Again, CPU read rules concerning calls here are the same as for
- + * dma_unmap_single() above.
- + */
- +static inline void
- +dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
- + enum dma_data_direction dir)
- +{
- + int i;
- +
- + for (i = 0; i < nents; i++, sg++) {
- + char *virt;
- + virt = page_address(sg->page) + sg->offset;
- + cache_clear ((unsigned long)virt, sg->length);
- + }
- +}
- +#endif /* _ASM_DMA_MAPPING_H */
- --- linux/include/asm-nios2nommu/elf.h
- +++ linux/include/asm-nios2nommu/elf.h
- @@ -0,0 +1,141 @@
- +#ifndef __NIOS2_ELF_H
- +#define __NIOS2_ELF_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/elf.h
- + *
- + * Nio2 ELF relocation types
- + *
- + * Derived from M68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + * Jan/20/2004 dgt NiosII
- + * Mar/18/2004 xwt NiosII relocation types added
- + *
- + ---------------------------------------------------------------------*/
- +
- +// #include <linux/config.h>
- +#include <asm/ptrace.h>
- +#include <asm/user.h>
- +
- +#define R_NIOS2_NONE 0
- +#define R_NIOS2_S16 1
- +#define R_NIOS2_U16 2
- +#define R_NIOS2_PCREL16 3
- +#define R_NIOS2_CALL26 4
- +#define R_NIOS2_IMM5 5
- +#define R_NIOS2_CACHE_OPX 6
- +#define R_NIOS2_IMM6 7
- +#define R_NIOS2_IMM8 8
- +#define R_NIOS2_HI16 9
- +#define R_NIOS2_LO16 10
- +#define R_NIOS2_HIADJ16 11
- +#define R_NIOS2_BFD_RELOC_32 12
- +#define R_NIOS2_BFD_RELOC_16 13
- +#define R_NIOS2_BFD_RELOC_8 14
- +#define R_NIOS2_GPREL 15
- +#define R_NIOS2_GNU_VTINHERIT 16
- +#define R_NIOS2_GNU_VTENTRY 17
- +#define R_NIOS2_UJMP 18
- +#define R_NIOS2_CJMP 19
- +#define R_NIOS2_CALLR 20
- +#define R_NIOS2_ALIGN 21
- +/* Keep this the last entry. */
- +#define R_NIOS2_NUM 22
- +
- +typedef unsigned long elf_greg_t;
- +
- +#define ELF_NGREG (sizeof (struct user_regs_struct) / sizeof(elf_greg_t))
- +typedef elf_greg_t elf_gregset_t[ELF_NGREG];
- +
- +typedef unsigned long elf_fpregset_t;
- +
- +/*
- + * This is used to ensure we don't load something for the wrong architecture.
- + */
- +#define elf_check_arch(x) \
- + ((x)->e_machine == EM_ALTERA_NIOS2)
- +
- +/*
- + * These are used to set parameters in the core dumps.
- + */
- +#define ELF_CLASS ELFCLASS32
- +#define ELF_DATA ELFDATA2LSB
- +#define ELF_ARCH EM_ALTERA_NIOS2
- +
- +#define ELF_PLAT_INIT(_r, load_addr) _r->a1 = 0
- +
- +#define USE_ELF_CORE_DUMP
- +#define ELF_EXEC_PAGESIZE 4096
- +
- +/* This is the location that an ET_DYN program is loaded if exec'ed. Typical
- + use of this is to invoke "./ld.so someprog" to test out a new version of
- + the loader. We need to make sure that it is out of the way of the program
- + that it will "exec", and that there is sufficient room for the brk. */
- +
- +#define ELF_ET_DYN_BASE 0xD0000000UL
- +
- +/* regs is struct pt_regs, pr_reg is elf_gregset_t (which is
- + now struct_user_regs, they are different) */
- +
- +#define ELF_CORE_COPY_REGS(pr_reg, regs) \
- + /* Bleech. */ \
- + pr_reg[0] = regs->r1; \
- + pr_reg[1] = regs->r2; \
- + pr_reg[2] = regs->r3; \
- + pr_reg[3] = regs->r4; \
- + pr_reg[4] = regs->r5; \
- + pr_reg[5] = regs->r6; \
- + pr_reg[6] = regs->r7; \
- + pr_reg[7] = regs->r8; \
- + pr_reg[8] = regs->r9; \
- + pr_reg[9] = regs->r10; \
- + pr_reg[10] = regs->r11; \
- + pr_reg[11] = regs->r12; \
- + pr_reg[12] = regs->r13; \
- + pr_reg[13] = regs->r14; \
- + pr_reg[14] = regs->r15; \
- + pr_reg[23] = regs->sp; \
- + pr_reg[26] = regs->estatus; \
- + { \
- + struct switch_stack *sw = ((struct switch_stack *)regs) - 1; \
- + pr_reg[15] = sw->r16; \
- + pr_reg[16] = sw->r17; \
- + pr_reg[17] = sw->r18; \
- + pr_reg[18] = sw->r19; \
- + pr_reg[19] = sw->r20; \
- + pr_reg[20] = sw->r21; \
- + pr_reg[21] = sw->r22; \
- + pr_reg[22] = sw->r23; \
- + pr_reg[24] = sw->fp; \
- + pr_reg[25] = sw->gp; \
- + }
- +
- +/* This yields a mask that user programs can use to figure out what
- + instruction set this cpu supports. */
- +
- +#define ELF_HWCAP (0)
- +
- +/* This yields a string that ld.so will use to load implementation
- + specific libraries for optimization. This is more specific in
- + intent than poking at uname or /proc/cpuinfo. */
- +
- +#define ELF_PLATFORM (NULL)
- +
- +#ifdef __KERNEL__
- +#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
- +#endif
- +
- +#endif
- --- linux/include/asm-nios2nommu/entry.h
- +++ linux/include/asm-nios2nommu/entry.h
- @@ -0,0 +1,188 @@
- +/*
- + * Hacked from m68knommu port.
- + *
- + * Copyright(C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2NOMMU_ENTRY_H
- +#define __NIOS2NOMMU_ENTRY_H
- +
- +#ifdef __ASSEMBLY__
- +
- +// #include <linux/config.h>
- +#include <asm/setup.h>
- +#include <asm/page.h>
- +#include <asm/asm-offsets.h>
- +
- +/*
- + * Stack layout in 'ret_from_exception':
- + *
- + * This allows access to the syscall arguments in registers r4-r8
- + *
- + * 0(sp) - r8
- + * 4(sp) - r9
- + * 8(sp) - r10
- + * C(sp) - r11
- + * 10(sp) - r12
- + * 14(sp) - r13
- + * 18(sp) - r14
- + * 1C(sp) - r15
- + * 20(sp) - r1
- + * 24(sp) - r2
- + * 28(sp) - r3
- + * 2C(sp) - r4
- + * 30(sp) - r5
- + * 34(sp) - r6
- + * 38(sp) - r7
- + * 3C(sp) - orig_r2
- + * 40(sp) - ra
- + * 44(sp) - fp
- + * 48(sp) - sp
- + * 4C(sp) - gp
- + * 50(sp) - estatus
- + * 54(sp) - status_extension
- + * 58(sp) - ea
- + *
- + */
- +
- +/* process bits for task_struct.flags */
- +PF_TRACESYS_OFF = 3
- +PF_TRACESYS_BIT = 5
- +PF_PTRACED_OFF = 3
- +PF_PTRACED_BIT = 4
- +PF_DTRACE_OFF = 1
- +PF_DTRACE_BIT = 5
- +
- +LENOSYS = 38
- +
- +/*
- + * This defines the normal kernel pt-regs layout.
- + *
- + */
- +
- +/*
- + * Standard Nios2 interrupt entry and exit macros.
- + * Must be called with interrupts disabled.
- + */
- +.macro SAVE_ALL
- + movia r24,status_extension // Read status extension
- + ldw r24,0(r24)
- + andi r24,r24,PS_S_ASM
- + bne r24,r0,1f // In supervisor mode, already on kernel stack
- + movia r24,_current_thread // Switch to current kernel stack
- + ldw r24,0(r24) // using the thread_info
- + addi r24,r24,THREAD_SIZE_ASM-PT_REGS_SIZE
- + stw sp,PT_SP(r24) // Save user stack before changing
- + mov sp,r24
- + br 2f
- +
- +1: mov r24,sp
- + addi sp,sp,-PT_REGS_SIZE // Backup the kernel stack pointer
- + stw r24,PT_SP(sp)
- +2: stw r1,PT_R1(sp)
- + stw r2,PT_R2(sp)
- + stw r3,PT_R3(sp)
- + stw r4,PT_R4(sp)
- + stw r5,PT_R5(sp)
- + stw r6,PT_R6(sp)
- + stw r7,PT_R7(sp)
- + stw r8,PT_R8(sp)
- + stw r9,PT_R9(sp)
- + stw r10,PT_R10(sp)
- + stw r11,PT_R11(sp)
- + stw r12,PT_R12(sp)
- + stw r13,PT_R13(sp)
- + stw r14,PT_R14(sp)
- + stw r15,PT_R15(sp)
- + stw r2,PT_ORIG_R2(sp)
- + stw ra,PT_RA(sp)
- + stw fp,PT_FP(sp)
- + stw gp,PT_GP(sp)
- + rdctl r24,estatus
- + stw r24,PT_ESTATUS(sp)
- + movia r24,status_extension // Read status extension
- + ldw r1,0(r24)
- + stw r1,PT_STATUS_EXTENSION(sp) // Store user/supervisor status
- + ORI32 r1,r1,PS_S_ASM // Set supervisor mode
- + stw r1,0(r24)
- + stw ea,PT_EA(sp)
- +.endm
- +
- +.macro RESTORE_ALL
- + ldw r1,PT_STATUS_EXTENSION(sp) // Restore user/supervisor status
- + movia r24,status_extension
- + stw r1,0(r24)
- + ldw r1,PT_R1(sp) // Restore registers
- + ldw r2,PT_R2(sp)
- + ldw r3,PT_R3(sp)
- + ldw r4,PT_R4(sp)
- + ldw r5,PT_R5(sp)
- + ldw r6,PT_R6(sp)
- + ldw r7,PT_R7(sp)
- + ldw r8,PT_R8(sp)
- + ldw r9,PT_R9(sp)
- + ldw r10,PT_R10(sp)
- + ldw r11,PT_R11(sp)
- + ldw r12,PT_R12(sp)
- + ldw r13,PT_R13(sp)
- + ldw r14,PT_R14(sp)
- + ldw r15,PT_R15(sp)
- + ldw ra,PT_RA(sp)
- + ldw fp,PT_FP(sp)
- + ldw gp,PT_GP(sp)
- + ldw r24,PT_ESTATUS(sp)
- + wrctl estatus,r24
- + ldw ea,PT_EA(sp)
- + ldw sp,PT_SP(sp) // Restore sp last
- +.endm
- +
- +.macro SAVE_SWITCH_STACK
- + addi sp,sp,-SWITCH_STACK_SIZE
- + stw r16,SW_R16(sp)
- + stw r17,SW_R17(sp)
- + stw r18,SW_R18(sp)
- + stw r19,SW_R19(sp)
- + stw r20,SW_R20(sp)
- + stw r21,SW_R21(sp)
- + stw r22,SW_R22(sp)
- + stw r23,SW_R23(sp)
- + stw fp,SW_FP(sp)
- + stw gp,SW_GP(sp)
- + stw ra,SW_RA(sp)
- +.endm
- +
- +.macro RESTORE_SWITCH_STACK
- + ldw r16,SW_R16(sp)
- + ldw r17,SW_R17(sp)
- + ldw r18,SW_R18(sp)
- + ldw r19,SW_R19(sp)
- + ldw r20,SW_R20(sp)
- + ldw r21,SW_R21(sp)
- + ldw r22,SW_R22(sp)
- + ldw r23,SW_R23(sp)
- + ldw fp,SW_FP(sp)
- + ldw gp,SW_GP(sp)
- + ldw ra,SW_RA(sp)
- + addi sp,sp,SWITCH_STACK_SIZE
- +.endm
- +
- +#endif /* __ASSEMBLY__ */
- +#endif /* __NIOS2NOMMU_ENTRY_H */
- --- linux/include/asm-nios2nommu/errno.h
- +++ linux/include/asm-nios2nommu/errno.h
- @@ -0,0 +1,6 @@
- +#ifndef _NIOS2NOMMU_ERRNO_H
- +#define _NIOS2NOMMU_ERRNO_H
- +
- +#include <asm-generic/errno.h>
- +
- +#endif /* _NIOS2NOMMU_ERRNO_H */
- --- linux/include/asm-nios2nommu/fcntl.h
- +++ linux/include/asm-nios2nommu/fcntl.h
- @@ -0,0 +1,110 @@
- +/*
- + * This file came from the m68k port.
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef _NIOS2_FCNTL_H
- +#define _NIOS2_FCNTL_H
- +
- +/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
- + located on an ext2 file system */
- +#define O_ACCMODE 0003
- +#define O_RDONLY 00
- +#define O_WRONLY 01
- +#define O_RDWR 02
- +#define O_CREAT 0100 /* not fcntl */
- +#define O_EXCL 0200 /* not fcntl */
- +#define O_NOCTTY 0400 /* not fcntl */
- +#define O_TRUNC 01000 /* not fcntl */
- +#define O_APPEND 02000
- +#define O_NONBLOCK 04000
- +#define O_NDELAY O_NONBLOCK
- +#define O_SYNC 010000
- +#define FASYNC 020000 /* fcntl, for BSD compatibility */
- +#define O_DIRECTORY 040000 /* must be a directory */
- +#define O_NOFOLLOW 0100000 /* don't follow links */
- +#define O_DIRECT 0200000 /* direct disk access hint - currently ignored */
- +#define O_LARGEFILE 0400000
- +#define O_NOATIME 01000000
- +
- +#define F_DUPFD 0 /* dup */
- +#define F_GETFD 1 /* get close_on_exec */
- +#define F_SETFD 2 /* set/clear close_on_exec */
- +#define F_GETFL 3 /* get file->f_flags */
- +#define F_SETFL 4 /* set file->f_flags */
- +#define F_GETLK 5
- +#define F_SETLK 6
- +#define F_SETLKW 7
- +
- +#define F_SETOWN 8 /* for sockets. */
- +#define F_GETOWN 9 /* for sockets. */
- +#define F_SETSIG 10 /* for sockets. */
- +#define F_GETSIG 11 /* for sockets. */
- +
- +#define F_GETLK64 12 /* using 'struct flock64' */
- +#define F_SETLK64 13
- +#define F_SETLKW64 14
- +
- +/* for F_[GET|SET]FL */
- +#define FD_CLOEXEC 1 /* actually anything with low bit set goes */
- +
- +/* for posix fcntl() and lockf() */
- +#define F_RDLCK 0
- +#define F_WRLCK 1
- +#define F_UNLCK 2
- +
- +/* for old implementation of bsd flock () */
- +#define F_EXLCK 4 /* or 3 */
- +#define F_SHLCK 8 /* or 4 */
- +
- +/* for leases */
- +#define F_INPROGRESS 16
- +
- +/* operations for bsd flock(), also used by the kernel implementation */
- +#define LOCK_SH 1 /* shared lock */
- +#define LOCK_EX 2 /* exclusive lock */
- +#define LOCK_NB 4 /* or'd with one of the above to prevent
- + blocking */
- +#define LOCK_UN 8 /* remove lock */
- +
- +#define LOCK_MAND 32 /* This is a mandatory flock */
- +#define LOCK_READ 64 /* ... Which allows concurrent read operations */
- +#define LOCK_WRITE 128 /* ... Which allows concurrent write operations */
- +#define LOCK_RW 192 /* ... Which allows concurrent read & write ops */
- +
- +struct flock {
- + short l_type;
- + short l_whence;
- + off_t l_start;
- + off_t l_len;
- + pid_t l_pid;
- +};
- +
- +struct flock64 {
- + short l_type;
- + short l_whence;
- + loff_t l_start;
- + loff_t l_len;
- + pid_t l_pid;
- +};
- +
- +#define F_LINUX_SPECIFIC_BASE 1024
- +#endif /* _NIOS2_FCNTL_H */
- --- linux/include/asm-nios2nommu/flat.h
- +++ linux/include/asm-nios2nommu/flat.h
- @@ -0,0 +1,126 @@
- +/*
- + * include/asm-nios2nommu/flat.h -- uClinux bFLT relocations
- + *
- + * Copyright (C) 2004,05 Microtronix Datacom Ltd
- + *
- + * This file is subject to the terms and conditions of the GNU General
- + * Public License. See the file COPYING in the main directory of this
- + * archive for more details.
- + *
- + * Written by Wentao Xu <wentao@microtronix.com>
- + */
- +
- +#ifndef __NIOS2_FLAT_H__
- +#define __NIOS2_FLAT_H__
- +
- +#define flat_reloc_valid(reloc, size) ((reloc) <= (size + 0x8000))
- +
- +/* The stack is 64-bit aligned for Nios II, so (sp - 1) shall
- + * be 64-bit aligned, where -1 is for argc
- + */
- +#define flat_stack_align(sp) (sp = (unsigned long *)(((unsigned long)sp - 1) & (-8)))
- +
- +/* The uClibc port for Nios II expects the argc is followed by argv and envp */
- +#define flat_argvp_envp_on_stack() 1
- +
- +#define flat_old_ram_flag(flags) (flags)
- +
- +/* We store the type of relocation in the top 4 bits of the `relval.' */
- +
- +/* Convert a relocation entry into an address. */
- +static inline unsigned long
- +flat_get_relocate_addr (unsigned long relval)
- +{
- + return relval & 0x0fffffff; /* Mask out top 4-bits */
- +}
- +
- +#define FLAT_NIOS2_RELOC_TYPE(relval) ((relval) >> 28)
- +
- +#define FLAT_NIOS2_R_32 0 /* Normal 32-bit reloc */
- +#define FLAT_NIOS2_R_HI_LO 1 /* High 16-bits + low 16-bits field */
- +#define FLAT_NIOS2_R_HIADJ_LO 2 /* High 16-bits adjust + low 16-bits field */
- +#define FLAT_NIOS2_R_CALL26 4 /* Call imm26 */
- +
- +/* Extract the address to be relocated from the symbol reference at rp;
- + * relval is the raw relocation-table entry from which RP is derived.
- + * rp shall always be 32-bit aligned
- + */
- +static inline unsigned long flat_get_addr_from_rp (unsigned long *rp,
- + unsigned long relval,
- + unsigned long flags)
- +{
- + switch (FLAT_NIOS2_RELOC_TYPE(relval))
- + {
- + case FLAT_NIOS2_R_32:
- + /* Simple 32-bit address. The loader expect it in bigger endian */
- + return htonl(*rp);
- +
- + case FLAT_NIOS2_R_HI_LO:
- + /* get the two 16-bit immediate value from instructions, then
- + * construct a 32-bit value. Again the loader expect bigger endian
- + */
- + return htonl ((((rp[0] >> 6) & 0xFFFF) << 16 ) |
- + ((rp[1] >> 6) & 0xFFFF));
- +
- + case FLAT_NIOS2_R_HIADJ_LO:
- + {
- + /* get the two 16-bit immediate value from instructions, then
- + * construct a 32-bit value. Again the loader expect bigger endian
- + */
- + unsigned int low, high;
- + high = (rp[0] >> 6) & 0xFFFF;
- + low = (rp[1] >> 6) & 0xFFFF;
- +
- + if ((low >> 15) & 1) high--;
- +
- + return htonl ((high << 16 ) | low );
- + }
- + case FLAT_NIOS2_R_CALL26:
- + /* the 26-bit immediate value is actually 28-bit */
- + return htonl(((*rp) >> 6) << 2);
- +
- + default:
- + return ~0; /* bogus value */
- + }
- +}
- +
- +/* Insert the address addr into the symbol reference at rp;
- + * relval is the raw relocation-table entry from which rp is derived.
- + * rp shall always be 32-bit aligned
- + */
- +static inline void flat_put_addr_at_rp (unsigned long *rp, unsigned long addr,
- + unsigned long relval)
- +{
- + unsigned long exist_val;
- + switch (FLAT_NIOS2_RELOC_TYPE (relval)) {
- + case FLAT_NIOS2_R_32:
- + /* Simple 32-bit address. */
- + *rp = addr;
- + break;
- +
- + case FLAT_NIOS2_R_HI_LO:
- + exist_val = rp[0];
- + rp[0] = ((((exist_val >> 22) << 16) | (addr >> 16)) << 6) | (exist_val & 0x3F);
- + exist_val = rp[1];
- + rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F);
- + break;
- +
- + case FLAT_NIOS2_R_HIADJ_LO:
- + {
- + unsigned int high = (addr >> 16);
- + if ((addr >> 15) & 1)
- + high = (high + 1) & 0xFFFF;
- + exist_val = rp[0];
- + rp[0] = ((((exist_val >> 22) << 16) | high) << 6) | (exist_val & 0x3F);
- + exist_val = rp[1];
- + rp[1] = ((((exist_val >> 22) << 16) | (addr & 0xFFFF)) << 6) | (exist_val & 0x3F);
- + break;
- + }
- + case FLAT_NIOS2_R_CALL26:
- + /* the opcode of CALL is 0, so just store the value */
- + *rp = ((addr >> 2) << 6);
- + break;
- + }
- +}
- +
- +#endif /* __NIOS2_FLAT_H__ */
- --- linux/include/asm-nios2nommu/hardirq.h
- +++ linux/include/asm-nios2nommu/hardirq.h
- @@ -0,0 +1,53 @@
- +/*
- + * Ported from m68knommu
- + *
- + * Copyright (C) 2003, Microtronix Datacom Ltd.
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef __NIOS2_HARDIRQ_H
- +#define __NIOS2_HARDIRQ_H
- +
- +// #include <linux/config.h>
- +#include <linux/cache.h>
- +#include <linux/threads.h>
- +
- +typedef struct {
- + unsigned int __softirq_pending;
- +} ____cacheline_aligned irq_cpustat_t;
- +
- +#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
- +
- +#define HARDIRQ_BITS 8
- +
- +/*
- + * The hardirq mask has to be large enough to have
- + * space for potentially all IRQ sources in the system
- + * nesting on a single CPU:
- + */
- +#if (1 << HARDIRQ_BITS) < NR_IRQS
- +# error HARDIRQ_BITS is too low!
- +#endif
- +
- +#ifdef CONFIG_SMP
- +# error nios2nommu SMP is not available
- +#endif /* CONFIG_SMP */
- +
- +#endif /* __NIOS2_HARDIRQ_H */
- --- linux/include/asm-nios2nommu/hdreg.h
- +++ linux/include/asm-nios2nommu/hdreg.h
- @@ -0,0 +1,30 @@
- +/*
- + * Copyright (C) 1994-1996 Linus Torvalds & authors
- + * Copyright (C) 2002 Wentau Xu (www.microtronix.com)
- + * copyright (C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2_HDREG_H
- +#define __NIOS2_HDREG_H
- +
- +typedef unsigned long ide_ioreg_t;
- +
- +#endif /* __NIOS2_HDREG_H */
- --- linux/include/asm-nios2nommu/hw_irq.h
- +++ linux/include/asm-nios2nommu/hw_irq.h
- @@ -0,0 +1,16 @@
- +#ifndef _ASM_HW_IRQ_H
- +#define _ASM_HW_IRQ_H
- +
- +/*
- + * linux/include/asm/hw_irq.h
- + *
- + * (C) 1992, 1993 Linus Torvalds, (C) 1997 Ingo Molnar
- + *
- + * moved some of the old arch/i386/kernel/irq.h to here. VY
- + *
- + * IRQ/IPI changes taken from work by Thomas Radke
- + * <tomsoft@informatik.tu-chemnitz.de>
- + */
- +
- +
- +#endif /* _ASM_HW_IRQ_H */
- --- linux/include/asm-nios2nommu/ide.h
- +++ linux/include/asm-nios2nommu/ide.h
- @@ -0,0 +1,47 @@
- +/*
- + * linux/include/asm-niosnommu2/ide.h
- + *
- + * Copyright (C) 1994-1996 Linus Torvalds & authors
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __ASMNIOS2_IDE_H
- +#define __ASMNIOS2_IDE_H
- +
- +#ifdef __KERNEL__
- +#undef MAX_HWIFS /* we're going to force it */
- +
- +#ifndef MAX_HWIFS
- +#define MAX_HWIFS 1
- +#endif
- +
- +#define IDE_ARCH_OBSOLETE_INIT
- +#define IDE_ARCH_OBSOLETE_DEFAULTS
- +#define ide_default_io_base(i) ((unsigned long)na_ide_ide)
- +#define ide_default_irq(b) (na_ide_ide_irq)
- +#define ide_init_default_irq(base) ide_default_irq(base)
- +#define ide_default_io_ctl(base) ((base) + (0xE*4))
- +
- +#include <asm-generic/ide_iops.h>
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* __ASMNIOS2_IDE_H */
- --- linux/include/asm-nios2nommu/init.h
- +++ linux/include/asm-nios2nommu/init.h
- @@ -0,0 +1,22 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#error "<asm/init.h> should never be used - use <linux/init.h> instead"
- --- linux/include/asm-nios2nommu/ioctl.h
- +++ linux/include/asm-nios2nommu/ioctl.h
- @@ -0,0 +1,100 @@
- +/* $Id: ioctl.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $
- + *
- + * linux/ioctl.h for Linux by H.H. Bergman.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2_IOCTL_H
- +#define _NIOS2_IOCTL_H
- +
- +/* ioctl command encoding: 32 bits total, command in lower 16 bits,
- + * size of the parameter structure in the lower 14 bits of the
- + * upper 16 bits.
- + * Encoding the size of the parameter structure in the ioctl request
- + * is useful for catching programs compiled with old versions
- + * and to avoid overwriting user space outside the user buffer area.
- + * The highest 2 bits are reserved for indicating the ``access mode''.
- + * NOTE: This limits the max parameter size to 16kB -1 !
- + */
- +
- +/*
- + * I don't really have any idea about what this should look like, so
- + * for the time being, this is heavily based on the PC definitions.
- + */
- +
- +/*
- + * The following is for compatibility across the various Linux
- + * platforms. The i386 ioctl numbering scheme doesn't really enforce
- + * a type field. De facto, however, the top 8 bits of the lower 16
- + * bits are indeed used as a type field, so we might just as well make
- + * this explicit here. Please be sure to use the decoding macros
- + * below from now on.
- + */
- +#define _IOC_NRBITS 8
- +#define _IOC_TYPEBITS 8
- +#define _IOC_SIZEBITS 14
- +#define _IOC_DIRBITS 2
- +
- +#define _IOC_NRMASK ((1 << _IOC_NRBITS)-1)
- +#define _IOC_TYPEMASK ((1 << _IOC_TYPEBITS)-1)
- +#define _IOC_SIZEMASK ((1 << _IOC_SIZEBITS)-1)
- +#define _IOC_DIRMASK ((1 << _IOC_DIRBITS)-1)
- +
- +#define _IOC_NRSHIFT 0
- +#define _IOC_TYPESHIFT (_IOC_NRSHIFT+_IOC_NRBITS)
- +#define _IOC_SIZESHIFT (_IOC_TYPESHIFT+_IOC_TYPEBITS)
- +#define _IOC_DIRSHIFT (_IOC_SIZESHIFT+_IOC_SIZEBITS)
- +
- +/*
- + * Direction bits.
- + */
- +#define _IOC_NONE 0U
- +#define _IOC_WRITE 1U
- +#define _IOC_READ 2U
- +
- +#define _IOC(dir,type,nr,size) \
- + (((dir) << _IOC_DIRSHIFT) | \
- + ((type) << _IOC_TYPESHIFT) | \
- + ((nr) << _IOC_NRSHIFT) | \
- + ((size) << _IOC_SIZESHIFT))
- +
- +/* used to create numbers */
- +#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
- +#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
- +#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
- +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
- +
- +/* used to decode ioctl numbers.. */
- +#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
- +#define _IOC_TYPE(nr) (((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)
- +#define _IOC_NR(nr) (((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)
- +#define _IOC_SIZE(nr) (((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)
- +
- +/* ...and for the drivers/sound files... */
- +
- +#define IOC_IN (_IOC_WRITE << _IOC_DIRSHIFT)
- +#define IOC_OUT (_IOC_READ << _IOC_DIRSHIFT)
- +#define IOC_INOUT ((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)
- +#define IOCSIZE_MASK (_IOC_SIZEMASK << _IOC_SIZESHIFT)
- +#define IOCSIZE_SHIFT (_IOC_SIZESHIFT)
- +
- +#endif /* _NIOS2_IOCTL_H */
- --- linux/include/asm-nios2nommu/ioctls.h
- +++ linux/include/asm-nios2nommu/ioctls.h
- @@ -0,0 +1,103 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __ARCH_NIOS2_IOCTLS_H__
- +#define __ARCH_NIOS2_IOCTLS_H__
- +
- +#include <asm/ioctl.h>
- +
- +/* 0x54 is just a magic number to make these relatively unique ('T') */
- +
- +#define TCGETS 0x5401
- +#define TCSETS 0x5402
- +#define TCSETSW 0x5403
- +#define TCSETSF 0x5404
- +#define TCGETA 0x5405
- +#define TCSETA 0x5406
- +#define TCSETAW 0x5407
- +#define TCSETAF 0x5408
- +#define TCSBRK 0x5409
- +#define TCXONC 0x540A
- +#define TCFLSH 0x540B
- +#define TIOCEXCL 0x540C
- +#define TIOCNXCL 0x540D
- +#define TIOCSCTTY 0x540E
- +#define TIOCGPGRP 0x540F
- +#define TIOCSPGRP 0x5410
- +#define TIOCOUTQ 0x5411
- +#define TIOCSTI 0x5412
- +#define TIOCGWINSZ 0x5413
- +#define TIOCSWINSZ 0x5414
- +#define TIOCMGET 0x5415
- +#define TIOCMBIS 0x5416
- +#define TIOCMBIC 0x5417
- +#define TIOCMSET 0x5418
- +#define TIOCGSOFTCAR 0x5419
- +#define TIOCSSOFTCAR 0x541A
- +#define FIONREAD 0x541B
- +#define TIOCINQ FIONREAD
- +#define TIOCLINUX 0x541C
- +#define TIOCCONS 0x541D
- +#define TIOCGSERIAL 0x541E
- +#define TIOCSSERIAL 0x541F
- +#define TIOCPKT 0x5420
- +#define FIONBIO 0x5421
- +#define TIOCNOTTY 0x5422
- +#define TIOCSETD 0x5423
- +#define TIOCGETD 0x5424
- +#define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */
- +#define TIOCTTYGSTRUCT 0x5426 /* For debugging only */
- +#define TIOCSBRK 0x5427 /* BSD compatibility */
- +#define TIOCCBRK 0x5428 /* BSD compatibility */
- +#define TIOCGSID 0x5429 /* Return the session ID of FD */
- +#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
- +#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
- +
- +#define FIONCLEX 0x5450 /* these numbers need to be adjusted. */
- +#define FIOCLEX 0x5451
- +#define FIOASYNC 0x5452
- +#define TIOCSERCONFIG 0x5453
- +#define TIOCSERGWILD 0x5454
- +#define TIOCSERSWILD 0x5455
- +#define TIOCGLCKTRMIOS 0x5456
- +#define TIOCSLCKTRMIOS 0x5457
- +#define TIOCSERGSTRUCT 0x5458 /* For debugging only */
- +#define TIOCSERGETLSR 0x5459 /* Get line status register */
- +#define TIOCSERGETMULTI 0x545A /* Get multiport config */
- +#define TIOCSERSETMULTI 0x545B /* Set multiport config */
- +
- +#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
- +#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
- +#define FIOQSIZE 0x545E
- +
- +/* Used for packet mode */
- +#define TIOCPKT_DATA 0
- +#define TIOCPKT_FLUSHREAD 1
- +#define TIOCPKT_FLUSHWRITE 2
- +#define TIOCPKT_STOP 4
- +#define TIOCPKT_START 8
- +#define TIOCPKT_NOSTOP 16
- +#define TIOCPKT_DOSTOP 32
- +
- +#define TIOCSER_TEMT 0x01 /* Transmitter physically empty */
- +
- +#endif /* __ARCH_NIOS2_IOCTLS_H__ */
- --- linux/include/asm-nios2nommu/io.h
- +++ linux/include/asm-nios2nommu/io.h
- @@ -0,0 +1,240 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2_IO_H
- +#define __NIOS2_IO_H
- +
- +#ifdef __KERNEL__
- +
- +#include <linux/kernel.h>
- +
- +#include <asm/page.h> /* IO address mapping routines need this */
- +#include <asm/system.h>
- +#include <asm/unaligned.h>
- +
- +extern void insw(unsigned long port, void *dst, unsigned long count);
- +extern void outsw(unsigned long port, void *src, unsigned long count);
- +extern void insl(unsigned long port, void *dst, unsigned long count);
- +extern void outsl(unsigned long port, void *src, unsigned long count);
- +
- +
- +/*
- + * readX/writeX() are used to access memory mapped devices. On some
- + * architectures the memory mapped IO stuff needs to be accessed
- + * differently. On the Nios architecture, we just read/write the
- + * memory location directly.
- + */
- +
- +#define readb(addr) \
- +({ \
- + unsigned char __res;\
- + __asm__ __volatile__( \
- + "ldbuio %0, 0(%1)" \
- + : "=r"(__res) \
- + : "r" (addr)); \
- + __res; \
- +})
- +
- +#define readw(addr) \
- +({ \
- + unsigned short __res;\
- + __asm__ __volatile__( \
- + "ldhuio %0, 0(%1)" \
- + : "=r"(__res) \
- + : "r" (addr)); \
- + __res; \
- +})
- +
- +#define readl(addr) \
- +({ \
- + unsigned int __res;\
- + __asm__ __volatile__( \
- + "ldwio %0, 0(%1)" \
- + : "=r"(__res) \
- + : "r" (addr)); \
- + __res; \
- +})
- +
- +#define writeb(b,addr) \
- +({ \
- + __asm__ __volatile__( \
- + "stbio %0, 0(%1)" \
- + : : "r"(b), "r" (addr)); \
- +})
- +
- +#define writew(b,addr) \
- +({ \
- + __asm__ __volatile__( \
- + "sthio %0, 0(%1)" \
- + : : "r"(b), "r" (addr)); \
- +})
- +
- +#define writel(b,addr) \
- +({ \
- + __asm__ __volatile__( \
- + "stwio %0, 0(%1)" \
- + : : "r"(b), "r" (addr)); \
- +})
- +
- +#define __raw_readb readb
- +#define __raw_readw readw
- +#define __raw_readl readl
- +#define __raw_writeb writeb
- +#define __raw_writew writew
- +#define __raw_writel writel
- +
- +#define mmiowb()
- +
- +/*
- + * make the short names macros so specific devices
- + * can override them as required
- + */
- +
- +#define memset_io(addr,c,len) memset((void *)(((unsigned int)(addr)) | 0x80000000),(c),(len))
- +#define memcpy_fromio(to,from,len) memcpy((to),(void *)(((unsigned int)(from)) | 0x80000000),(len))
- +#define memcpy_toio(to,from,len) memcpy((void *)(((unsigned int)(to)) | 0x80000000),(from),(len))
- +
- +#define inb(addr) readb(addr)
- +#define inw(addr) readw(addr)
- +#define inl(addr) readl(addr)
- +
- +#define outb(x,addr) ((void) writeb(x,addr))
- +#define outw(x,addr) ((void) writew(x,addr))
- +#define outl(x,addr) ((void) writel(x,addr))
- +
- +#define inb_p(addr) inb(addr)
- +#define inw_p(addr) inw(addr)
- +#define inl_p(addr) inl(addr)
- +
- +#define outb_p(x,addr) outb(x,addr)
- +#define outw_p(x,addr) outw(x,addr)
- +#define outl_p(x,addr) outl(x,addr)
- +
- +
- +
- +extern inline void insb(unsigned long port, void *dst, unsigned long count)
- +{
- + unsigned char *p=(unsigned char*)dst;
- + while (count--)
- + *p++ = inb(port);
- +}
- +
- +/* See arch/niosnommu/io.c for optimized version */
- +extern inline void _insw(unsigned long port, void *dst, unsigned long count)
- +{
- + unsigned short *p=(unsigned short*)dst;
- + while (count--)
- + *p++ = inw(port);
- +}
- +
- +/* See arch/niosnommu/kernel/io.c for unaligned destination pointer */
- +extern inline void _insl(unsigned long port, void *dst, unsigned long count)
- +{
- + unsigned long *p=(unsigned long*)dst;
- + while (count--)
- + *p++ = inl(port);
- +}
- +
- +extern inline void outsb(unsigned long port, void *src, unsigned long count)
- +{
- + unsigned char *p=(unsigned char*)src;
- + while (count--)
- + outb( *p++, port );
- +}
- +
- +/* See arch/niosnommu/io.c for optimized version */
- +extern inline void _outsw(unsigned long port, void *src, unsigned long count)
- +{
- + unsigned short *p=(unsigned short*)src;
- + while (count--)
- + outw( *p++, port );
- +}
- +
- +/* See arch/niosnommu/kernel/io.c for unaligned source pointer */
- +extern inline void _outsl(unsigned long port, void *src, unsigned long count)
- +{
- + unsigned long *p=(unsigned long*)src;
- + while (count--)
- + outl( *p++, port );
- +}
- +
- +
- +
- +extern inline void mapioaddr(unsigned long physaddr, unsigned long virt_addr,
- + int bus, int rdonly)
- +{
- + return;
- +}
- +
- +//vic - copied from m68knommu
- +
- +/* Values for nocacheflag and cmode */
- +#define IOMAP_FULL_CACHING 0
- +#define IOMAP_NOCACHE_SER 1
- +#define IOMAP_NOCACHE_NONSER 2
- +#define IOMAP_WRITETHROUGH 3
- +
- +extern void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag);
- +extern void __iounmap(void *addr, unsigned long size);
- +
- +extern inline void *ioremap(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
- +}
- +extern inline void *ioremap_nocache(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
- +}
- +extern inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
- +}
- +extern inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
- +}
- +
- +extern void iounmap(void *addr);
- +
- +
- +#define IO_SPACE_LIMIT 0xffffffff
- +
- +#define dma_cache_inv(_start,_size) do { } while (0)
- +#define dma_cache_wback(_start,_size) do { } while (0)
- +#define dma_cache_wback_inv(_start,_size) do { } while (0)
- +
- +/* Pages to physical address... */
- +#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
- +#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
- +
- +#define mm_ptov(vaddr) ((void *) (vaddr))
- +#define mm_vtop(vaddr) ((unsigned long) (vaddr))
- +#define phys_to_virt(vaddr) ((void *) (vaddr))
- +#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
- +
- +#define virt_to_bus virt_to_phys
- +#define bus_to_virt phys_to_virt
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* !(__NIOS2_IO_H) */
- +
- --- linux/include/asm-nios2nommu/ipcbuf.h
- +++ linux/include/asm-nios2nommu/ipcbuf.h
- @@ -0,0 +1,49 @@
- +#ifndef __NIOS2_IPCBUF_H__
- +#define __NIOS2_IPCBUF_H__
- +
- +/* Copied from asm-m68k/ipcbuf.h
- + * The user_ipc_perm structure for Nios architecture.
- + * Note extra padding because this structure is passed back and forth
- + * between kernel and user space.
- + *
- + * Pad space is left for:
- + * - 32-bit mode_t and seq
- + * - 2 miscellaneous 32-bit values
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +struct ipc64_perm
- +{
- + __kernel_key_t key;
- + __kernel_uid32_t uid;
- + __kernel_gid32_t gid;
- + __kernel_uid32_t cuid;
- + __kernel_gid32_t cgid;
- + __kernel_mode_t mode;
- + unsigned short __pad1;
- + unsigned short seq;
- + unsigned short __pad2;
- + unsigned long __unused1;
- + unsigned long __unused2;
- +};
- +
- +#endif /* __NIOS2_IPCBUF_H__ */
- --- linux/include/asm-nios2nommu/ipc.h
- +++ linux/include/asm-nios2nommu/ipc.h
- @@ -0,0 +1,51 @@
- +#ifndef __NIOS2_IPC_H__
- +#define __NIOS2_IPC_H__
- +
- +/* Copied from sparc version
- + * These are used to wrap system calls on the Nios.
- + *
- + * See arch/niosnommu/kernel/sys_nios.c for ugly details..
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +struct ipc_kludge {
- + struct msgbuf *msgp;
- + long msgtyp;
- +};
- +
- +#define SEMOP 1
- +#define SEMGET 2
- +#define SEMCTL 3
- +#define MSGSND 11
- +#define MSGRCV 12
- +#define MSGGET 13
- +#define MSGCTL 14
- +#define SHMAT 21
- +#define SHMDT 22
- +#define SHMGET 23
- +#define SHMCTL 24
- +
- +/* Used by the DIPC package, try and avoid reusing it */
- +#define DIPC 25
- +
- +#define IPCCALL(version,op) ((version)<<16 | (op))
- +
- +#endif
- --- linux/include/asm-nios2nommu/irq.h
- +++ linux/include/asm-nios2nommu/irq.h
- @@ -0,0 +1,182 @@
- +/*
- + * 21Mar2001 1.1 dgt/microtronix
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +
- +#ifndef _NIOS2NOMMU_IRQ_H_
- +#define _NIOS2NOMMU_IRQ_H_
- +
- +extern void disable_irq(unsigned int);
- +extern void enable_irq(unsigned int);
- +
- +// #include <linux/config.h>
- +#include <linux/interrupt.h>
- +
- +#define SYS_IRQS 32
- +#define NR_IRQS SYS_IRQS
- +
- +/*
- + * Interrupt source definitions
- + * General interrupt sources are the level 1-7.
- + * Adding an interrupt service routine for one of these sources
- + * results in the addition of that routine to a chain of routines.
- + * Each one is called in succession. Each individual interrupt
- + * service routine should determine if the device associated with
- + * that routine requires service.
- + */
- +
- +#define IRQ01 (1) /* level 1 interrupt */
- +#define IRQ02 (2) /* level 2 interrupt */
- +#define IRQ03 (3) /* level 3 interrupt */
- +#define IRQ04 (4) /* level 4 interrupt */
- +#define IRQ05 (5) /* level 5 interrupt */
- +#define IRQ06 (6) /* level 6 interrupt */
- +#define IRQ07 (7) /* level 7 interrupt */
- +#define IRQ08 (8) /* level 8 interrupt */
- +#define IRQ09 (9) /* level 9 interrupt */
- +#define IRQ0A (10) /* level 10 interrupt */
- +#define IRQ0B (11) /* level 11 interrupt */
- +#define IRQ0C (12) /* level 12 interrupt */
- +#define IRQ0D (13) /* level 13 interrupt */
- +#define IRQ0E (14) /* level 14 interrupt */
- +#define IRQ0F (15) /* level 15 interrupt */
- +#define IRQ10 (16) /* level 16 interrupt */
- +#define IRQ12 (17) /* level 17 interrupt */
- +#define IRQ13 (18) /* level 18 interrupt */
- +#define IRQ14 (19) /* level 19 interrupt */
- +#define IRQ15 (20) /* level 20 interrupt */
- +#define IRQ16 (21) /* level 21 interrupt */
- +#define IRQ17 (22) /* level 22 interrupt */
- +#define IRQ18 (23) /* level 23 interrupt */
- +#define IRQ19 (24) /* level 24 interrupt */
- +#define IRQ1A (25) /* level 25 interrupt */
- +#define IRQ1B (26) /* level 26 interrupt */
- +#define IRQ1C (27) /* level 27 interrupt */
- +#define IRQ1D (28) /* level 28 interrupt */
- +#define IRQ1E (29) /* level 29 interrupt */
- +#define IRQ1F (30) /* level 30 interrupt */
- +#define IRQ20 (31) /* level 31 interrupt */
- +#define IRQ21 (32) /* level 32 interrupt */
- +
- +#define IRQMAX IRQ21
- +
- +/*
- + * "Generic" interrupt sources
- + */
- +
- +/*
- + * Machine specific interrupt sources.
- + *
- + * Adding an interrupt service routine for a source with this bit
- + * set indicates a special machine specific interrupt source.
- + * The machine specific files define these sources.
- + *
- + * Removed, they are not used by any one.
- + */
- +
- +/*
- + * various flags for request_irq()
- + */
- +#define IRQ_FLG_LOCK (0x0001) /* handler is not replaceable */
- +#define IRQ_FLG_REPLACE (0x0002) /* replace existing handler */
- +#define IRQ_FLG_FAST (0x0004)
- +#define IRQ_FLG_SLOW (0x0008)
- +#define IRQ_FLG_STD (0x8000) /* internally used */
- +
- +/*
- + * Functions to set and clear the interrupt mask.
- + */
- +
- +/*
- + * Use a zero to clean the bit.
- + */
- +static inline void clrimr(int mask)
- +{
- + int flags;
- +
- + local_irq_save(flags);
- + __asm__ __volatile__(
- + "rdctl r8, ienable\n"
- + "and r8,r8,%0\n"
- + "wrctl ienable, r8\n"
- + : /* No output */
- + : "r" (mask)
- + : "r8");
- + local_irq_restore(flags);
- +}
- +
- +/*
- + * Use a one to set the bit.
- + */
- +static inline void setimr(int mask)
- +{
- + int flags;
- +
- + local_irq_save(flags);
- + __asm__ __volatile__(
- + "rdctl r8, ienable\n"
- + "or r8,r8,%0\n"
- + "wrctl ienable, r8\n"
- + : /* No output */
- + : "r" (mask)
- + : "r8");
- + local_irq_restore(flags);
- +}
- +
- +/*
- + * This structure is used to chain together the ISRs for a particular
- + * interrupt source (if it supports chaining).
- + */
- +typedef struct irq_node {
- + irqreturn_t (*handler)(int, void *, struct pt_regs *);
- + unsigned long flags;
- + void *dev_id;
- + const char *devname;
- + struct irq_node *next;
- +} irq_node_t;
- +
- +/*
- + * This function returns a new irq_node_t
- + */
- +extern irq_node_t *new_irq_node(void);
- +
- +/*
- + * This structure has only 4 elements for speed reasons
- + */
- +typedef struct irq_handler {
- + irqreturn_t (*handler)(int, void *, struct pt_regs *);
- + unsigned long flags;
- + void *dev_id;
- + const char *devname;
- +} irq_handler_t;
- +
- +/* count of spurious interrupts */
- +extern volatile unsigned int num_spurious;
- +
- +#define disable_irq_nosync(i) disable_irq(i)
- +
- +#ifndef irq_canonicalize
- +#define irq_canonicalize(i) (i)
- +#endif
- +
- +#endif /* _NIOS2NOMMU_IRQ_H_ */
- --- linux/include/asm-nios2nommu/kmap_types.h
- +++ linux/include/asm-nios2nommu/kmap_types.h
- @@ -0,0 +1,43 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _ASM_KMAP_TYPES_H
- +#define _ASM_KMAP_TYPES_H
- +
- +enum km_type {
- + KM_BOUNCE_READ,
- + KM_SKB_SUNRPC_DATA,
- + KM_SKB_DATA_SOFTIRQ,
- + KM_USER0,
- + KM_USER1,
- + KM_BIO_SRC_IRQ,
- + KM_BIO_DST_IRQ,
- + KM_PTE0,
- + KM_PTE1,
- + KM_IRQ0,
- + KM_IRQ1,
- + KM_SOFTIRQ0,
- + KM_SOFTIRQ1,
- + KM_TYPE_NR
- +};
- +
- +#endif
- --- linux/include/asm-nios2nommu/linkage.h
- +++ linux/include/asm-nios2nommu/linkage.h
- @@ -0,0 +1,29 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __ASM_LINKAGE_H
- +#define __ASM_LINKAGE_H
- +
- +#define __ALIGN .align 3
- +#define __ALIGN_STR ".align 3"
- +
- +#endif
- --- linux/include/asm-nios2nommu/linux_logo.h
- +++ linux/include/asm-nios2nommu/linux_logo.h
- @@ -0,0 +1,953 @@
- +/* $Id: linux_logo.h,v 1.3 2004/02/12 23:06:40 ken-h Exp $
- + * include/asm-nios/linux_logo.h: This is a linux logo
- + * to be displayed on boot.
- + *
- + * Copyright (C) 1996 Larry Ewing (lewing@isc.tamu.edu)
- + * Copyright (C) 1998 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- + * Copyright (C) 2004 Micrtronix Datacom Ltd.
- + *
- + * You can put anything here, but:
- + * LINUX_LOGO_COLORS has to be less than 224
- + * image size has to be 80x80
- + * values have to start from 0x20
- + * (i.e. RGB(linux_logo_red[0],
- + * linux_logo_green[0],
- + * linux_logo_blue[0]) is color 0x20)
- + * BW image has to be 80x80 as well, with MS bit
- + * on the left
- + * Serial_console ascii image can be any size,
- + * but should contain %s to display the version
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#include <linux/init.h>
- +#include <linux/version.h>
- +
- +#define linux_logo_banner "Linux/NIOS2 version " UTS_RELEASE
- +
- +#define __HAVE_ARCH_LINUX_LOGO
- +#define __HAVE_ARCH_LINUX_LOGO16
- +
- +#define LINUX_LOGO_COLORS 221
- +
- +#ifdef INCLUDE_LINUX_LOGO_DATA
- +
- +unsigned char linux_logo_red[] __initdata = {
- + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
- + 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
- + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
- + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
- + 0xc3, 0x65, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
- + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
- + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x76, 0x79,
- + 0x62, 0x36, 0x9a, 0xe2, 0xec, 0xe1, 0xb8, 0xd7,
- + 0xaf, 0x25, 0xbc, 0xc0, 0xef, 0xea, 0xe8, 0xe8,
- + 0xf5, 0xf1, 0xda, 0xd3, 0x79, 0xdb, 0xf4, 0xf6,
- + 0xf6, 0xf6, 0xe2, 0x3d, 0xb4, 0xce, 0xe6, 0xee,
- + 0xf6, 0x68, 0xd8, 0xec, 0xf5, 0xc6, 0xc8, 0x9c,
- + 0x89, 0xd2, 0xee, 0xcb, 0xb9, 0xd2, 0x66, 0x5e,
- + 0x8b, 0xbe, 0xa8, 0xd5, 0xca, 0xb6, 0xae, 0x9c,
- + 0xc5, 0xbe, 0xbe, 0xca, 0x90, 0xb2, 0x9a, 0xa8,
- + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfe,
- + 0xf6, 0xec, 0xfe, 0xd2, 0xea, 0xf5, 0xf2, 0xf2,
- + 0xe9, 0xee, 0xf6, 0xf2, 0xee, 0xf6, 0xda, 0xd4,
- + 0xfa, 0xca, 0xf2, 0xf6, 0xfe, 0xf2, 0xda, 0xe4,
- + 0xf6, 0xdd, 0xf2, 0xee, 0xfa, 0xf0, 0x12, 0x4a,
- + 0xd6, 0xf2, 0x8e, 0xf2, 0xf6, 0xf6, 0xb5, 0xf1,
- + 0x26, 0x9a, 0xea, 0xf6, 0xe0, 0xd2, 0x16, 0x9a,
- + 0x2e, 0xd2, 0x70, 0xd6, 0x46, 0x7c, 0xb4, 0x62,
- + 0xda, 0xee, 0xd6, 0xa3, 0x74, 0xa7, 0xa2, 0xe0,
- + 0xae, 0xbe, 0xce, 0xe2, 0xa3, 0x8e, 0x6d, 0x8e,
- + 0x32, 0xaf, 0x50, 0x9e, 0x5b, 0x8a, 0x98, 0x82,
- + 0x7a, 0x82, 0x56, 0x7c, 0x8a, 0x56, 0x5e, 0x86,
- + 0x6a, 0x52, 0x59, 0x64, 0x5e,
- +};
- +
- +unsigned char linux_logo_green[] __initdata = {
- + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
- + 0x12, 0x00, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
- + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x02, 0x65,
- + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
- + 0xc3, 0x62, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
- + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
- + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x62, 0x5c,
- + 0x4e, 0x26, 0x72, 0xaa, 0xba, 0xaf, 0x90, 0xae,
- + 0x92, 0x1a, 0xa4, 0x85, 0xb6, 0xbe, 0xc3, 0xc8,
- + 0xcf, 0xd0, 0xc2, 0xce, 0x57, 0xa2, 0xd6, 0xda,
- + 0xda, 0xd7, 0xb8, 0x2a, 0x7b, 0x91, 0xae, 0xca,
- + 0xda, 0x45, 0x9e, 0xb2, 0xd7, 0x9b, 0x90, 0x76,
- + 0x5c, 0xa2, 0xbe, 0xa6, 0x85, 0x96, 0x4e, 0x46,
- + 0x66, 0x92, 0x7a, 0x9a, 0x96, 0x9d, 0x9a, 0x6b,
- + 0x8a, 0x8e, 0xb2, 0xca, 0x90, 0xa6, 0x79, 0x7c,
- + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xfa,
- + 0xea, 0xd7, 0xf6, 0xbc, 0xda, 0xde, 0xda, 0xe6,
- + 0xca, 0xd8, 0xea, 0xe0, 0xcc, 0xf2, 0xce, 0xb2,
- + 0xee, 0xa2, 0xd6, 0xe6, 0xf6, 0xd7, 0xc5, 0xb8,
- + 0xc6, 0xb9, 0xce, 0xde, 0xce, 0xc6, 0x0e, 0x36,
- + 0xae, 0xbe, 0x86, 0xba, 0xbe, 0xe6, 0x8e, 0xc4,
- + 0x1e, 0x8e, 0xae, 0xba, 0xb2, 0xa6, 0x12, 0x7a,
- + 0x20, 0xc6, 0x64, 0xaa, 0x2f, 0x70, 0x85, 0x46,
- + 0xce, 0xd6, 0xa6, 0x6e, 0x51, 0x72, 0x92, 0xa6,
- + 0x87, 0x96, 0xa2, 0xd6, 0x85, 0x7a, 0x6a, 0x6e,
- + 0x22, 0x76, 0x36, 0x76, 0x3c, 0x6e, 0x63, 0x53,
- + 0x66, 0x62, 0x42, 0x50, 0x56, 0x42, 0x56, 0x56,
- + 0x56, 0x3e, 0x51, 0x52, 0x56,
- +};
- +
- +unsigned char linux_logo_blue[] __initdata = {
- + 0x00, 0x06, 0x0a, 0x0e, 0x16, 0x1a, 0x1e, 0x22,
- + 0x12, 0x01, 0x2a, 0x36, 0x42, 0x4e, 0x4a, 0x56,
- + 0x26, 0x46, 0x2e, 0x32, 0x52, 0x3a, 0x06, 0x65,
- + 0x5e, 0x3e, 0x74, 0x8a, 0xa2, 0x9a, 0x86, 0xc6,
- + 0xc3, 0x59, 0xbb, 0xd2, 0xda, 0xd6, 0xe2, 0xf6,
- + 0xfd, 0xae, 0x7b, 0xdd, 0xea, 0x6a, 0xaa, 0xe7,
- + 0xbe, 0x5a, 0xee, 0x9e, 0x95, 0x80, 0x2e, 0x08,
- + 0x0a, 0x06, 0x0a, 0x0b, 0x0b, 0x0f, 0x0c, 0x0f,
- + 0x3d, 0x09, 0x73, 0x09, 0x0d, 0x0a, 0x10, 0x1e,
- + 0x2d, 0x13, 0x86, 0xba, 0x19, 0x0a, 0x36, 0x3c,
- + 0x26, 0x14, 0x0d, 0x06, 0x07, 0x0a, 0x0b, 0x0f,
- + 0x4a, 0x06, 0x0a, 0x0c, 0x2b, 0x0a, 0x0b, 0x0a,
- + 0x06, 0x0a, 0x0a, 0x11, 0x0b, 0x0a, 0x0a, 0x1e,
- + 0x0f, 0x0d, 0x0a, 0x0b, 0x22, 0x6a, 0x72, 0x0b,
- + 0x0b, 0x22, 0x90, 0xca, 0x90, 0x92, 0x3c, 0x2c,
- + 0xb6, 0xf2, 0xce, 0xfa, 0xb2, 0x6e, 0xa6, 0xea,
- + 0xb6, 0x7c, 0xda, 0x8e, 0xa6, 0x87, 0x66, 0xb6,
- + 0x81, 0x6a, 0xc6, 0x9a, 0x5b, 0xd2, 0xb6, 0x6a,
- + 0xca, 0x45, 0x92, 0xb2, 0xca, 0x52, 0x8a, 0x3e,
- + 0x2e, 0x66, 0x66, 0xae, 0x3e, 0x47, 0x06, 0x0e,
- + 0x52, 0x36, 0x6a, 0x0e, 0x0e, 0xbe, 0x2c, 0x0e,
- + 0x0a, 0x5a, 0x0d, 0x0e, 0x3e, 0x0a, 0x06, 0x2e,
- + 0x06, 0x9e, 0x4e, 0x36, 0x06, 0x58, 0x24, 0x06,
- + 0x9e, 0xae, 0x3a, 0x08, 0x08, 0x07, 0x5e, 0x0a,
- + 0x32, 0x2e, 0x2a, 0xb2, 0x43, 0x48, 0x5f, 0x2e,
- + 0x06, 0x06, 0x07, 0x24, 0x06, 0x32, 0x06, 0x06,
- + 0x46, 0x2e, 0x22, 0x06, 0x06, 0x1e, 0x4c, 0x06,
- + 0x3a, 0x22, 0x42, 0x34, 0x42,
- +};
- +
- +unsigned char linux_logo[] __initdata = {
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22, 0x22,
- + 0x22, 0x21, 0x21, 0x21, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
- + 0x26, 0x26, 0x25, 0x28, 0x23, 0x22, 0x21, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x21, 0x23, 0x25, 0x2a, 0x2b, 0x2c, 0x2d, 0x2d,
- + 0x2d, 0x2e, 0x2c, 0x2b, 0x2a, 0x25, 0x28, 0x22,
- + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
- + 0x24, 0x2a, 0x2c, 0x2f, 0x2c, 0x30, 0x30, 0x24,
- + 0x25, 0x27, 0x2b, 0x2c, 0x2f, 0x31, 0x32, 0x25,
- + 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
- + 0x33, 0x34, 0x35, 0x21, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x21, 0x2b, 0x2f, 0x2c,
- + 0x30, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
- + 0x2d, 0x27, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x31,
- + 0x2d, 0x32, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x21, 0x28, 0x2a, 0x34,
- + 0x25, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x23, 0x32, 0x27, 0x21, 0x36,
- + 0x2a, 0x2d, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x22, 0x26, 0x2c, 0x35,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x25, 0x2f, 0x37, 0x32, 0x22,
- + 0x36, 0x35, 0x31, 0x27, 0x22, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x22,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x26, 0x38, 0x38, 0x35, 0x25,
- + 0x36, 0x21, 0x2d, 0x2b, 0x24, 0x21, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x21, 0x24, 0x39, 0x39, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x25, 0x2b, 0x30, 0x28, 0x22,
- + 0x36, 0x36, 0x27, 0x34, 0x30, 0x23, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x21, 0x26, 0x2d, 0x26, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x22, 0x22, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x2d, 0x33, 0x28, 0x21, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x2b, 0x2c, 0x25, 0x21, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x36, 0x36,
- + 0x36, 0x21, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x21, 0x23, 0x22, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x28, 0x34, 0x27, 0x22, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
- + 0x21, 0x21, 0x24, 0x27, 0x21, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x28, 0x27, 0x22, 0x33, 0x24, 0x36,
- + 0x36, 0x36, 0x36, 0x22, 0x2f, 0x2a, 0x23, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x29, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x36,
- + 0x30, 0x3a, 0x38, 0x24, 0x24, 0x36, 0x36, 0x36,
- + 0x23, 0x2f, 0x3b, 0x3c, 0x3d, 0x30, 0x25, 0x21,
- + 0x36, 0x36, 0x36, 0x36, 0x2f, 0x32, 0x23, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x23,
- + 0x3e, 0x3f, 0x40, 0x3a, 0x22, 0x36, 0x36, 0x21,
- + 0x41, 0x42, 0x43, 0x44, 0x45, 0x3e, 0x23, 0x21,
- + 0x36, 0x36, 0x36, 0x36, 0x2f, 0x33, 0x28, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x32, 0x2f, 0x36, 0x2b,
- + 0x44, 0x40, 0x46, 0x47, 0x35, 0x36, 0x36, 0x26,
- + 0x43, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x2e, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x32, 0x34, 0x36, 0x4d,
- + 0x4e, 0x25, 0x2f, 0x46, 0x4a, 0x22, 0x23, 0x32,
- + 0x4f, 0x50, 0x21, 0x31, 0x51, 0x52, 0x53, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x31, 0x35, 0x24, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x29, 0x20, 0x29, 0x29, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x2f, 0x21, 0x3a,
- + 0x4d, 0x21, 0x31, 0x54, 0x55, 0x28, 0x30, 0x2b,
- + 0x4b, 0x4d, 0x36, 0x23, 0x32, 0x50, 0x3f, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x29, 0x20, 0x29, 0x20, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x38, 0x23, 0x37,
- + 0x55, 0x36, 0x28, 0x3a, 0x56, 0x57, 0x57, 0x58,
- + 0x3c, 0x4d, 0x36, 0x36, 0x36, 0x40, 0x40, 0x21,
- + 0x36, 0x36, 0x36, 0x36, 0x2e, 0x39, 0x24, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x29, 0x29, 0x29, 0x20, 0x29, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x30, 0x51, 0x23, 0x35,
- + 0x43, 0x25, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e,
- + 0x5f, 0x60, 0x61, 0x36, 0x31, 0x47, 0x3b, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x31, 0x2c, 0x25, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x23, 0x22,
- + 0x40, 0x62, 0x63, 0x5d, 0x64, 0x65, 0x66, 0x67,
- + 0x68, 0x69, 0x66, 0x5e, 0x6a, 0x6b, 0x2a, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x33, 0x2e, 0x26, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x27, 0x2f, 0x23, 0x36,
- + 0x6c, 0x63, 0x6d, 0x64, 0x5c, 0x66, 0x69, 0x6e,
- + 0x6f, 0x70, 0x71, 0x69, 0x69, 0x72, 0x6c, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x33, 0x34, 0x27, 0x22,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x27, 0x34, 0x26, 0x73,
- + 0x74, 0x75, 0x76, 0x64, 0x65, 0x77, 0x69, 0x78,
- + 0x70, 0x71, 0x71, 0x71, 0x72, 0x5f, 0x5e, 0x21,
- + 0x36, 0x36, 0x36, 0x36, 0x25, 0x38, 0x2a, 0x23,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x33, 0x79,
- + 0x63, 0x7a, 0x7b, 0x5c, 0x66, 0x69, 0x6e, 0x7c,
- + 0x71, 0x71, 0x69, 0x7d, 0x7e, 0x7a, 0x7f, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x21, 0x51, 0x2b, 0x28,
- + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2d, 0x32, 0x24,
- + 0x80, 0x81, 0x64, 0x82, 0x77, 0x69, 0x71, 0x71,
- + 0x69, 0x83, 0x84, 0x85, 0x7a, 0x85, 0x86, 0x36,
- + 0x21, 0x2b, 0x23, 0x36, 0x36, 0x39, 0x2e, 0x26,
- + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x27, 0x2d, 0x33, 0x21,
- + 0x87, 0x88, 0x89, 0x72, 0x67, 0x66, 0x5f, 0x89,
- + 0x8a, 0x63, 0x85, 0x8b, 0x8c, 0x8d, 0x41, 0x36,
- + 0x36, 0x2d, 0x3a, 0x35, 0x36, 0x24, 0x51, 0x32,
- + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x30, 0x2f, 0x33, 0x21,
- + 0x55, 0x8e, 0x8f, 0x8a, 0x7d, 0x5e, 0x90, 0x7e,
- + 0x75, 0x75, 0x90, 0x62, 0x40, 0x3f, 0x49, 0x23,
- + 0x36, 0x24, 0x3a, 0x3a, 0x24, 0x36, 0x2e, 0x31,
- + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x21, 0x28, 0x33, 0x37, 0x25, 0x22,
- + 0x3b, 0x50, 0x8e, 0x8f, 0x90, 0x7e, 0x90, 0x63,
- + 0x74, 0x91, 0x92, 0x42, 0x93, 0x4b, 0x45, 0x2c,
- + 0x36, 0x36, 0x33, 0x39, 0x21, 0x36, 0x22, 0x51,
- + 0x33, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x22, 0x27, 0x2e, 0x2e, 0x36, 0x21,
- + 0x94, 0x3f, 0x50, 0x95, 0x96, 0x8f, 0x8f, 0x97,
- + 0x8e, 0x42, 0x50, 0x43, 0x47, 0x48, 0x48, 0x98,
- + 0x21, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39,
- + 0x2e, 0x27, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x22, 0x24, 0x2b, 0x38, 0x28, 0x36, 0x32,
- + 0x4c, 0x4b, 0x50, 0x50, 0x50, 0x42, 0x42, 0x50,
- + 0x50, 0x40, 0x45, 0x99, 0x48, 0x48, 0x48, 0x48,
- + 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x23,
- + 0x2f, 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x21, 0x28, 0x32, 0x51, 0x32, 0x28, 0x21, 0x98,
- + 0x48, 0x47, 0x9a, 0x50, 0x50, 0x50, 0x50, 0x50,
- + 0x9a, 0x4f, 0x9b, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x93, 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x2a, 0x2f, 0x2a, 0x28, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x23, 0x30, 0x2e, 0x2c, 0x36, 0x21, 0x51, 0x9b,
- + 0x48, 0x48, 0x52, 0x3f, 0x50, 0x50, 0x40, 0x4b,
- + 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x34, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x2d, 0x31, 0x27, 0x23, 0x21, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
- + 0x27, 0x2c, 0x2d, 0x21, 0x36, 0x28, 0x44, 0x48,
- + 0x48, 0x48, 0x48, 0x47, 0x46, 0x4f, 0x47, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x9c, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x28, 0x51, 0x39, 0x26, 0x22, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, 0x25,
- + 0x35, 0x51, 0x28, 0x36, 0x36, 0x9d, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x9b, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x4f, 0x28, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x28, 0x38, 0x2b, 0x25, 0x22, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24, 0x33,
- + 0x51, 0x25, 0x36, 0x36, 0x23, 0x40, 0x9b, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x9b, 0x99, 0x2b, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x30, 0x2f, 0x33, 0x24, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x21, 0x23, 0x30, 0x34,
- + 0x27, 0x36, 0x36, 0x36, 0x2a, 0x40, 0x47, 0x48,
- + 0x48, 0x48, 0x48, 0x9b, 0x99, 0x99, 0x9b, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x47, 0x52,
- + 0x46, 0x4f, 0x37, 0x21, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x30, 0x34, 0x2a, 0x23,
- + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x22, 0x25, 0x39, 0x2c,
- + 0x36, 0x36, 0x36, 0x21, 0x31, 0x4e, 0x9a, 0x4c,
- + 0x47, 0x9b, 0x9b, 0x52, 0x46, 0x4f, 0x52, 0x9b,
- + 0x9b, 0x9b, 0x47, 0x4f, 0x45, 0x9a, 0x93, 0x93,
- + 0x3f, 0x93, 0x98, 0x28, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c, 0x26,
- + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x23, 0x2a, 0x34, 0x28,
- + 0x36, 0x36, 0x36, 0x22, 0x38, 0x98, 0x44, 0x99,
- + 0x9b, 0x48, 0x48, 0x9b, 0x4c, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x47, 0x52, 0x46, 0x43, 0x93,
- + 0x40, 0x40, 0x43, 0x53, 0x21, 0x23, 0x33, 0x23,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x2f, 0x32,
- + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x21, 0x24, 0x2b, 0x31, 0x36,
- + 0x36, 0x22, 0x36, 0x24, 0x9e, 0x4f, 0x9b, 0x48,
- + 0x48, 0x48, 0x48, 0x9b, 0x99, 0x9f, 0x52, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x47,
- + 0x4f, 0x9a, 0x3f, 0x46, 0x38, 0x36, 0x21, 0x30,
- + 0x26, 0x36, 0x36, 0x36, 0x36, 0x36, 0x39, 0x2c,
- + 0x25, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x22, 0x26, 0x2e, 0x33, 0x36,
- + 0x25, 0x25, 0x36, 0x4d, 0x52, 0x48, 0x48, 0x48,
- + 0x47, 0x9f, 0x48, 0x48, 0x48, 0xa0, 0xa1, 0xa2,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x47, 0x44, 0x93, 0x43, 0x23, 0x36, 0x36,
- + 0x26, 0x24, 0x36, 0x36, 0x36, 0x36, 0x28, 0x2f,
- + 0x2a, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x23, 0x2a, 0x51, 0x24, 0x36,
- + 0x2a, 0x36, 0x28, 0x44, 0x48, 0x48, 0x48, 0x48,
- + 0xa3, 0xa4, 0x48, 0x48, 0x9f, 0xa5, 0xa6, 0x9f,
- + 0x48, 0x48, 0x48, 0xa2, 0xa7, 0x47, 0x48, 0x48,
- + 0x48, 0x48, 0x9b, 0x4b, 0x44, 0x37, 0x36, 0x23,
- + 0x28, 0x30, 0x22, 0x36, 0x36, 0x36, 0x36, 0x2d,
- + 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x21, 0x28, 0x2b, 0x34, 0x36, 0x25,
- + 0x24, 0x36, 0x4a, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0xa8, 0xa1, 0x48, 0x48, 0x9f, 0xa9, 0xa6, 0x9f,
- + 0x48, 0x48, 0xaa, 0xa1, 0xa5, 0x9f, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x9b, 0x52, 0x3f, 0x21, 0x30,
- + 0x35, 0x25, 0x30, 0x36, 0x36, 0x36, 0x36, 0x32,
- + 0x2d, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x22, 0x26, 0x2e, 0x35, 0x36, 0x2a,
- + 0x36, 0x24, 0x4f, 0x48, 0x52, 0x52, 0x48, 0x48,
- + 0xab, 0xac, 0xa0, 0x48, 0xad, 0xa6, 0xa6, 0x9f,
- + 0x48, 0xa2, 0xa9, 0xa6, 0xa2, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x47, 0x32, 0x30,
- + 0x2a, 0x23, 0x30, 0x23, 0x36, 0x36, 0x36, 0x21,
- + 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x21, 0x23, 0x2a, 0x51, 0x28, 0x28, 0x25,
- + 0x36, 0x3a, 0x48, 0x48, 0xae, 0xaf, 0x48, 0x48,
- + 0xad, 0xac, 0xa1, 0x9f, 0xa2, 0xa9, 0xa9, 0xa2,
- + 0x48, 0xab, 0x78, 0xa7, 0x48, 0x48, 0x48, 0x48,
- + 0x9f, 0x48, 0x48, 0x48, 0x48, 0x48, 0x38, 0x21,
- + 0x36, 0x36, 0x22, 0x27, 0x36, 0x36, 0x36, 0x36,
- + 0x2e, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x22, 0x25, 0x2c, 0x34, 0x36, 0x30, 0x21,
- + 0x23, 0x43, 0x48, 0x48, 0xb0, 0xb1, 0xb2, 0x9f,
- + 0x48, 0xb3, 0xa5, 0xb3, 0xab, 0xa9, 0xa9, 0xb3,
- + 0xb4, 0xa9, 0xb5, 0xb0, 0x48, 0x48, 0xa0, 0xa5,
- + 0xa1, 0xad, 0x48, 0x48, 0x48, 0x48, 0x94, 0x36,
- + 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
- + 0x2a, 0x2e, 0x26, 0x22, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x21, 0x23, 0x2a, 0x51, 0x25, 0x21, 0x2a, 0x36,
- + 0x2e, 0x9b, 0x48, 0x48, 0x48, 0xb6, 0xb7, 0xa4,
- + 0xa2, 0xa7, 0xb5, 0x78, 0x6f, 0x6f, 0x6e, 0x6f,
- + 0xa9, 0xb5, 0xab, 0x48, 0x9f, 0xab, 0xa9, 0xa1,
- + 0xaa, 0x48, 0x48, 0x48, 0x48, 0x48, 0x98, 0x36,
- + 0x36, 0x36, 0x36, 0x32, 0x36, 0x36, 0x36, 0x36,
- + 0x22, 0x2f, 0x30, 0x22, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x22, 0x25, 0x2c, 0x34, 0x36, 0x24, 0x28, 0x36,
- + 0x54, 0x48, 0x48, 0x48, 0x48, 0xa2, 0xa8, 0xa1,
- + 0xa5, 0xa6, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f,
- + 0x6f, 0x78, 0xa5, 0xa0, 0xa0, 0x78, 0xa6, 0xa2,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
- + 0x36, 0x36, 0x36, 0x30, 0x36, 0x36, 0x36, 0x36,
- + 0x21, 0x2f, 0x32, 0x23, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x28, 0x32, 0x2f, 0x28, 0x36, 0x27, 0x22, 0x21,
- + 0x43, 0x48, 0x4b, 0xa2, 0x9f, 0x48, 0xa2, 0xa1,
- + 0xb8, 0x6e, 0x6e, 0xb5, 0x78, 0x6f, 0x78, 0x78,
- + 0x6e, 0x6f, 0x78, 0xb5, 0xa6, 0xa1, 0xa0, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4b, 0x21,
- + 0x36, 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
- + 0x25, 0x2c, 0x39, 0x36, 0x36, 0x30, 0x22, 0x25,
- + 0x52, 0x48, 0xa3, 0xb1, 0xb6, 0xb3, 0xaa, 0xac,
- + 0x68, 0x68, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f,
- + 0x78, 0x6f, 0x6f, 0xb5, 0xa6, 0xb4, 0x48, 0x9f,
- + 0xb4, 0xb4, 0xa2, 0x9f, 0x48, 0x48, 0x4f, 0x21,
- + 0x36, 0x36, 0x22, 0x26, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
- + 0x30, 0x2d, 0x21, 0x36, 0x36, 0x32, 0x23, 0x2a,
- + 0x47, 0x48, 0xa2, 0xb6, 0xaf, 0xb9, 0xba, 0x68,
- + 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x6f, 0x6f, 0x78,
- + 0x6f, 0x6f, 0xa6, 0x6f, 0xb5, 0xa0, 0xaa, 0xa6,
- + 0xa6, 0xa9, 0xb2, 0xb3, 0x48, 0x48, 0x4c, 0x22,
- + 0x36, 0x36, 0x24, 0x23, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
- + 0x33, 0x2e, 0x36, 0x36, 0x23, 0x31, 0x27, 0x39,
- + 0x9b, 0x48, 0x48, 0x48, 0xb0, 0xb0, 0xba, 0xb8,
- + 0x68, 0x68, 0x69, 0x78, 0x6f, 0xb5, 0x6f, 0xb5,
- + 0x78, 0x78, 0x78, 0x78, 0x78, 0xa5, 0xbb, 0xa9,
- + 0xa5, 0x48, 0x48, 0x48, 0x48, 0x48, 0x4c, 0x23,
- + 0x36, 0x36, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x2c, 0x39, 0x24, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
- + 0x2b, 0x39, 0x36, 0x36, 0x36, 0x26, 0x32, 0x31,
- + 0x9b, 0x48, 0x48, 0x48, 0x48, 0x9f, 0xac, 0x68,
- + 0xbc, 0x6e, 0x6e, 0x6e, 0xb5, 0x6f, 0x6e, 0x6f,
- + 0x6f, 0x78, 0x78, 0xb5, 0xb5, 0xa5, 0x9f, 0x9f,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x46, 0x22,
- + 0x36, 0x21, 0x26, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x2c, 0x35, 0x24, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
- + 0x35, 0x39, 0x36, 0x36, 0x36, 0x36, 0x26, 0x2d,
- + 0x9b, 0x48, 0x48, 0xb0, 0xaa, 0xb3, 0xbd, 0xb8,
- + 0xb8, 0x68, 0x6e, 0x6e, 0xb5, 0x6f, 0x78, 0x6e,
- + 0x78, 0x6f, 0x78, 0x78, 0xb5, 0xa9, 0xa2, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x9a, 0x36,
- + 0x24, 0x27, 0xbe, 0x24, 0x25, 0x28, 0x21, 0x36,
- + 0x36, 0x34, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x25,
- + 0x39, 0x4d, 0xbf, 0x84, 0x81, 0x57, 0x21, 0x39,
- + 0x52, 0x48, 0x48, 0x62, 0xb1, 0xc0, 0xc1, 0xc1,
- + 0xb8, 0xb8, 0x68, 0xbc, 0x6e, 0x6e, 0x6e, 0x78,
- + 0x78, 0x78, 0x78, 0x6e, 0x78, 0xa9, 0xa0, 0xab,
- + 0xb3, 0xa2, 0x48, 0x48, 0x48, 0x48, 0x53, 0x28,
- + 0x23, 0x36, 0x36, 0x36, 0x21, 0x28, 0x2c, 0x30,
- + 0x21, 0x38, 0x33, 0x28, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x21, 0x22, 0x22, 0x28, 0x30,
- + 0x2d, 0xc2, 0x7a, 0xc3, 0xc4, 0xc4, 0x7f, 0x22,
- + 0x51, 0x52, 0x48, 0x48, 0xb0, 0xaa, 0xa8, 0xbd,
- + 0x68, 0xb8, 0xb8, 0x68, 0x68, 0x6e, 0x6e, 0x6f,
- + 0x6e, 0x6e, 0xb5, 0x6e, 0x78, 0xab, 0xab, 0xb5,
- + 0x78, 0xa6, 0xb3, 0xc5, 0xac, 0xac, 0xc6, 0x61,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x30, 0x32,
- + 0x25, 0x4d, 0x2b, 0x28, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x21, 0x23, 0x24, 0x26, 0x30, 0x33, 0x31,
- + 0x4d, 0x91, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0x5a,
- + 0x21, 0x2e, 0x46, 0x48, 0x48, 0x48, 0xb0, 0x64,
- + 0xc1, 0xb8, 0xb8, 0xb8, 0x68, 0x71, 0x6e, 0x6e,
- + 0x6f, 0x71, 0x6f, 0x6f, 0xa6, 0xa0, 0x9f, 0xb4,
- + 0xb4, 0xa0, 0xa1, 0xb7, 0xc7, 0x69, 0x66, 0xc8,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x26, 0x25,
- + 0x83, 0xc9, 0x2c, 0x25, 0x21, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x21, 0x28, 0x30, 0x35, 0x2d, 0x2f, 0x37, 0x4a,
- + 0x60, 0x85, 0xca, 0xcb, 0xc4, 0xc4, 0xc4, 0x82,
- + 0x86, 0x36, 0x32, 0x3f, 0xa2, 0xa4, 0xa8, 0xa9,
- + 0xb8, 0xb8, 0xb8, 0xb8, 0x68, 0x6e, 0x6e, 0x6e,
- + 0x6e, 0x71, 0x6f, 0x71, 0xa6, 0xb4, 0x9f, 0x9f,
- + 0x48, 0x48, 0x48, 0xcc, 0xc3, 0xc7, 0xcd, 0xce,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x21, 0x57,
- + 0x77, 0x66, 0x34, 0x27, 0x22, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x23, 0x30, 0x31, 0xcf, 0x91, 0x7e, 0x90, 0x90,
- + 0x8b, 0x5b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0x5d, 0xd0, 0x36, 0x24, 0xd1, 0xb1, 0xaf, 0xaa,
- + 0xba, 0xb8, 0x68, 0x68, 0x68, 0x71, 0x6e, 0x6e,
- + 0x6e, 0x6f, 0x6e, 0x78, 0xa1, 0xa9, 0xa1, 0xb0,
- + 0x9f, 0x9b, 0x99, 0xcc, 0x64, 0x5c, 0x8b, 0xd0,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x73, 0x5d,
- + 0x82, 0x5c, 0xd2, 0x2a, 0x23, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x24, 0x2b, 0xcf, 0x8b, 0x5b, 0x76, 0x5b, 0x5b,
- + 0x7b, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc7, 0x5e, 0x22, 0x36, 0x21, 0x3a, 0x99, 0x48,
- + 0xa2, 0xa8, 0xb7, 0xc1, 0xb8, 0x68, 0x68, 0xbc,
- + 0x68, 0x6e, 0xb5, 0xb4, 0xb4, 0xab, 0xb5, 0xa1,
- + 0xb0, 0x4f, 0x3f, 0xd3, 0x7b, 0x7b, 0x85, 0x80,
- + 0xbe, 0x36, 0x36, 0x36, 0x21, 0xd4, 0x7e, 0x7b,
- + 0x64, 0x64, 0xd5, 0x35, 0x24, 0x21, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
- + 0x26, 0x31, 0xd6, 0x5b, 0x64, 0xc3, 0xc3, 0xcb,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0x66, 0xd7, 0x36, 0x36, 0x36, 0x2c, 0x4b,
- + 0xd8, 0xd9, 0xb3, 0xa8, 0xbd, 0xbd, 0xbd, 0xbd,
- + 0xa9, 0xab, 0xb3, 0xa5, 0xa2, 0x9f, 0xa2, 0xa1,
- + 0x6a, 0x9a, 0x3f, 0xda, 0x76, 0x76, 0x7a, 0x63,
- + 0xdb, 0xdc, 0x86, 0xdc, 0xdd, 0x90, 0x5b, 0x64,
- + 0xc3, 0xc3, 0xde, 0x2d, 0x27, 0x23, 0x21, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x26, 0x2d, 0x91, 0x5b, 0x64, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc7, 0x83, 0xce, 0x36, 0x36, 0x36, 0x30,
- + 0xb1, 0xd9, 0x48, 0xa1, 0xb2, 0xb0, 0xb0, 0xb3,
- + 0xa2, 0x48, 0xa7, 0xbd, 0xa9, 0xa2, 0x48, 0x9f,
- + 0xaa, 0x9a, 0x3f, 0xb1, 0x5b, 0x7b, 0xdf, 0x85,
- + 0x7e, 0x90, 0x63, 0x90, 0x85, 0x5b, 0xc3, 0xc4,
- + 0xc4, 0xcb, 0x5d, 0xd5, 0x39, 0x26, 0x23, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
- + 0x26, 0x2d, 0xe0, 0xdf, 0x64, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc7, 0x88, 0x36, 0x36, 0x36, 0x36,
- + 0x2d, 0x9b, 0x48, 0xb9, 0xaf, 0xa2, 0xa2, 0xb9,
- + 0xa8, 0x9f, 0x48, 0xa7, 0xb7, 0xd9, 0x48, 0x48,
- + 0x9b, 0x45, 0x3f, 0xe1, 0x6d, 0x7b, 0xca, 0xdf,
- + 0x7a, 0x8b, 0x8b, 0x7a, 0x5b, 0x64, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc3, 0xe2, 0x37, 0x35, 0x26, 0x23,
- + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
- + 0x26, 0x2e, 0xe0, 0x7a, 0x7b, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc7, 0x72, 0x73, 0x36, 0x36, 0x36,
- + 0x24, 0x52, 0x48, 0xa3, 0xaf, 0x9f, 0x48, 0xb6,
- + 0xaf, 0xa2, 0x48, 0x9f, 0xe3, 0xd8, 0x48, 0x48,
- + 0x48, 0x46, 0x42, 0xd6, 0x7a, 0x7b, 0x64, 0x7b,
- + 0x76, 0x5b, 0x5b, 0x76, 0x7b, 0xc3, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xcb, 0x64, 0xe2, 0x4d, 0x2c, 0x27,
- + 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x25, 0x31, 0xe4, 0x8b, 0x7b, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc7, 0x89, 0xbe, 0x36, 0x36,
- + 0x32, 0x47, 0x48, 0x4f, 0xa0, 0x48, 0x48, 0xe3,
- + 0x92, 0x9f, 0x48, 0x9f, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x4b, 0x2f, 0x8f, 0x7a, 0x7b, 0xc3, 0xcb,
- + 0xc3, 0x64, 0x64, 0xc3, 0xc3, 0xcb, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x5d, 0xe5, 0x2c,
- + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x25, 0x31, 0xe4, 0x85, 0x7b, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x57, 0x27, 0x4d,
- + 0x4b, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x99, 0x34, 0xbe, 0xdb, 0x7a, 0x7b, 0xc3, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0xe4,
- + 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22,
- + 0x26, 0x2d, 0xe4, 0x85, 0x7b, 0xcb, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc7, 0x5f, 0x92, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x44,
- + 0x35, 0x36, 0xce, 0xdd, 0x7a, 0x7b, 0xcb, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0xc3, 0xe1,
- + 0x2b, 0x24, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
- + 0x30, 0x2f, 0xd6, 0x8b, 0x7b, 0xcb, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x66, 0x89, 0x45,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x48, 0x9b, 0x4e, 0x25,
- + 0x36, 0x36, 0x61, 0xdb, 0x6d, 0x64, 0xcb, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0xdf, 0xe5,
- + 0x32, 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
- + 0x33, 0xe6, 0x63, 0xdf, 0xc3, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x72, 0x81, 0xe7,
- + 0x46, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48,
- + 0x48, 0x48, 0x48, 0x48, 0x3f, 0x2c, 0x36, 0x36,
- + 0x36, 0x36, 0xe8, 0x8f, 0x6d, 0x64, 0xcb, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc3, 0xca, 0x8b, 0xcf, 0x2c,
- + 0x26, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
- + 0x35, 0x96, 0x75, 0xca, 0xc3, 0xcb, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x7b, 0x81, 0xdb,
- + 0x73, 0x3b, 0x44, 0x9b, 0x48, 0x48, 0x48, 0x9b,
- + 0x99, 0x43, 0x94, 0x2c, 0x21, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x73, 0xdb, 0x7a, 0x7b, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0x64, 0x76, 0x7a, 0x91, 0xd5, 0x31, 0x30,
- + 0x28, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x24,
- + 0x39, 0x97, 0x75, 0xdf, 0x7b, 0x64, 0xc3, 0xc3,
- + 0xcb, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0x7b, 0x7a, 0xe9,
- + 0xea, 0x36, 0x21, 0x26, 0x2b, 0x39, 0x33, 0x30,
- + 0x23, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x21, 0xea, 0xdd, 0x8b, 0x7b, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc3, 0x64, 0x64,
- + 0x76, 0x85, 0xe0, 0xd5, 0x34, 0x2b, 0x27, 0x28,
- + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x28,
- + 0x33, 0xeb, 0x63, 0x7e, 0x7a, 0x6d, 0xdf, 0x5b,
- + 0x76, 0x7b, 0x64, 0x64, 0xc3, 0xcb, 0xc4, 0xc4,
- + 0xc4, 0xc4, 0xc4, 0xc4, 0xcb, 0x76, 0x85, 0xdb,
- + 0x79, 0x22, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x21, 0xec, 0xdd, 0x75, 0x76, 0xc3, 0xc4,
- + 0xc4, 0xc4, 0xcb, 0xc3, 0x64, 0x76, 0xdf, 0x8b,
- + 0xd6, 0xd5, 0x2f, 0x35, 0x30, 0x24, 0x22, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23,
- + 0x27, 0x31, 0xed, 0xeb, 0xdd, 0x74, 0x63, 0x90,
- + 0x7e, 0x75, 0x8b, 0x6d, 0xdf, 0x76, 0x64, 0xc3,
- + 0xcb, 0xcb, 0xcb, 0xcb, 0x64, 0x7a, 0x84, 0xee,
- + 0x79, 0xbe, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
- + 0x36, 0x21, 0xea, 0xee, 0x63, 0x6d, 0x7b, 0x64,
- + 0xcb, 0xc3, 0x64, 0x7b, 0xdf, 0x75, 0x63, 0x96,
- + 0x38, 0x39, 0x2a, 0x24, 0x23, 0x21, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x28, 0x27, 0x35, 0x2d, 0x41, 0xd5, 0xe7, 0x8f,
- + 0xdb, 0xdd, 0xe9, 0x74, 0x84, 0x90, 0x85, 0x6d,
- + 0x5b, 0x7b, 0x7b, 0xca, 0x6d, 0x90, 0xdb, 0xef,
- + 0xec, 0x22, 0x36, 0x36, 0x28, 0x30, 0x30, 0x30,
- + 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x25, 0x36,
- + 0x36, 0x21, 0xd4, 0x80, 0xe9, 0x7e, 0x6d, 0x76,
- + 0xca, 0x76, 0x6d, 0x85, 0x63, 0xdb, 0xd5, 0x34,
- + 0x33, 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x21, 0x23, 0x24, 0x27, 0x2a, 0x35, 0x2e, 0x2f,
- + 0x41, 0xf0, 0xf1, 0x6c, 0x80, 0xee, 0xdb, 0x74,
- + 0x84, 0x90, 0x75, 0x7e, 0x74, 0x8f, 0xef, 0x79,
- + 0xe8, 0x2b, 0x9d, 0x41, 0x2f, 0x34, 0x2d, 0x2d,
- + 0x2d, 0x2d, 0x2d, 0x2d, 0x2d, 0x34, 0x2f, 0x38,
- + 0x4d, 0x37, 0xf2, 0xf3, 0x8f, 0x74, 0x63, 0x7e,
- + 0x75, 0x7e, 0x63, 0xe9, 0x88, 0xe6, 0x31, 0x2a,
- + 0x24, 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x21, 0x22, 0x23, 0x24, 0x26, 0x30,
- + 0x33, 0x39, 0x2e, 0x51, 0x41, 0xd2, 0x6c, 0xf3,
- + 0x80, 0xee, 0xee, 0xee, 0xf4, 0xf3, 0xd7, 0xf5,
- + 0x41, 0x34, 0x35, 0x32, 0x30, 0x27, 0x27, 0x27,
- + 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x30, 0x2a,
- + 0x2b, 0x34, 0xf6, 0xec, 0xf7, 0x8f, 0xdd, 0xe9,
- + 0xe9, 0xdd, 0xee, 0x6c, 0x41, 0x39, 0x27, 0x28,
- + 0x21, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x22,
- + 0x28, 0x24, 0x26, 0x2a, 0x33, 0x2c, 0x2f, 0x41,
- + 0xf8, 0xd7, 0x79, 0x79, 0x79, 0xec, 0xf9, 0x51,
- + 0x39, 0x30, 0x24, 0x23, 0x22, 0x22, 0x22, 0x22,
- + 0x22, 0x22, 0x21, 0x22, 0x22, 0x22, 0x22, 0x23,
- + 0x24, 0x2a, 0x31, 0xfa, 0xea, 0x79, 0xf3, 0x80,
- + 0xf7, 0xdc, 0xfb, 0x2f, 0x35, 0x26, 0x23, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x21, 0x22, 0x23, 0x28, 0x25, 0x30, 0x2b,
- + 0x31, 0x2f, 0xf6, 0xfa, 0xfa, 0x2f, 0x2e, 0x33,
- + 0x26, 0x23, 0x21, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x21, 0x28, 0x27, 0x35, 0x34, 0xfa, 0xfa, 0xfa,
- + 0xfc, 0xf6, 0x2e, 0x33, 0x25, 0x23, 0x21, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x21, 0x21, 0x23, 0x28,
- + 0x26, 0x30, 0x32, 0x2b, 0x33, 0x2a, 0x26, 0x28,
- + 0x22, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x21, 0x23, 0x25, 0x30, 0x33, 0x35, 0x35,
- + 0x2b, 0x2a, 0x26, 0x28, 0x22, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x21,
- + 0x21, 0x22, 0x23, 0x28, 0x28, 0x23, 0x22, 0x21,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x21, 0x23, 0x28, 0x24, 0x24,
- + 0x28, 0x23, 0x22, 0x21, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
- +};
- +
- +unsigned char linux_logo16[1];
- +
- +#endif /* INCLUDE_LINUX_LOGO_DATA */
- +
- +#include <linux/linux_logo.h>
- +
- --- linux/include/asm-nios2nommu/local.h
- +++ linux/include/asm-nios2nommu/local.h
- @@ -0,0 +1,28 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2NOMMU_LOCAL_H
- +#define __NIOS2NOMMU_LOCAL_H
- +
- +#include <asm-generic/local.h>
- +
- +#endif /* __NIOS2NOMMU_LOCAL_H */
- --- linux/include/asm-nios2nommu/mc146818rtc.h
- +++ linux/include/asm-nios2nommu/mc146818rtc.h
- @@ -0,0 +1,29 @@
- +/*
- + * Machine dependent access functions for RTC registers.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef _NIOS2_MC146818RTC_H
- +#define _NIOS2_MC146818RTC_H
- +
- +/* empty include file to satisfy the include in genrtc.c/ide-geometry.c */
- +
- +#endif /* _NIOS2_MC146818RTC_H */
- --- linux/include/asm-nios2nommu/mman.h
- +++ linux/include/asm-nios2nommu/mman.h
- @@ -0,0 +1,68 @@
- +/*
- + * Copied from the m68k port.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2_MMAN_H__
- +#define __NIOS2_MMAN_H__
- +
- +#define PROT_READ 0x1 /* page can be read */
- +#define PROT_WRITE 0x2 /* page can be written */
- +#define PROT_EXEC 0x4 /* page can be executed */
- +#define PROT_SEM 0x8 /* page may be used for atomic ops */
- +#define PROT_NONE 0x0 /* page can not be accessed */
- +#define PROT_GROWSDOWN 0x01000000 /* mprotect flag: extend change to start of growsdown vma */
- +#define PROT_GROWSUP 0x02000000 /* mprotect flag: extend change to end of growsup vma */
- +
- +#define MAP_SHARED 0x01 /* Share changes */
- +#define MAP_PRIVATE 0x02 /* Changes are private */
- +#define MAP_TYPE 0x0f /* Mask for type of mapping */
- +#define MAP_FIXED 0x10 /* Interpret addr exactly */
- +#define MAP_ANONYMOUS 0x20 /* don't use a file */
- +
- +#define MAP_GROWSDOWN 0x0100 /* stack-like segment */
- +#define MAP_DENYWRITE 0x0800 /* ETXTBSY */
- +#define MAP_EXECUTABLE 0x1000 /* mark it as an executable */
- +#define MAP_LOCKED 0x2000 /* pages are locked */
- +#define MAP_NORESERVE 0x4000 /* don't check for reservations */
- +#define MAP_POPULATE 0x8000 /* populate (prefault) pagetables */
- +#define MAP_NONBLOCK 0x10000 /* do not block on IO */
- +
- +#define MS_ASYNC 1 /* sync memory asynchronously */
- +#define MS_INVALIDATE 2 /* invalidate the caches */
- +#define MS_SYNC 4 /* synchronous memory sync */
- +
- +#define MCL_CURRENT 1 /* lock all current mappings */
- +#define MCL_FUTURE 2 /* lock all future mappings */
- +
- +#define MADV_NORMAL 0x0 /* default page-in behavior */
- +#define MADV_RANDOM 0x1 /* page-in minimum required */
- +#define MADV_SEQUENTIAL 0x2 /* read-ahead aggressively */
- +#define MADV_WILLNEED 0x3 /* pre-fault pages */
- +#define MADV_DONTNEED 0x4 /* discard these pages */
- +
- +/* compatibility flags */
- +#define MAP_ANON MAP_ANONYMOUS
- +#define MAP_FILE 0
- +
- +#endif /* __NIOS2_MMAN_H__ */
- +
- --- linux/include/asm-nios2nommu/mmu_context.h
- +++ linux/include/asm-nios2nommu/mmu_context.h
- @@ -0,0 +1,58 @@
- +/*
- + *
- + * Taken from the m68knommu.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2NOMMU_MMU_CONTEXT_H
- +#define __NIOS2NOMMU_MMU_CONTEXT_H
- +
- +#include <linux/config.h>
- +#include <asm/setup.h>
- +#include <asm/page.h>
- +#include <asm/pgalloc.h>
- +
- +static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
- +{
- +}
- +
- +extern inline int
- +init_new_context(struct task_struct *tsk, struct mm_struct *mm)
- +{
- + // mm->context = virt_to_phys(mm->pgd);
- + return(0);
- +}
- +
- +#define destroy_context(mm) do { } while(0)
- +
- +static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk)
- +{
- +}
- +
- +#define deactivate_mm(tsk,mm) do { } while (0)
- +
- +extern inline void activate_mm(struct mm_struct *prev_mm,
- + struct mm_struct *next_mm)
- +{
- +}
- +
- +#endif
- --- linux/include/asm-nios2nommu/mmu.h
- +++ linux/include/asm-nios2nommu/mmu.h
- @@ -0,0 +1,36 @@
- +/*
- + *
- + * Taken from the m68knommu.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2NOMMU_MMU_H
- +#define __NIOS2NOMMU_MMU_H
- +
- +/* Copyright (C) 2002, David McCullough <davidm@snapgear.com> */
- +
- +typedef struct {
- + struct vm_list_struct *vmlist;
- + unsigned long end_brk;
- +} mm_context_t;
- +
- +#endif /* __NIOS2NOMMU_MMU_H */
- --- linux/include/asm-nios2nommu/module.h
- +++ linux/include/asm-nios2nommu/module.h
- @@ -0,0 +1,36 @@
- +#ifndef _NIOS2_MODULE_H
- +#define _NIOS2_MODULE_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/module.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +struct mod_arch_specific
- +{
- +};
- +
- +#define Elf_Shdr Elf32_Shdr
- +#define Elf_Sym Elf32_Sym
- +#define Elf_Ehdr Elf32_Ehdr
- +
- +#endif /* _NIOS_MODULE_H */
- --- linux/include/asm-nios2nommu/msgbuf.h
- +++ linux/include/asm-nios2nommu/msgbuf.h
- @@ -0,0 +1,56 @@
- +/*
- + * Taken from the m68k.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2_MSGBUF_H
- +#define _NIOS2_MSGBUF_H
- +
- +/*
- + * The msqid64_ds structure for nios2 architecture.
- + * Note extra padding because this structure is passed back and forth
- + * between kernel and user space.
- + *
- + * Pad space is left for:
- + * - 64-bit time_t to solve y2038 problem
- + * - 2 miscellaneous 32-bit values
- + */
- +
- +struct msqid64_ds {
- + struct ipc64_perm msg_perm;
- + __kernel_time_t msg_stime; /* last msgsnd time */
- + unsigned long __unused1;
- + __kernel_time_t msg_rtime; /* last msgrcv time */
- + unsigned long __unused2;
- + __kernel_time_t msg_ctime; /* last change time */
- + unsigned long __unused3;
- + unsigned long msg_cbytes; /* current number of bytes on queue */
- + unsigned long msg_qnum; /* number of messages in queue */
- + unsigned long msg_qbytes; /* max number of bytes on queue */
- + __kernel_pid_t msg_lspid; /* pid of last msgsnd */
- + __kernel_pid_t msg_lrpid; /* last receive pid */
- + unsigned long __unused4;
- + unsigned long __unused5;
- +};
- +
- +#endif /* _NIOS2_MSGBUF_H */
- +
- --- linux/include/asm-nios2nommu/namei.h
- +++ linux/include/asm-nios2nommu/namei.h
- @@ -0,0 +1,36 @@
- +/*
- + * linux/include/asm-nios/namei.h
- + * Moved from m68k version
- + * Included from linux/fs/namei.c
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef __NIOS2_NAMEI_H
- +#define __NIOS2_NAMEI_H
- +
- +/* This dummy routine maybe changed to something useful
- + * for /usr/gnemul/ emulation stuff.
- + * Look at asm-sparc/namei.h for details.
- + */
- +
- +#define __emul_prefix() NULL
- +
- +#endif
- --- linux/include/asm-nios2nommu/ndma.h
- +++ linux/include/asm-nios2nommu/ndma.h
- @@ -0,0 +1,64 @@
- +#ifndef __NDMA_H__
- + #define __NDMA_H__
- +
- + #ifndef __ASSEMBLY__
- +
- +// DMA Registers
- +typedef volatile struct
- +{
- + int np_dmastatus; // status register
- + int np_dmareadaddress; // read address
- + int np_dmawriteaddress; // write address
- + int np_dmalength; // length in bytes
- + int np_dmareserved1; // reserved
- + int np_dmareserved2; // reserved
- + int np_dmacontrol; // control register
- + int np_dmareserved3; // control register alternate
- +} np_dma;
- +
- +// DMA Register Bits
- +enum
- +{
- + np_dmacontrol_byte_bit = 0, // Byte transaction
- + np_dmacontrol_hw_bit = 1, // Half-word transaction
- + np_dmacontrol_word_bit = 2, // Word transaction
- + np_dmacontrol_go_bit = 3, // enable execution
- + np_dmacontrol_i_en_bit = 4, // enable interrupt
- + np_dmacontrol_reen_bit = 5, // Enable read end-of-packet
- + np_dmacontrol_ween_bit = 6, // Enable write end-of-packet
- + np_dmacontrol_leen_bit = 7, // Enable length=0 transaction end
- + np_dmacontrol_rcon_bit = 8, // Read from a fixed address
- + np_dmacontrol_wcon_bit = 9, // Write to a fixed address
- + np_dmacontrol_doubleword_bit = 10, // Double-word transaction
- + np_dmacontrol_quadword_bit = 11, // Quad-word transaction
- +
- + np_dmastatus_done_bit = 0, // 1 when done. Status write clears.
- + np_dmastatus_busy_bit = 1, // 1 when busy.
- + np_dmastatus_reop_bit = 2, // read-eop received
- + np_dmastatus_weop_bit = 3, // write-eop received
- + np_dmastatus_len_bit = 4, // requested length transacted
- +
- + np_dmacontrol_byte_mask = (1 << 0), // Byte transaction
- + np_dmacontrol_hw_mask = (1 << 1), // Half-word transaction
- + np_dmacontrol_word_mask = (1 << 2), // Word transaction
- + np_dmacontrol_go_mask = (1 << 3), // enable execution
- + np_dmacontrol_i_en_mask = (1 << 4), // enable interrupt
- + np_dmacontrol_reen_mask = (1 << 5), // Enable read end-of-packet
- + np_dmacontrol_ween_mask = (1 << 6), // Enable write end-of-packet
- + np_dmacontrol_leen_mask = (1 << 7), // Enable length=0 transaction end
- + np_dmacontrol_rcon_mask = (1 << 8), // Read from a fixed address
- + np_dmacontrol_wcon_mask = (1 << 9), // Write to a fixed address
- + np_dmacontrol_doubleword_mask = (1 << 10), // Double-word transaction
- + np_dmacontrol_quadword_mask = (1 << 11), // Quad-word transaction
- +
- + np_dmastatus_done_mask = (1 << 0), // 1 when done. Status write clears.
- + np_dmastatus_busy_mask = (1 << 1), // 1 when busy.
- + np_dmastatus_reop_mask = (1 << 2), // read-eop received
- + np_dmastatus_weop_mask = (1 << 3), // write-eop received
- + np_dmastatus_len_mask = (1 << 4), // requested length transacted
- +};
- +
- + #endif /* __ASSEMBLY__ */
- +
- +#endif
- +/* End of File */
- --- linux/include/asm-nios2nommu/nios.h
- +++ linux/include/asm-nios2nommu/nios.h
- @@ -0,0 +1,7 @@
- +#ifndef __NIOS_H__
- +#define __NIOS_H__
- +
- +#include "nios2_system.h"
- +
- +#endif
- +
- --- linux/include/asm-nios2nommu/page.h
- +++ linux/include/asm-nios2nommu/page.h
- @@ -0,0 +1,135 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2_PAGE_H
- +#define _NIOS2_PAGE_H
- +
- +/* copied from m68knommu arch */
- +// #include <linux/config.h>
- +
- +/* PAGE_SHIFT determines the page size */
- +
- +#define PAGE_SHIFT (12)
- +#define PAGE_SIZE (1UL << PAGE_SHIFT)
- +#define PAGE_MASK (~(PAGE_SIZE-1))
- +
- +#ifdef __KERNEL__
- +
- +#include <asm/setup.h>
- +
- +#if PAGE_SHIFT < 13
- +#define THREAD_SIZE (8192)
- +#else
- +#define THREAD_SIZE PAGE_SIZE
- +#endif
- +
- +#ifndef __ASSEMBLY__
- +
- +#define get_user_page(vaddr) __get_free_page(GFP_KERNEL)
- +#define free_user_page(page, addr) free_page(addr)
- +
- +#define clear_page(page) memset((page), 0, PAGE_SIZE)
- +#define copy_page(to,from) memcpy((to), (from), PAGE_SIZE)
- +
- +#define clear_user_page(page, vaddr, pg) clear_page(page)
- +#define copy_user_page(to, from, vaddr, pg) copy_page(to, from)
- +
- +/*
- + * These are used to make use of C type-checking..
- + */
- +typedef struct { unsigned long pte; } pte_t;
- +typedef struct { unsigned long pmd[16]; } pmd_t;
- +typedef struct { unsigned long pgd; } pgd_t;
- +typedef struct { unsigned long pgprot; } pgprot_t;
- +
- +#define pte_val(x) ((x).pte)
- +#define pmd_val(x) ((&x)->pmd[0])
- +#define pgd_val(x) ((x).pgd)
- +#define pgprot_val(x) ((x).pgprot)
- +
- +#define __pte(x) ((pte_t) { (x) } )
- +#define __pmd(x) ((pmd_t) { (x) } )
- +#define __pgd(x) ((pgd_t) { (x) } )
- +#define __pgprot(x) ((pgprot_t) { (x) } )
- +
- +/* to align the pointer to the (next) page boundary */
- +#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
- +
- +/* Pure 2^n version of get_order */
- +extern __inline__ int get_order(unsigned long size)
- +{
- + int order;
- +
- + size = (size-1) >> (PAGE_SHIFT-1);
- + order = -1;
- + do {
- + size >>= 1;
- + order++;
- + } while (size);
- + return order;
- +}
- +
- +extern unsigned long memory_start;
- +extern unsigned long memory_end;
- +
- +#endif /* !__ASSEMBLY__ */
- +#include <asm/nios.h>
- +#define PAGE_OFFSET ((int)(nasys_program_mem))
- +
- +#ifndef __ASSEMBLY__
- +
- +#define __pa(vaddr) virt_to_phys((void *)vaddr)
- +#define __va(paddr) phys_to_virt((unsigned long)paddr)
- +
- +#define MAP_NR(addr) (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)
- +
- +#define virt_to_pfn(kaddr) (__pa(kaddr) >> PAGE_SHIFT)
- +#define pfn_to_virt(pfn) __va((pfn) << PAGE_SHIFT)
- +
- +#define virt_to_page(addr) (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
- +#define page_to_virt(page) ((((page) - mem_map) << PAGE_SHIFT) + PAGE_OFFSET)
- +#define VALID_PAGE(page) ((page - mem_map) < max_mapnr)
- +
- +#define pfn_to_page(pfn) virt_to_page(pfn_to_virt(pfn))
- +#define page_to_pfn(page) virt_to_pfn(page_to_virt(page))
- +
- +#define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
- + ((void *)(kaddr) < (void *)memory_end))
- +
- +#ifdef CONFIG_NO_KERNEL_MSG
- +#define BUG_PRINT()
- +#else
- +#define BUG_PRINT() printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__)
- +#endif
- +
- +#ifdef na_cpu_oci_core
- +#define BUG_PANIC() asm volatile ("break") /* drop to debugger */
- +#else
- +// #define BUG_PANIC() while(1)
- +#define BUG_PANIC() panic("BUG!")
- +#endif
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _NIOS2_PAGE_H */
- --- linux/include/asm-nios2nommu/param.h
- +++ linux/include/asm-nios2nommu/param.h
- @@ -0,0 +1,49 @@
- +#ifndef _NIOS_PARAM_H
- +#define _NIOS_PARAM_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/param.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#ifndef HZ
- +#define HZ 100
- +#endif
- +
- +#ifdef __KERNEL__
- +#define USER_HZ HZ
- +#define CLOCKS_PER_SEC (USER_HZ)
- +#endif
- +
- +#define EXEC_PAGESIZE 4096
- +
- +#ifndef NGROUPS
- +#define NGROUPS 32
- +#endif
- +
- +#ifndef NOGROUP
- +#define NOGROUP (-1)
- +#endif
- +
- +#define MAXHOSTNAMELEN 64 /* max length of hostname */
- +
- +#endif
- --- linux/include/asm-nios2nommu/pci.h
- +++ linux/include/asm-nios2nommu/pci.h
- @@ -0,0 +1,75 @@
- +#ifndef _ASM_NIOS2NOMMU_PCI_H
- +#define _ASM_NIOS2NOMMU_PCI_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/pci.h
- + *
- + * Derived from asm-m68k/pci_m68k.h
- + * - m68k specific PCI declarations, by Wout Klaren.
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/scatterlist.h>
- +
- +struct pci_ops;
- +
- +/*
- + * Structure with hardware dependent information and functions of the
- + * PCI bus.
- + */
- +
- +struct pci_bus_info
- +{
- + /*
- + * Resources of the PCI bus.
- + */
- +
- + struct resource mem_space;
- + struct resource io_space;
- +
- + /*
- + * System dependent functions.
- + */
- +
- + struct pci_ops *m68k_pci_ops;
- +
- + void (*fixup)(int pci_modify);
- + void (*conf_device)(struct pci_dev *dev);
- +};
- +
- +#define pcibios_assign_all_busses() 0
- +
- +extern inline void pcibios_set_master(struct pci_dev *dev)
- +{
- + /* No special bus mastering setup handling */
- +}
- +
- +extern inline void pcibios_penalize_isa_irq(int irq)
- +{
- + /* We don't do dynamic PCI IRQ allocation */
- +}
- +
- +/* The PCI address space does equal the physical memory
- + * address space. The networking and block device layers use
- + * this boolean for bounce buffer decisions.
- + */
- +#define PCI_DMA_BUS_IS_PHYS (1)
- +
- +#endif /* _ASM_NIOS2NOMMU_PCI_H */
- --- linux/include/asm-nios2nommu/percpu.h
- +++ linux/include/asm-nios2nommu/percpu.h
- @@ -0,0 +1,30 @@
- +#ifndef __ARCH_NIOS2NOMMU_PERCPU__
- +#define __ARCH_NIOS2NOMMU_PERCPU__
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/percpu.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm-generic/percpu.h>
- +
- +#endif /* __ARCH_NIOS2NOMMU_PERCPU__ */
- --- linux/include/asm-nios2nommu/pgalloc.h
- +++ linux/include/asm-nios2nommu/pgalloc.h
- @@ -0,0 +1,32 @@
- +#ifndef _NIOS2NOMMU_PGALLOC_H
- +#define _NIOS2NOMMU_PGALLOC_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/pgalloc.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/setup.h>
- +
- +#define check_pgt_cache() do { } while (0)
- +
- +#endif /* _NIOS2NOMMU_PGALLOC_H */
- --- linux/include/asm-nios2nommu/pgtable.h
- +++ linux/include/asm-nios2nommu/pgtable.h
- @@ -0,0 +1,104 @@
- +#ifndef _NIOS_PGTABLE_H
- +#define _NIOS_PGTABLE_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/pgtable.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +#include <asm-generic/4level-fixup.h>
- +
- +//vic - this bit copied from m68knommu version
- +// #include <linux/config.h>
- +#include <asm/setup.h>
- +#include <asm/io.h>
- +
- +typedef pte_t *pte_addr_t;
- +
- +#define pgd_present(pgd) (1) /* pages are always present on NO_MM */
- +#define pgd_none(pgd) (0)
- +#define pgd_bad(pgd) (0)
- +#define pgd_clear(pgdp)
- +#define kern_addr_valid(addr) (1)
- +#define pmd_offset(a, b) ((void *)0)
- +
- +#define PAGE_NONE __pgprot(0) /* these mean nothing to NO_MM */
- +#define PAGE_SHARED __pgprot(0) /* these mean nothing to NO_MM */
- +#define PAGE_COPY __pgprot(0) /* these mean nothing to NO_MM */
- +#define PAGE_READONLY __pgprot(0) /* these mean nothing to NO_MM */
- +#define PAGE_KERNEL __pgprot(0) /* these mean nothing to NO_MM */
- +//vic - this bit copied from m68knommu version
- +
- +extern void paging_init(void);
- +#define swapper_pg_dir ((pgd_t *) 0)
- +
- +#define __swp_type(x) (0)
- +#define __swp_offset(x) (0)
- +#define __swp_entry(typ,off) ((swp_entry_t) { ((typ) | ((off) << 7)) })
- +#define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
- +#define __swp_entry_to_pte(x) ((pte_t) { (x).val })
- +
- +static inline int pte_file(pte_t pte) { return 0; }
- +
- +/*
- + * ZERO_PAGE is a global shared page that is always zero: used
- + * for zero-mapped memory areas etc..
- + */
- +#define ZERO_PAGE(vaddr) (virt_to_page(0))
- +
- +extern unsigned int kobjsize(const void *objp);
- +extern int is_in_rom(unsigned long);
- +
- +/*
- + * No page table caches to initialise
- + */
- +#define pgtable_cache_init() do { } while (0)
- +#define io_remap_page_range(vma, vaddr, paddr, size, prot) \
- + remap_pfn_range(vma, vaddr, (paddr) >> PAGE_SHIFT, size, prot)
- +
- +extern inline void flush_cache_mm(struct mm_struct *mm)
- +{
- +}
- +
- +extern inline void flush_cache_range(struct mm_struct *mm,
- + unsigned long start,
- + unsigned long end)
- +{
- +}
- +
- +/* Push the page at kernel virtual address and clear the icache */
- +extern inline void flush_page_to_ram (unsigned long address)
- +{
- +}
- +
- +/* Push n pages at kernel virtual address and clear the icache */
- +extern inline void flush_pages_to_ram (unsigned long address, int n)
- +{
- +}
- +
- +/*
- + * All 32bit addresses are effectively valid for vmalloc...
- + * Sort of meaningless for non-VM targets.
- + */
- +#define VMALLOC_START 0
- +#define VMALLOC_END 0xffffffff
- +
- +#endif /* _NIOS_PGTABLE_H */
- --- linux/include/asm-nios2nommu/pio_struct.h
- +++ linux/include/asm-nios2nommu/pio_struct.h
- @@ -0,0 +1,14 @@
- +// PIO Peripheral
- +
- +// PIO Registers
- +typedef volatile struct
- + {
- + int np_piodata; // read/write, up to 32 bits
- + int np_piodirection; // write/readable, up to 32 bits, 1->output bit
- + int np_piointerruptmask; // write/readable, up to 32 bits, 1->enable interrupt
- + int np_pioedgecapture; // read, up to 32 bits, cleared by any write
- + } np_pio;
- +
- +// PIO Routines
- +void nr_pio_showhex(int value); // shows low byte on pio named na_seven_seg_pio
- +
- --- linux/include/asm-nios2nommu/poll.h
- +++ linux/include/asm-nios2nommu/poll.h
- @@ -0,0 +1,46 @@
- +#ifndef __NIOS2_POLL_H
- +#define __NIOS2_POLL_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/poll.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#define POLLIN 1
- +#define POLLPRI 2
- +#define POLLOUT 4
- +#define POLLERR 8
- +#define POLLHUP 16
- +#define POLLNVAL 32
- +#define POLLRDNORM 64
- +#define POLLWRNORM POLLOUT
- +#define POLLRDBAND 128
- +#define POLLWRBAND 256
- +#define POLLMSG 0x0400
- +
- +struct pollfd {
- + int fd;
- + short events;
- + short revents;
- +};
- +
- +#endif
- --- linux/include/asm-nios2nommu/posix_types.h
- +++ linux/include/asm-nios2nommu/posix_types.h
- @@ -0,0 +1,89 @@
- +#ifndef __ARCH_NIOS2_POSIX_TYPES_H
- +#define __ARCH_NIOS2_POSIX_TYPES_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/posix_types.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/*
- + * This file is generally used by user-level software, so you need to
- + * be a little careful about namespace pollution etc. Also, we cannot
- + * assume GCC is being used.
- + */
- +
- +typedef unsigned long __kernel_ino_t;
- +typedef unsigned short __kernel_mode_t;
- +typedef unsigned short __kernel_nlink_t;
- +typedef long __kernel_off_t;
- +typedef int __kernel_pid_t;
- +typedef unsigned short __kernel_ipc_pid_t;
- +typedef unsigned short __kernel_uid_t;
- +typedef unsigned short __kernel_gid_t;
- +typedef unsigned int __kernel_size_t;
- +typedef int __kernel_ssize_t;
- +typedef int __kernel_ptrdiff_t;
- +typedef long __kernel_time_t;
- +typedef long __kernel_suseconds_t;
- +typedef long __kernel_clock_t;
- +typedef int __kernel_timer_t;
- +typedef int __kernel_clockid_t;
- +typedef int __kernel_daddr_t;
- +typedef char * __kernel_caddr_t;
- +typedef unsigned short __kernel_uid16_t;
- +typedef unsigned short __kernel_gid16_t;
- +typedef unsigned int __kernel_uid32_t;
- +typedef unsigned int __kernel_gid32_t;
- +
- +typedef unsigned short __kernel_old_uid_t;
- +typedef unsigned short __kernel_old_gid_t;
- +typedef unsigned short __kernel_old_dev_t;
- +
- +#ifdef __GNUC__
- +typedef long long __kernel_loff_t;
- +#endif
- +
- +typedef struct {
- +#if defined(__KERNEL__) || defined(__USE_ALL)
- + int val[2];
- +#else /* !defined(__KERNEL__) && !defined(__USE_ALL) */
- + int __val[2];
- +#endif /* !defined(__KERNEL__) && !defined(__USE_ALL) */
- +} __kernel_fsid_t;
- +
- +#if defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2)
- +
- +#undef __FD_SET
- +#define __FD_SET(d, set) ((set)->fds_bits[__FDELT(d)] |= __FDMASK(d))
- +
- +#undef __FD_CLR
- +#define __FD_CLR(d, set) ((set)->fds_bits[__FDELT(d)] &= ~__FDMASK(d))
- +
- +#undef __FD_ISSET
- +#define __FD_ISSET(d, set) ((set)->fds_bits[__FDELT(d)] & __FDMASK(d))
- +
- +#undef __FD_ZERO
- +#define __FD_ZERO(fdsetp) (memset (fdsetp, 0, sizeof(*(fd_set *)fdsetp)))
- +
- +#endif /* defined(__KERNEL__) || !defined(__GLIBC__) || (__GLIBC__ < 2) */
- +
- +#endif
- --- linux/include/asm-nios2nommu/preem_latency.h
- +++ linux/include/asm-nios2nommu/preem_latency.h
- @@ -0,0 +1,39 @@
- +#ifndef _ASM_PREEM_LATENCY_H
- +#define _ASM_PREEM_LATENCY_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/preem_latency.h
- + *
- + * timing support for preempt-stats patch
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/nios.h>
- +
- +#define readclock(low) \
- +do {\
- + *(volatile unsigned long *)na_Counter_64_bit=1; \
- + low=*(volatile unsigned long *)na_Counter_64_bit; \
- +} while (0)
- +#define readclock_init()
- +
- +#endif /* _ASM_PREEM_LATENCY_H */
- --- linux/include/asm-nios2nommu/processor.h
- +++ linux/include/asm-nios2nommu/processor.h
- @@ -0,0 +1,148 @@
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/processor.h
- + *
- + * Copyright (C) 1994 David S. Miller (davem@caip.rutgers.edu)
- + * Copyright (C) 2001 Ken Hill (khill@microtronix.com)
- + * Vic Phillips (vic@microtronix.com)
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * hacked from:
- + * include/asm-sparc/processor.h
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + * Nov/02/2003 dgt Fix task_size
- + *
- + ---------------------------------------------------------------------*/
- +
- +#ifndef __ASM_NIOS_PROCESSOR_H
- +#define __ASM_NIOS_PROCESSOR_H
- +
- +#define NIOS2_FLAG_KTHREAD 0x00000001 /* task is a kernel thread */
- +#define NIOS2_FLAG_COPROC 0x00000002 /* Thread used coprocess */
- +#define NIOS2_FLAG_DEBUG 0x00000004 /* task is being debugged */
- +
- +#define NIOS2_OP_NOP 0x1883a
- +#define NIOS2_OP_BREAK 0x3da03a
- +
- +#ifndef __ASSEMBLY__
- +
- +/*
- + * Default implementation of macro that returns current
- + * instruction pointer ("program counter").
- + */
- +#define current_text_addr() ({ __label__ _l; _l: &&_l;})
- +
- +#include <linux/a.out.h>
- +#include <linux/string.h>
- +
- +#include <asm/ptrace.h>
- +#include <asm/signal.h>
- +#include <asm/segment.h>
- +#include <asm/current.h>
- +#include <asm/system.h> /* for get_hi_limit */
- +
- +/*
- + * Bus types
- + */
- +#define EISA_bus 0
- +#define EISA_bus__is_a_macro /* for versions in ksyms.c */
- +#define MCA_bus 0
- +#define MCA_bus__is_a_macro /* for versions in ksyms.c */
- +
- +/*
- + * The nios has no problems with write protection
- + */
- +#define wp_works_ok 1
- +#define wp_works_ok__is_a_macro /* for versions in ksyms.c */
- +
- +/* Whee, this is STACK_TOP and the lowest kernel address too... */
- +#if 0
- +#define KERNBASE 0x00000000 /* First address the kernel will eventually be */
- +#define TASK_SIZE (KERNBASE)
- +#define MAX_USER_ADDR TASK_SIZE
- +#define MMAP_SEARCH_START (TASK_SIZE/3)
- +#endif
- +
- +#define TASK_SIZE ((unsigned int) nasys_program_mem_end) //...this is better...
- +
- +/*
- + * This decides where the kernel will search for a free chunk of vm
- + * space during mmap's. We won't be using it
- + */
- +#define TASK_UNMAPPED_BASE 0
- +
- +/* The Nios processor specific thread struct. */
- +struct thread_struct {
- + struct pt_regs *kregs;
- +
- + /* For signal handling */
- + unsigned long sig_address;
- + unsigned long sig_desc;
- +
- + /* Context switch saved kernel state. */
- + unsigned long ksp;
- + unsigned long kpsr;
- + unsigned long kesr;
- +
- + /* Flags are defined below */
- +
- + unsigned long flags;
- + int current_ds;
- + struct exec core_exec; /* just what it says. */
- +};
- +
- +#define INIT_MMAP { &init_mm, (0), (0), \
- + __pgprot(0x0) , VM_READ | VM_WRITE | VM_EXEC }
- +
- +#define INIT_THREAD { \
- + .kregs = 0, \
- + .sig_address = 0, \
- + .sig_desc = 0, \
- + .ksp = 0, \
- + .kpsr = 0, \
- + .kesr = PS_S, \
- + .flags = NIOS2_FLAG_KTHREAD, \
- + .current_ds = __KERNEL_DS, \
- + .core_exec = INIT_EXEC \
- +}
- +
- +/* Free all resources held by a thread. */
- +extern void release_thread(struct task_struct *);
- +
- +extern unsigned long thread_saved_pc(struct task_struct *t);
- +
- +extern void start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp);
- +
- +/* Prepare to copy thread state - unlazy all lazy status */
- +#define prepare_to_copy(tsk) do { } while (0)
- +
- +extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
- +
- +unsigned long get_wchan(struct task_struct *p);
- +
- +#define KSTK_EIP(tsk) ((tsk)->thread.kregs->ea)
- +#define KSTK_ESP(tsk) ((tsk)->thread.kregs->sp)
- +
- +#ifdef __KERNEL__
- +/* Allocation and freeing of basic task resources. */
- +
- +//;dgt2;#define alloc_task_struct() ((struct task_struct *) xx..see..linux..fork..xx __get_free_pages(GFP_KERNEL,1))
- +//;dgt2;#define get_task_struct(tsk) xx..see..linux..sched.h...atomic_inc(&mem_map[MAP_NR(tsk)].count)
- +
- +#endif
- +
- +#define cpu_relax() do { } while (0)
- +#endif /* __ASSEMBLY__ */
- +#endif /* __ASM_NIOS_PROCESSOR_H */
- --- linux/include/asm-nios2nommu/ptrace.h
- +++ linux/include/asm-nios2nommu/ptrace.h
- @@ -0,0 +1,141 @@
- +/*
- + * Taken from the m68k port.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef _NIOS2NOMMU_PTRACE_H
- +#define _NIOS2NOMMU_PTRACE_H
- +
- +#ifndef __ASSEMBLY__
- +
- +#define PTR_R0 0
- +#define PTR_R1 1
- +#define PTR_R2 2
- +#define PTR_R3 3
- +#define PTR_R4 4
- +#define PTR_R5 5
- +#define PTR_R6 6
- +#define PTR_R7 7
- +#define PTR_R8 8
- +#define PTR_R9 9
- +#define PTR_R10 10
- +#define PTR_R11 11
- +#define PTR_R12 12
- +#define PTR_R13 13
- +#define PTR_R14 14
- +#define PTR_R15 15
- +#define PTR_R16 16
- +#define PTR_R17 17
- +#define PTR_R18 18
- +#define PTR_R19 19
- +#define PTR_R20 20
- +#define PTR_R21 21
- +#define PTR_R22 22
- +#define PTR_R23 23
- +#define PTR_R24 24
- +#define PTR_R25 25
- +#define PTR_GP 26
- +#define PTR_SP 27
- +#define PTR_FP 28
- +#define PTR_EA 29
- +#define PTR_BA 30
- +#define PTR_RA 31
- +#define PTR_STATUS 32
- +#define PTR_ESTATUS 33
- +#define PTR_BSTATUS 34
- +#define PTR_IENABLE 35
- +#define PTR_IPENDING 36
- +
- +/* this struct defines the way the registers are stored on the
- + stack during a system call.
- +
- + There is a fake_regs in setup.c that has to match pt_regs.*/
- +
- +struct pt_regs {
- + unsigned long r8;
- + unsigned long r9;
- + unsigned long r10;
- + unsigned long r11;
- + unsigned long r12;
- + unsigned long r13;
- + unsigned long r14;
- + unsigned long r15;
- + unsigned long r1;
- + unsigned long r2;
- + unsigned long r3;
- + unsigned long r4;
- + unsigned long r5;
- + unsigned long r6;
- + unsigned long r7;
- + unsigned long orig_r2;
- + unsigned long ra;
- + unsigned long fp;
- + unsigned long sp;
- + unsigned long gp;
- + unsigned long estatus;
- + unsigned long status_extension;
- + unsigned long ea;
- +};
- +
- +
- +/*
- + * This is the extended stack used by signal handlers and the context
- + * switcher: it's pushed after the normal "struct pt_regs".
- + */
- +struct switch_stack {
- + unsigned long r16;
- + unsigned long r17;
- + unsigned long r18;
- + unsigned long r19;
- + unsigned long r20;
- + unsigned long r21;
- + unsigned long r22;
- + unsigned long r23;
- + unsigned long fp;
- + unsigned long gp;
- + unsigned long ra;
- +};
- +
- +/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
- +#define PTRACE_GETREGS 12
- +#define PTRACE_SETREGS 13
- +#ifdef CONFIG_FPU
- +#define PTRACE_GETFPREGS 14
- +#define PTRACE_SETFPREGS 15
- +#endif
- +
- +#ifdef __KERNEL__
- +
- +#ifndef PS_S
- +#define PS_S (0x00000001)
- +#endif
- +#ifndef PS_T
- +#define PS_T (0x00000002)
- +#endif
- +
- +#define user_mode(regs) (!((regs)->status_extension & PS_S))
- +#define instruction_pointer(regs) ((regs)->ra)
- +#define profile_pc(regs) instruction_pointer(regs)
- +extern void show_regs(struct pt_regs *);
- +
- +#endif /* __KERNEL__ */
- +#endif /* __ASSEMBLY__ */
- +#endif /* _NIOS2NOMMU_PTRACE_H */
- --- linux/include/asm-nios2nommu/resource.h
- +++ linux/include/asm-nios2nommu/resource.h
- @@ -0,0 +1,73 @@
- +#ifndef _NIOS2NOMMU_RESOURCE_H
- +#define _NIOS2NOMMU_RESOURCE_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * Resource limits
- + *
- + * include/asm-nios2nommu/resource.h
- + *
- + * Derived from M68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#define RLIMIT_CPU 0 /* CPU time in ms */
- +#define RLIMIT_FSIZE 1 /* Maximum filesize */
- +#define RLIMIT_DATA 2 /* max data size */
- +#define RLIMIT_STACK 3 /* max stack size */
- +#define RLIMIT_CORE 4 /* max core file size */
- +#define RLIMIT_RSS 5 /* max resident set size */
- +#define RLIMIT_NPROC 6 /* max number of processes */
- +#define RLIMIT_NOFILE 7 /* max number of open files */
- +#define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */
- +#define RLIMIT_AS 9 /* address space limit */
- +#define RLIMIT_LOCKS 10 /* maximum file locks held */
- +#define RLIMIT_SIGPENDING 11 /* max number of pending signals */
- +#define RLIMIT_MSGQUEUE 12 /* maximum bytes in POSIX mqueues */
- +
- +#define RLIM_NLIMITS 13
- +
- +/*
- + * SuS says limits have to be unsigned.
- + * Which makes a ton more sense anyway.
- + */
- +#define RLIM_INFINITY (~0UL)
- +
- +#ifdef __KERNEL__
- +
- +#define INIT_RLIMITS \
- +{ \
- + { RLIM_INFINITY, RLIM_INFINITY }, \
- + { RLIM_INFINITY, RLIM_INFINITY }, \
- + { RLIM_INFINITY, RLIM_INFINITY }, \
- + { _STK_LIM, RLIM_INFINITY }, \
- + { 0, RLIM_INFINITY }, \
- + { RLIM_INFINITY, RLIM_INFINITY }, \
- + { 0, 0 }, \
- + { INR_OPEN, INR_OPEN }, \
- + { MLOCK_LIMIT, MLOCK_LIMIT }, \
- + { RLIM_INFINITY, RLIM_INFINITY }, \
- + { RLIM_INFINITY, RLIM_INFINITY }, \
- + { MAX_SIGPENDING, MAX_SIGPENDING }, \
- + { MQ_BYTES_MAX, MQ_BYTES_MAX }, \
- +}
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _NIOS2NOMMU_RESOURCE_H */
- --- linux/include/asm-nios2nommu/rmap.h
- +++ linux/include/asm-nios2nommu/rmap.h
- @@ -0,0 +1,2 @@
- +/* Do not need anything here */
- +
- --- linux/include/asm-nios2nommu/scatterlist.h
- +++ linux/include/asm-nios2nommu/scatterlist.h
- @@ -0,0 +1,42 @@
- +#ifndef _NIOS2NOMMU_SCATTERLIST_H
- +#define _NIOS2NOMMU_SCATTERLIST_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/scatterlist.h
- + *
- + * Derived from M68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +#include <linux/mm.h>
- +
- +struct scatterlist {
- + struct page *page;
- + unsigned int offset;
- + dma_addr_t dma_address;
- + unsigned int length;
- +};
- +
- +#define sg_address(sg) (page_address((sg)->page) + (sg)->offset
- +#define sg_dma_address(sg) ((sg)->dma_address)
- +#define sg_dma_len(sg) ((sg)->length)
- +
- +#define ISA_DMA_THRESHOLD (0xffffffff)
- +
- +#endif /* !(_NIOS2NOMMU_SCATTERLIST_H) */
- --- linux/include/asm-nios2nommu/sections.h
- +++ linux/include/asm-nios2nommu/sections.h
- @@ -0,0 +1,30 @@
- +#ifndef _NIOS2NOMMU_SECTIONS_H
- +#define _NIOS2NOMMU_SECTIONS_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/sections.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm-generic/sections.h>
- +
- +#endif /* _NIOS2NOMMU_SECTIONS_H */
- --- linux/include/asm-nios2nommu/segment.h
- +++ linux/include/asm-nios2nommu/segment.h
- @@ -0,0 +1,75 @@
- +#ifndef _NIOS2NOMMU_SEGMENT_H
- +#define _NIOS2NOMMU_SEGMENT_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/segment.h
- + *
- + * Derived from M68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/* define constants */
- +/* Address spaces (FC0-FC2) */
- +#define USER_DATA (1)
- +#ifndef __USER_DS
- +#define __USER_DS (USER_DATA)
- +#endif
- +#define USER_PROGRAM (2)
- +#define SUPER_DATA (5)
- +#ifndef __KERNEL_DS
- +#define __KERNEL_DS (SUPER_DATA)
- +#endif
- +#define SUPER_PROGRAM (6)
- +#define CPU_SPACE (7)
- +
- +#ifndef __ASSEMBLY__
- +
- +typedef struct {
- + unsigned long seg;
- +} mm_segment_t;
- +
- +#define MAKE_MM_SEG(s) ((mm_segment_t) { (s) })
- +#define USER_DS MAKE_MM_SEG(__USER_DS)
- +#define KERNEL_DS MAKE_MM_SEG(__KERNEL_DS)
- +
- +/*
- + * Get/set the SFC/DFC registers for MOVES instructions
- + */
- +
- +static inline mm_segment_t get_fs(void)
- +{
- + return USER_DS;
- +}
- +
- +static inline mm_segment_t get_ds(void)
- +{
- + /* return the supervisor data space code */
- + return KERNEL_DS;
- +}
- +
- +static inline void set_fs(mm_segment_t val)
- +{
- +}
- +
- +#define segment_eq(a,b) ((a).seg == (b).seg)
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* _NIOS2NOMMU_SEGMENT_H */
- --- linux/include/asm-nios2nommu/semaphore.h
- +++ linux/include/asm-nios2nommu/semaphore.h
- @@ -0,0 +1,155 @@
- +#ifndef _NIOS2NOMMU_SEMAPHORE_H
- +#define _NIOS2NOMMU_SEMAPHORE_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/semaphore.h
- + *
- + * Interrupt-safe semaphores..
- + *
- + * Derived from M68knommu
- + *
- + * (C) Copyright 1996 Linus Torvalds
- + * m68k version by Andreas Schwab
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +#define RW_LOCK_BIAS 0x01000000
- +
- +#ifndef __ASSEMBLY__
- +
- +#include <linux/linkage.h>
- +#include <linux/wait.h>
- +#include <linux/spinlock.h>
- +#include <linux/rwsem.h>
- +
- +#include <asm/system.h>
- +#include <asm/atomic.h>
- +
- +struct semaphore {
- + atomic_t count;
- + atomic_t waking;
- + wait_queue_head_t wait;
- +};
- +
- +#define __SEMAPHORE_INITIALIZER(name, n) \
- +{ \
- + .count = ATOMIC_INIT(n), \
- + .waking = ATOMIC_INIT(0), \
- + .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait) \
- +}
- +
- +#define __MUTEX_INITIALIZER(name) \
- + __SEMAPHORE_INITIALIZER(name,1)
- +
- +#define __DECLARE_SEMAPHORE_GENERIC(name,count) \
- + struct semaphore name = __SEMAPHORE_INITIALIZER(name,count)
- +
- +#define DECLARE_MUTEX(name) __DECLARE_SEMAPHORE_GENERIC(name,1)
- +#define DECLARE_MUTEX_LOCKED(name) __DECLARE_SEMAPHORE_GENERIC(name,0)
- +
- +extern inline void sema_init (struct semaphore *sem, int val)
- +{
- + *sem = (struct semaphore)__SEMAPHORE_INITIALIZER(*sem, val);
- +}
- +
- +static inline void init_MUTEX (struct semaphore *sem)
- +{
- + sema_init(sem, 1);
- +}
- +
- +static inline void init_MUTEX_LOCKED (struct semaphore *sem)
- +{
- + sema_init(sem, 0);
- +}
- +
- +asmlinkage void __down(struct semaphore * sem);
- +asmlinkage int __down_interruptible(struct semaphore * sem);
- +asmlinkage int __down_trylock(struct semaphore * sem);
- +asmlinkage void __up(struct semaphore * sem);
- +
- +asmlinkage void __down_failed(void /* special register calling convention */);
- +asmlinkage int __down_failed_interruptible(void /* params in registers */);
- +asmlinkage int __down_failed_trylock(void /* params in registers */);
- +asmlinkage void __up_wakeup(void /* special register calling convention */);
- +
- +extern spinlock_t semaphore_wake_lock;
- +
- +/*
- + * This is ugly, but we want the default case to fall through.
- + * "down_failed" is a special asm handler that calls the C
- + * routine that actually waits.
- + */
- +extern inline void down(struct semaphore * sem)
- +{
- + might_sleep();
- +
- + #if 0
- + ...Nios2 has no atomic "decrement memory"....
- + #else
- + if (atomic_dec_return(&sem->count) < 0)
- + __down(sem);
- + #endif
- +}
- +
- +extern inline int down_interruptible(struct semaphore * sem)
- +{
- + int ret = 0;
- +
- +
- + might_sleep();
- +
- + #if 0
- + ...Nios2 has no atomic "decrement memory"....
- + #else
- + if(atomic_dec_return(&sem->count) < 0)
- + ret = __down_interruptible(sem);
- + return ret;
- + #endif
- +}
- +
- +extern inline int down_trylock(struct semaphore * sem)
- +{
- + #if 0
- + ...Nios2 has no atomic "decrement memory"....
- + #else
- + int ret = 0;
- +
- + if (atomic_dec_return (&sem->count) < 0)
- + ret = __down_trylock(sem);
- + return ret;
- + #endif
- +}
- +
- +/*
- + * Note! This is subtle. We jump to wake people up only if
- + * the semaphore was negative (== somebody was waiting on it).
- + * The default case (no contention) will result in NO
- + * jumps for both down() and up().
- + */
- +extern inline void up(struct semaphore * sem)
- +{
- + #if 0
- + ...Nios2 has no atomic "increment memory"....
- + #else
- + if (atomic_inc_return(&sem->count) <= 0)
- + __up(sem);
- + #endif
- +}
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif
- --- linux/include/asm-nios2nommu/semaphore-helper.h
- +++ linux/include/asm-nios2nommu/semaphore-helper.h
- @@ -0,0 +1,101 @@
- +#ifndef _NIOS2NOMMU_SEMAPHORE_HELPER_H
- +#define _NIOS2NOMMU_SEMAPHORE_HELPER_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/semaphore.h
- + *
- + * SMP- and interrupt-safe semaphores helper functions.
- + *
- + * Derived from M68knommu
- + *
- + * (C) Copyright 1996 Linus Torvalds
- + * m68k version by Andreas Schwab
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +// #include <linux/config.h>
- +
- +/*
- + * These two _must_ execute atomically wrt each other.
- + */
- +static inline void wake_one_more(struct semaphore * sem)
- +{
- + atomic_inc(&sem->waking);
- +}
- +
- +static inline int waking_non_zero(struct semaphore *sem)
- +{
- + int ret;
- + unsigned long flags;
- +
- + spin_lock_irqsave(&semaphore_wake_lock, flags);
- + ret = 0;
- + if (atomic_read(&sem->waking) > 0) {
- + atomic_dec(&sem->waking);
- + ret = 1;
- + }
- + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
- + return ret;
- +}
- +
- +/*
- + * waking_non_zero_interruptible:
- + * 1 got the lock
- + * 0 go to sleep
- + * -EINTR interrupted
- + */
- +static inline int waking_non_zero_interruptible(struct semaphore *sem,
- + struct task_struct *tsk)
- +{
- + int ret;
- + unsigned long flags;
- +
- + spin_lock_irqsave(&semaphore_wake_lock, flags);
- + ret = 0;
- + if (atomic_read(&sem->waking) > 0) {
- + atomic_dec(&sem->waking);
- + ret = 1;
- + } else if (signal_pending(tsk)) {
- + atomic_inc(&sem->count);
- + ret = -EINTR;
- + }
- + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
- + return ret;
- +}
- +
- +/*
- + * waking_non_zero_trylock:
- + * 1 failed to lock
- + * 0 got the lock
- + */
- +static inline int waking_non_zero_trylock(struct semaphore *sem)
- +{
- + int ret;
- + unsigned long flags;
- +
- + spin_lock_irqsave(&semaphore_wake_lock, flags);
- + ret = 1;
- + if (atomic_read(&sem->waking) > 0) {
- + atomic_dec(&sem->waking);
- + ret = 0;
- + } else
- + atomic_inc(&sem->count);
- + spin_unlock_irqrestore(&semaphore_wake_lock, flags);
- + return ret;
- +}
- +
- +#endif
- --- linux/include/asm-nios2nommu/sembuf.h
- +++ linux/include/asm-nios2nommu/sembuf.h
- @@ -0,0 +1,48 @@
- +#ifndef _NIOS_SEMBUF_H
- +#define _NIOS_SEMBUF_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/sembuf.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/*
- + * Note extra padding because this structure is passed back and forth
- + * between kernel and user space.
- + *
- + * Pad space is left for:
- + * - 64-bit time_t to solve y2038 problem
- + * - 2 miscellaneous 32-bit values
- + */
- +
- +struct semid64_ds {
- + struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
- + __kernel_time_t sem_otime; /* last semop time */
- + unsigned long __unused1;
- + __kernel_time_t sem_ctime; /* last change time */
- + unsigned long __unused2;
- + unsigned long sem_nsems; /* no. of semaphores in array */
- + unsigned long __unused3;
- + unsigned long __unused4;
- +};
- +
- +#endif /* _NIOS_SEMBUF_H */
- --- linux/include/asm-nios2nommu/setup.h
- +++ linux/include/asm-nios2nommu/setup.h
- @@ -0,0 +1,31 @@
- +/* Copied from i386 port.
- + * Just a place holder. We don't want to have to test x86 before
- + * we include stuff
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2_SETUP_H
- +#define _NIOS2_SETUP_H
- +
- +#define COMMAND_LINE_SIZE 512
- +
- +#endif /* _NIOS2_SETUP_H */
- --- linux/include/asm-nios2nommu/shmbuf.h
- +++ linux/include/asm-nios2nommu/shmbuf.h
- @@ -0,0 +1,64 @@
- +#ifndef _NIOS_SHMBUF_H
- +#define _NIOS_SHMBUF_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/shmbuf.h
- + *
- + * Derived from m68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/* Note extra padding because this structure is passed back and forth
- + * between kernel and user space.
- + *
- + * Pad space is left for:
- + * - 64-bit time_t to solve y2038 problem
- + * - 2 miscellaneous 32-bit values
- + */
- +
- +struct shmid64_ds {
- + struct ipc64_perm shm_perm; /* operation perms */
- + size_t shm_segsz; /* size of segment (bytes) */
- + __kernel_time_t shm_atime; /* last attach time */
- + unsigned long __unused1;
- + __kernel_time_t shm_dtime; /* last detach time */
- + unsigned long __unused2;
- + __kernel_time_t shm_ctime; /* last change time */
- + unsigned long __unused3;
- + __kernel_pid_t shm_cpid; /* pid of creator */
- + __kernel_pid_t shm_lpid; /* pid of last operator */
- + unsigned long shm_nattch; /* no. of current attaches */
- + unsigned long __unused4;
- + unsigned long __unused5;
- +};
- +
- +struct shminfo64 {
- + unsigned long shmmax;
- + unsigned long shmmin;
- + unsigned long shmmni;
- + unsigned long shmseg;
- + unsigned long shmall;
- + unsigned long __unused1;
- + unsigned long __unused2;
- + unsigned long __unused3;
- + unsigned long __unused4;
- +};
- +
- +#endif /* _NIOS_SHMBUF_H */
- --- linux/include/asm-nios2nommu/shmparam.h
- +++ linux/include/asm-nios2nommu/shmparam.h
- @@ -0,0 +1,30 @@
- +#ifndef __NIOS2NOMMU_SHMPARAM_H__
- +#define __NIOS2NOMMU_SHMPARAM_H__
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/shmparam.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
- +
- +#endif /* __NIOS2NOMMU_SHMPARAM_H__ */
- --- linux/include/asm-nios2nommu/sigcontext.h
- +++ linux/include/asm-nios2nommu/sigcontext.h
- @@ -0,0 +1,35 @@
- +/*
- + * Taken from the m68knommu.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _ASM_NIOS2NOMMU_SIGCONTEXT_H
- +#define _ASM_NIOS2NOMMU_SIGCONTEXT_H
- +
- +#include <asm/ptrace.h>
- +
- +struct sigcontext {
- + struct pt_regs regs;
- + unsigned long sc_mask; /* old sigmask */
- +};
- +
- +#endif
- --- linux/include/asm-nios2nommu/siginfo.h
- +++ linux/include/asm-nios2nommu/siginfo.h
- @@ -0,0 +1,28 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2NOMMU_SIGINFO_H
- +#define _NIOS2NOMMU_SIGINFO_H
- +
- +#include <asm-generic/siginfo.h>
- +
- +#endif
- --- linux/include/asm-nios2nommu/signal.h
- +++ linux/include/asm-nios2nommu/signal.h
- @@ -0,0 +1,207 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2_SIGNAL_H
- +#define _NIOS2_SIGNAL_H
- +
- +#include <linux/types.h>
- +
- +/* Avoid too many header ordering problems. */
- +struct siginfo;
- +
- +#ifdef __KERNEL__
- +/* Most things should be clean enough to redefine this at will, if care
- + is taken to make libc match. */
- +
- +#define _NSIG 64
- +#define _NSIG_BPW 32
- +#define _NSIG_WORDS (_NSIG / _NSIG_BPW)
- +
- +typedef unsigned long old_sigset_t; /* at least 32 bits */
- +
- +typedef struct {
- + unsigned long sig[_NSIG_WORDS];
- +} sigset_t;
- +
- +#else
- +/* Here we must cater to libcs that poke about in kernel headers. */
- +
- +#define NSIG 32
- +typedef unsigned long sigset_t;
- +
- +#endif /* __KERNEL__ */
- +
- +#define SIGHUP 1
- +#define SIGINT 2
- +#define SIGQUIT 3
- +#define SIGILL 4
- +#define SIGTRAP 5
- +#define SIGABRT 6
- +#define SIGIOT 6
- +#define SIGBUS 7
- +#define SIGFPE 8
- +#define SIGKILL 9
- +#define SIGUSR1 10
- +#define SIGSEGV 11
- +#define SIGUSR2 12
- +#define SIGPIPE 13
- +#define SIGALRM 14
- +#define SIGTERM 15
- +#define SIGSTKFLT 16
- +#define SIGCHLD 17
- +#define SIGCONT 18
- +#define SIGSTOP 19
- +#define SIGTSTP 20
- +#define SIGTTIN 21
- +#define SIGTTOU 22
- +#define SIGURG 23
- +#define SIGXCPU 24
- +#define SIGXFSZ 25
- +#define SIGVTALRM 26
- +#define SIGPROF 27
- +#define SIGWINCH 28
- +#define SIGIO 29
- +#define SIGPOLL SIGIO
- +/*
- +#define SIGLOST 29
- +*/
- +#define SIGPWR 30
- +#define SIGSYS 31
- +#define SIGUNUSED 31
- +
- +/* These should not be considered constants from userland. */
- +#define SIGRTMIN 32
- +#define SIGRTMAX _NSIG-1
- +
- +/*
- + * SA_FLAGS values:
- + *
- + * SA_ONSTACK indicates that a registered stack_t will be used.
- + * SA_INTERRUPT is a no-op, but left due to historical reasons. Use the
- + * SA_RESTART flag to get restarting signals (which were the default long ago)
- + * SA_NOCLDSTOP flag to turn off SIGCHLD when children stop.
- + * SA_RESETHAND clears the handler when the signal is delivered.
- + * SA_NOCLDWAIT flag on SIGCHLD to inhibit zombies.
- + * SA_NODEFER prevents the current signal from being masked in the handler.
- + *
- + * SA_ONESHOT and SA_NOMASK are the historical Linux names for the Single
- + * Unix names RESETHAND and NODEFER respectively.
- + */
- +#define SA_NOCLDSTOP 0x00000001
- +#define SA_NOCLDWAIT 0x00000002 /* not supported yet */
- +#define SA_SIGINFO 0x00000004
- +#define SA_ONSTACK 0x08000000
- +#define SA_RESTART 0x10000000
- +#define SA_NODEFER 0x40000000
- +#define SA_RESETHAND 0x80000000
- +
- +#define SA_NOMASK SA_NODEFER
- +#define SA_ONESHOT SA_RESETHAND
- +#define SA_INTERRUPT 0x20000000 /* dummy -- ignored */
- +
- +#define SA_RESTORER 0x04000000
- +
- +/*
- + * sigaltstack controls
- + */
- +#define SS_ONSTACK 1
- +#define SS_DISABLE 2
- +
- +#define MINSIGSTKSZ 2048
- +#define SIGSTKSZ 8192
- +
- +#ifdef __KERNEL__
- +/*
- + * These values of sa_flags are used only by the kernel as part of the
- + * irq handling routines.
- + *
- + * SA_INTERRUPT is also used by the irq handling routines.
- + * SA_SHIRQ is for shared interrupt support on PCI and EISA.
- + */
- +#define SA_PROBE SA_ONESHOT
- +#define SA_SAMPLE_RANDOM SA_RESTART
- +#define SA_SHIRQ 0x04000000
- +#endif
- +
- +#define SIG_BLOCK 0 /* for blocking signals */
- +#define SIG_UNBLOCK 1 /* for unblocking signals */
- +#define SIG_SETMASK 2 /* for setting the signal mask */
- +
- +/* Type of a signal handler. */
- +typedef void (*__sighandler_t)(int);
- +
- +#define SIG_DFL ((__sighandler_t)0) /* default signal handling */
- +#define SIG_IGN ((__sighandler_t)1) /* ignore signal */
- +#define SIG_ERR ((__sighandler_t)-1) /* error return from signal */
- +
- +#ifdef __KERNEL__
- +struct old_sigaction {
- + __sighandler_t sa_handler;
- + old_sigset_t sa_mask;
- + unsigned long sa_flags;
- + void (*sa_restorer)(void);
- +};
- +
- +struct sigaction {
- + __sighandler_t sa_handler;
- + unsigned long sa_flags;
- + void (*sa_restorer)(void);
- + sigset_t sa_mask; /* mask last for extensibility */
- +};
- +
- +struct k_sigaction {
- + struct sigaction sa;
- +};
- +#else
- +/* Here we must cater to libcs that poke about in kernel headers. */
- +
- +struct sigaction {
- + union {
- + __sighandler_t _sa_handler;
- + void (*_sa_sigaction)(int, struct siginfo *, void *);
- + } _u;
- + sigset_t sa_mask;
- + unsigned long sa_flags;
- + void (*sa_restorer)(void);
- +};
- +
- +#define sa_handler _u._sa_handler
- +#define sa_sigaction _u._sa_sigaction
- +
- +#endif /* __KERNEL__ */
- +
- +typedef struct sigaltstack {
- + void *ss_sp;
- + int ss_flags;
- + size_t ss_size;
- +} stack_t;
- +
- +#ifdef __KERNEL__
- +
- +#include <asm/sigcontext.h>
- +#undef __HAVE_ARCH_SIG_BITOPS
- +
- +#define ptrace_signal_deliver(regs, cookie) do { } while (0)
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _NIOS2_SIGNAL_H */
- --- linux/include/asm-nios2nommu/smp.h
- +++ linux/include/asm-nios2nommu/smp.h
- @@ -0,0 +1,34 @@
- +#ifndef __ASM_SMP_H
- +#define __ASM_SMP_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/smp.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +// #include <linux/config.h>
- +
- +#ifdef CONFIG_SMP
- +#error SMP not supported
- +#endif
- +
- +#endif
- --- linux/include/asm-nios2nommu/socket.h
- +++ linux/include/asm-nios2nommu/socket.h
- @@ -0,0 +1,74 @@
- +#ifndef _ASM_SOCKET_H
- +#define _ASM_SOCKET_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/socket.h
- + *
- + * Derived from m68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/sockios.h>
- +
- +/* For setsockopt(2) */
- +#define SOL_SOCKET 1
- +
- +#define SO_DEBUG 1
- +#define SO_REUSEADDR 2
- +#define SO_TYPE 3
- +#define SO_ERROR 4
- +#define SO_DONTROUTE 5
- +#define SO_BROADCAST 6
- +#define SO_SNDBUF 7
- +#define SO_RCVBUF 8
- +#define SO_KEEPALIVE 9
- +#define SO_OOBINLINE 10
- +#define SO_NO_CHECK 11
- +#define SO_PRIORITY 12
- +#define SO_LINGER 13
- +#define SO_BSDCOMPAT 14
- +/* To add :#define SO_REUSEPORT 15 */
- +#define SO_PASSCRED 16
- +#define SO_PEERCRED 17
- +#define SO_RCVLOWAT 18
- +#define SO_SNDLOWAT 19
- +#define SO_RCVTIMEO 20
- +#define SO_SNDTIMEO 21
- +
- +/* Security levels - as per NRL IPv6 - don't actually do anything */
- +#define SO_SECURITY_AUTHENTICATION 22
- +#define SO_SECURITY_ENCRYPTION_TRANSPORT 23
- +#define SO_SECURITY_ENCRYPTION_NETWORK 24
- +
- +#define SO_BINDTODEVICE 25
- +
- +/* Socket filtering */
- +#define SO_ATTACH_FILTER 26
- +#define SO_DETACH_FILTER 27
- +
- +#define SO_PEERNAME 28
- +#define SO_TIMESTAMP 29
- +#define SCM_TIMESTAMP SO_TIMESTAMP
- +
- +#define SO_ACCEPTCONN 30
- +
- +#define SO_PEERSEC 31 /* ;dgt2;tmp; */
- +
- +#endif /* _ASM_SOCKET_H */
- --- linux/include/asm-nios2nommu/sockios.h
- +++ linux/include/asm-nios2nommu/sockios.h
- @@ -0,0 +1,38 @@
- +#ifndef _ASM_NIOS_SOCKIOS_H
- +#define _ASM_NIOS_SOCKIOS_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/sockios.h
- + *
- + * Socket-level I/O control calls.
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#define FIOSETOWN 0x8901
- +#define SIOCSPGRP 0x8902
- +#define FIOGETOWN 0x8903
- +#define SIOCGPGRP 0x8904
- +#define SIOCATMARK 0x8905
- +#define SIOCGSTAMP 0x8906 /* Get stamp */
- +
- +#endif /* !(_ASM_NIOS_SOCKIOS_H) */
- +
- --- linux/include/asm-nios2nommu/spi.h
- +++ linux/include/asm-nios2nommu/spi.h
- @@ -0,0 +1,92 @@
- +#ifndef _ASM_SPI_H_
- +#define _ASM_SPI_H_ 1
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/spi.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/nios.h>
- +
- +int register_NIOS_SPI( void );
- +void unregister_NIOS_SPI( void );
- +
- +#if defined(MODULE)
- +void cleanup_module( void );
- +int init_module( void );
- +#endif
- +
- +#if defined(__KERNEL__)
- +int spi_reset ( void );
- +#endif
- +
- +
- +#define clockCS 0x01
- +#define temperatureCS 0x02
- +
- +#define clock_read_base 0x00
- +#define clock_write_base 0x80
- +#define clock_read_control 0x0F
- +#define clock_read_trickle 0x11
- +
- +#define clock_read_sec 0x00
- +#define clock_read_min 0x01
- +#define clock_read_hour 0x02
- +#define clock_read_day 0x03
- +#define clock_read_date 0x04
- +#define clock_read_month 0x05
- +#define clock_read_year 0x06
- +
- +#define clock_write_control 0x8F
- +#define clock_write_trickle 0x91
- +#define clock_write_sec 0x80
- +#define clock_write_min 0x81
- +#define clock_write_hour 0x82
- +#define clock_write_day 0x83
- +#define clock_write_date 0x84
- +#define clock_write_month 0x85
- +#define clock_write_year 0x86
- +
- +#define clock_write_ram_start 0xA0
- +#define clock_write_ram_end 0x100
- +#define clock_read_ram_start 0x20
- +#define clock_read_ram_end 0x80
- +
- +
- +#define clock_sec_def 0x11
- +#define clock_min_def 0x59
- +#define clock_hour_def 0x71
- +#define clock_day_def 0x00
- +#define clock_date_def 0x20
- +#define clock_month_def 0x12
- +#define clock_year_def 0x34
- +
- +#define temp_read_base 0x00
- +#define temp_write_base 0x80
- +#define temp_read_control 0x00
- +#define temp_write_control 0x80
- +#define temp_read_msb 0x02
- +#define temp_read_lsb 0x01
- +
- +#define MAX_TEMP_VAR 10
- +
- +#endif /*_ASM_SPI_H_*/
- --- linux/include/asm-nios2nommu/spinlock.h
- +++ linux/include/asm-nios2nommu/spinlock.h
- @@ -0,0 +1,30 @@
- +#ifndef __NIOS_SPINLOCK_H
- +#define __NIOS_SPINLOCK_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/spinlock.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#error "Nios doesn't do SMP yet"
- +
- +#endif
- --- linux/include/asm-nios2nommu/spi_struct.h
- +++ linux/include/asm-nios2nommu/spi_struct.h
- @@ -0,0 +1,57 @@
- +// SPI Registers
- +typedef volatile struct
- + {
- + int np_spirxdata; // Read-only, 1-16 bit
- + int np_spitxdata; // Write-only, same width as rxdata
- + int np_spistatus; // Read-only, 9-bit
- + int np_spicontrol; // Read/Write, 9-bit
- + int np_spireserved; // reserved
- + int np_spislaveselect; // Read/Write, 1-16 bit, master only
- + int np_spiendofpacket; // Read/write, same width as txdata, rxdata.
- + } np_spi;
- +
- +// SPI Status Register Bits
- +enum
- + {
- + np_spistatus_eop_bit = 9,
- + np_spistatus_e_bit = 8,
- + np_spistatus_rrdy_bit = 7,
- + np_spistatus_trdy_bit = 6,
- + np_spistatus_tmt_bit = 5,
- + np_spistatus_toe_bit = 4,
- + np_spistatus_roe_bit = 3,
- +
- + np_spistatus_eop_mask = (1 << 9),
- + np_spistatus_e_mask = (1 << 8),
- + np_spistatus_rrdy_mask = (1 << 7),
- + np_spistatus_trdy_mask = (1 << 6),
- + np_spistatus_tmt_mask = (1 << 5),
- + np_spistatus_toe_mask = (1 << 4),
- + np_spistatus_roe_mask = (1 << 3),
- + };
- +
- +// SPI Control Register Bits
- +enum
- + {
- + np_spicontrol_sso_bit = 10,
- + np_spicontrol_ieop_bit = 9,
- + np_spicontrol_ie_bit = 8,
- + np_spicontrol_irrdy_bit = 7,
- + np_spicontrol_itrdy_bit = 6,
- + np_spicontrol_itoe_bit = 4,
- + np_spicontrol_iroe_bit = 3,
- +
- + np_spicontrol_sso_mask = (1 << 10),
- + np_spicontrol_ieop_mask = (1 << 9),
- + np_spicontrol_ie_mask = (1 << 8),
- + np_spicontrol_irrdy_mask = (1 << 7),
- + np_spicontrol_itrdy_mask = (1 << 6),
- + np_spicontrol_itoe_mask = (1 << 4),
- + np_spicontrol_iroe_mask = (1 << 3),
- + };
- +
- +// SPI Routines.
- +int nr_spi_rxchar(np_spi *spiBase);
- +int nr_spi_txchar(int i, np_spi *spiBase);
- +
- +
- --- linux/include/asm-nios2nommu/statfs.h
- +++ linux/include/asm-nios2nommu/statfs.h
- @@ -0,0 +1,30 @@
- +#ifndef _NIOS2NOMMU_STATFS_H
- +#define _NIOS2NOMMU_STATFS_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/statfs.h
- + *
- + * Derived from M68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm-generic/statfs.h>
- +
- +#endif /* _NIOS2NOMMU_STATFS_H */
- --- linux/include/asm-nios2nommu/stat.h
- +++ linux/include/asm-nios2nommu/stat.h
- @@ -0,0 +1,102 @@
- +#ifndef _ASMNIOS2NOMMU_STAT_H
- +#define _ASMNIOS2NOMMU_STAT_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/stat.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +struct __old_kernel_stat {
- + unsigned short st_dev;
- + unsigned short st_ino;
- + unsigned short st_mode;
- + unsigned short st_nlink;
- + unsigned short st_uid;
- + unsigned short st_gid;
- + unsigned short st_rdev;
- + unsigned long st_size;
- + unsigned long st_atime;
- + unsigned long st_mtime;
- + unsigned long st_ctime;
- +};
- +
- +struct stat {
- + unsigned short st_dev;
- + unsigned short __pad1;
- + unsigned long st_ino;
- + unsigned short st_mode;
- + unsigned short st_nlink;
- + unsigned short st_uid;
- + unsigned short st_gid;
- + unsigned short st_rdev;
- + unsigned short __pad2;
- + unsigned long st_size;
- + unsigned long st_blksize;
- + unsigned long st_blocks;
- + unsigned long st_atime;
- + unsigned long __unused1;
- + unsigned long st_mtime;
- + unsigned long __unused2;
- + unsigned long st_ctime;
- + unsigned long __unused3;
- + unsigned long __unused4;
- + unsigned long __unused5;
- +};
- +
- +/* This matches struct stat64 in glibc2.1, hence the absolutely
- + * insane amounts of padding around dev_t's.
- + */
- +struct stat64 {
- + unsigned long long st_dev;
- + unsigned char __pad1[4];
- +
- +#define STAT64_HAS_BROKEN_ST_INO 1
- + unsigned long __st_ino;
- +
- + unsigned int st_mode;
- + unsigned int st_nlink;
- +
- + unsigned long st_uid;
- + unsigned long st_gid;
- +
- + unsigned long long st_rdev;
- + unsigned char __pad3[4];
- +
- + long long st_size;
- + unsigned long st_blksize;
- +
- + unsigned long __pad4; /* future possible st_blocks high bits */
- + unsigned long st_blocks; /* Number 512-byte blocks allocated. */
- +
- + unsigned long st_atime;
- + unsigned long st_atime_nsec;
- +
- + unsigned long st_mtime;
- + unsigned long st_mtime_nsec;
- +
- + unsigned long st_ctime;
- + unsigned long st_ctime_nsec;
- +
- + unsigned long long st_ino;
- +};
- +
- +#endif
- --- linux/include/asm-nios2nommu/string.h
- +++ linux/include/asm-nios2nommu/string.h
- @@ -0,0 +1,45 @@
- +#ifndef __NIOS_STRING_H__
- +#define __NIOS_STRING_H__
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/string.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#ifdef __KERNEL__ /* only set these up for kernel code */
- +
- +#define __HAVE_ARCH_MEMMOVE
- +void * memmove(void * d, const void * s, size_t count);
- +#define __HAVE_ARCH_MEMCPY
- +extern void * memcpy(void *d, const void *s, size_t count);
- +#define __HAVE_ARCH_MEMSET
- +extern void * memset(void * s,int c,size_t count);
- +
- +#if 0
- +#define __HAVE_ARCH_BCOPY
- +#define __HAVE_ARCH_STRLEN
- +#endif
- +
- +#endif /* KERNEL */
- +
- +#endif /* !(__NIOS_STRING_H__) */
- --- linux/include/asm-nios2nommu/system.h
- +++ linux/include/asm-nios2nommu/system.h
- @@ -0,0 +1,172 @@
- +/*
- + * Taken from the m68k.
- + *
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _NIOS2NOMMU_SYSTEM_H
- +#define _NIOS2NOMMU_SYSTEM_H
- +
- +// #include <linux/config.h> /* get configuration macros */
- +#include <linux/linkage.h>
- +#include <asm/segment.h>
- +#include <asm/entry.h>
- +#include <asm/nios.h>
- +
- +/*
- + * switch_to(n) should switch tasks to task ptr, first checking that
- + * ptr isn't the current task, in which case it does nothing. This
- + * also clears the TS-flag if the task we switched to has used the
- + * math co-processor latest.
- + */
- +
- +/*
- + */
- +asmlinkage void resume(void);
- +#define switch_to(prev,next,last) \
- +{ \
- + void *_last; \
- + __asm__ __volatile__( \
- + "mov r4, %1\n" \
- + "mov r5, %2\n" \
- + "call resume\n" \
- + "mov %0,r4\n" \
- + : "=r" (_last) \
- + : "r" (prev), "r" (next) \
- + : "r4","r5","r7","r8","ra"); \
- + (last) = _last; \
- +}
- +
- +#define local_irq_enable() __asm__ __volatile__ ( \
- + "rdctl r8, status\n" \
- + "ori r8, r8, 1\n" \
- + "wrctl status, r8\n" \
- + : : : "r8")
- +
- +#define local_irq_disable() __asm__ __volatile__ ( \
- + "rdctl r8, status\n" \
- + "andi r8, r8, 0xfffe\n" \
- + "wrctl status, r8\n" \
- + : : : "r8")
- +
- +#define local_save_flags(x) __asm__ __volatile__ ( \
- + "rdctl r8, status\n" \
- + "mov %0, r8\n" \
- + :"=r" (x) : : "r8", "memory")
- +
- +#define local_irq_restore(x) __asm__ __volatile__ ( \
- + "mov r8, %0\n" \
- + "wrctl status, r8\n" \
- + : :"r" (x) : "memory")
- +
- +/* For spinlocks etc */
- +#define local_irq_save(x) do { local_save_flags(x); local_irq_disable(); } while (0)
- +
- +#define irqs_disabled() \
- +({ \
- + unsigned long flags; \
- + local_save_flags(flags); \
- + ((flags & NIOS2_STATUS_PIE_MSK) == 0x0); \
- +})
- +
- +#define iret() __asm__ __volatile__ ("eret": : :"memory", "ea")
- +
- +/*
- + * Force strict CPU ordering.
- + * Not really required on m68k...
- + */
- +#define nop() asm volatile ("nop"::)
- +#define mb() asm volatile ("" : : :"memory")
- +#define rmb() asm volatile ("" : : :"memory")
- +#define wmb() asm volatile ("" : : :"memory")
- +#define set_rmb(var, value) do { xchg(&var, value); } while (0)
- +#define set_mb(var, value) set_rmb(var, value)
- +#define set_wmb(var, value) do { var = value; wmb(); } while (0)
- +
- +#ifdef CONFIG_SMP
- +#define smp_mb() mb()
- +#define smp_rmb() rmb()
- +#define smp_wmb() wmb()
- +#define smp_read_barrier_depends() read_barrier_depends()
- +#else
- +#define smp_mb() barrier()
- +#define smp_rmb() barrier()
- +#define smp_wmb() barrier()
- +#define smp_read_barrier_depends() do { } while(0)
- +#endif
- +
- +#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
- +#define tas(ptr) (xchg((ptr),1))
- +
- +struct __xchg_dummy { unsigned long a[100]; };
- +#define __xg(x) ((volatile struct __xchg_dummy *)(x))
- +
- +static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
- +{
- + unsigned long tmp, flags;
- +
- + local_irq_save(flags);
- +
- + switch (size) {
- + case 1:
- + __asm__ __volatile__( \
- + "ldb %0, %2\n" \
- + "stb %1, %2\n" \
- + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
- + break;
- + case 2:
- + __asm__ __volatile__( \
- + "ldh %0, %2\n" \
- + "sth %1, %2\n" \
- + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
- + break;
- + case 4:
- + __asm__ __volatile__( \
- + "ldw %0, %2\n" \
- + "stw %1, %2\n" \
- + : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
- + break;
- + }
- + local_irq_restore(flags);
- + return tmp;
- +}
- +
- +/*
- + * Atomic compare and exchange. Compare OLD with MEM, if identical,
- + * store NEW in MEM. Return the initial value in MEM. Success is
- + * indicated by comparing RETURN with OLD.
- + */
- +#define __HAVE_ARCH_CMPXCHG 1
- +
- +static __inline__ unsigned long
- +cmpxchg(volatile int *p, int old, int new)
- +{
- + unsigned long flags;
- + int prev;
- +
- + local_irq_save(flags);
- + if ((prev = *p) == old)
- + *p = new;
- + local_irq_restore(flags);
- + return(prev);
- +}
- +
- +#endif /* _NIOS2NOMMU_SYSTEM_H */
- --- linux/include/asm-nios2nommu/termbits.h
- +++ linux/include/asm-nios2nommu/termbits.h
- @@ -0,0 +1,199 @@
- +#ifndef __ARCH_NIOS_TERMBITS_H__
- +#define __ARCH_NIOS_TERMBITS_H__
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/termbits.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <linux/posix_types.h>
- +
- +typedef unsigned char cc_t;
- +typedef unsigned int speed_t;
- +typedef unsigned int tcflag_t;
- +
- +#define NCCS 19
- +struct termios {
- + tcflag_t c_iflag; /* input mode flags */
- + tcflag_t c_oflag; /* output mode flags */
- + tcflag_t c_cflag; /* control mode flags */
- + tcflag_t c_lflag; /* local mode flags */
- + cc_t c_line; /* line discipline */
- + cc_t c_cc[NCCS]; /* control characters */
- +};
- +
- +/* c_cc characters */
- +#define VINTR 0
- +#define VQUIT 1
- +#define VERASE 2
- +#define VKILL 3
- +#define VEOF 4
- +#define VTIME 5
- +#define VMIN 6
- +#define VSWTC 7
- +#define VSTART 8
- +#define VSTOP 9
- +#define VSUSP 10
- +#define VEOL 11
- +#define VREPRINT 12
- +#define VDISCARD 13
- +#define VWERASE 14
- +#define VLNEXT 15
- +#define VEOL2 16
- +
- +
- +/* c_iflag bits */
- +#define IGNBRK 0000001
- +#define BRKINT 0000002
- +#define IGNPAR 0000004
- +#define PARMRK 0000010
- +#define INPCK 0000020
- +#define ISTRIP 0000040
- +#define INLCR 0000100
- +#define IGNCR 0000200
- +#define ICRNL 0000400
- +#define IUCLC 0001000
- +#define IXON 0002000
- +#define IXANY 0004000
- +#define IXOFF 0010000
- +#define IMAXBEL 0020000
- +#define IUTF8 0040000
- +
- +/* c_oflag bits */
- +#define OPOST 0000001
- +#define OLCUC 0000002
- +#define ONLCR 0000004
- +#define OCRNL 0000010
- +#define ONOCR 0000020
- +#define ONLRET 0000040
- +#define OFILL 0000100
- +#define OFDEL 0000200
- +#define NLDLY 0000400
- +#define NL0 0000000
- +#define NL1 0000400
- +#define CRDLY 0003000
- +#define CR0 0000000
- +#define CR1 0001000
- +#define CR2 0002000
- +#define CR3 0003000
- +#define TABDLY 0014000
- +#define TAB0 0000000
- +#define TAB1 0004000
- +#define TAB2 0010000
- +#define TAB3 0014000
- +#define XTABS 0014000
- +#define BSDLY 0020000
- +#define BS0 0000000
- +#define BS1 0020000
- +#define VTDLY 0040000
- +#define VT0 0000000
- +#define VT1 0040000
- +#define FFDLY 0100000
- +#define FF0 0000000
- +#define FF1 0100000
- +
- +/* c_cflag bit meaning */
- +#define CBAUD 0010017
- +#define B0 0000000 /* hang up */
- +#define B50 0000001
- +#define B75 0000002
- +#define B110 0000003
- +#define B134 0000004
- +#define B150 0000005
- +#define B200 0000006
- +#define B300 0000007
- +#define B600 0000010
- +#define B1200 0000011
- +#define B1800 0000012
- +#define B2400 0000013
- +#define B4800 0000014
- +#define B9600 0000015
- +#define B19200 0000016
- +#define B38400 0000017
- +#define EXTA B19200
- +#define EXTB B38400
- +#define CSIZE 0000060
- +#define CS5 0000000
- +#define CS6 0000020
- +#define CS7 0000040
- +#define CS8 0000060
- +#define CSTOPB 0000100
- +#define CREAD 0000200
- +#define PARENB 0000400
- +#define PARODD 0001000
- +#define HUPCL 0002000
- +#define CLOCAL 0004000
- +#define CBAUDEX 0010000
- +#define B57600 0010001
- +#define B115200 0010002
- +#define B230400 0010003
- +#define B460800 0010004
- +#define B500000 0010005
- +#define B576000 0010006
- +#define B921600 0010007
- +#define B1000000 0010010
- +#define B1152000 0010011
- +#define B1500000 0010012
- +#define B2000000 0010013
- +#define B2500000 0010014
- +#define B3000000 0010015
- +#define B3500000 0010016
- +#define B4000000 0010017
- +#define CIBAUD 002003600000 /* input baud rate (not used) */
- +#define CMSPAR 010000000000 /* mark or space (stick) parity */
- +#define CRTSCTS 020000000000 /* flow control */
- +
- +/* c_lflag bits */
- +#define ISIG 0000001
- +#define ICANON 0000002
- +#define XCASE 0000004
- +#define ECHO 0000010
- +#define ECHOE 0000020
- +#define ECHOK 0000040
- +#define ECHONL 0000100
- +#define NOFLSH 0000200
- +#define TOSTOP 0000400
- +#define ECHOCTL 0001000
- +#define ECHOPRT 0002000
- +#define ECHOKE 0004000
- +#define FLUSHO 0010000
- +#define PENDIN 0040000
- +#define IEXTEN 0100000
- +
- +
- +/* tcflow() and TCXONC use these */
- +#define TCOOFF 0
- +#define TCOON 1
- +#define TCIOFF 2
- +#define TCION 3
- +
- +/* tcflush() and TCFLSH use these */
- +#define TCIFLUSH 0
- +#define TCOFLUSH 1
- +#define TCIOFLUSH 2
- +
- +/* tcsetattr uses these */
- +#define TCSANOW 0
- +#define TCSADRAIN 1
- +#define TCSAFLUSH 2
- +
- +#endif /* __ARCH_NIOS_TERMBITS_H__ */
- --- linux/include/asm-nios2nommu/termios.h
- +++ linux/include/asm-nios2nommu/termios.h
- @@ -0,0 +1,132 @@
- +#ifndef _NIOS_TERMIOS_H
- +#define _NIOS_TERMIOS_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/termios.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/termbits.h>
- +#include <asm/ioctls.h>
- +
- +struct winsize {
- + unsigned short ws_row;
- + unsigned short ws_col;
- + unsigned short ws_xpixel;
- + unsigned short ws_ypixel;
- +};
- +
- +#define NCC 8
- +struct termio {
- + unsigned short c_iflag; /* input mode flags */
- + unsigned short c_oflag; /* output mode flags */
- + unsigned short c_cflag; /* control mode flags */
- + unsigned short c_lflag; /* local mode flags */
- + unsigned char c_line; /* line discipline */
- + unsigned char c_cc[NCC]; /* control characters */
- +};
- +
- +#ifdef __KERNEL__
- +/* intr=^C quit=^| erase=del kill=^U
- + eof=^D vtime=\0 vmin=\1 sxtc=\0
- + start=^Q stop=^S susp=^Z eol=\0
- + reprint=^R discard=^U werase=^W lnext=^V
- + eol2=\0
- +*/
- +#define INIT_C_CC "\003\034\177\025\004\0\1\0\021\023\032\0\022\017\027\026\0"
- +#endif
- +
- +/* modem lines */
- +#define TIOCM_LE 0x001
- +#define TIOCM_DTR 0x002
- +#define TIOCM_RTS 0x004
- +#define TIOCM_ST 0x008
- +#define TIOCM_SR 0x010
- +#define TIOCM_CTS 0x020
- +#define TIOCM_CAR 0x040
- +#define TIOCM_RNG 0x080
- +#define TIOCM_DSR 0x100
- +#define TIOCM_CD TIOCM_CAR
- +#define TIOCM_RI TIOCM_RNG
- +#define TIOCM_OUT1 0x2000
- +#define TIOCM_OUT2 0x4000
- +#define TIOCM_LOOP 0x8000
- +
- +/* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */
- +
- +/* line disciplines */
- +#define N_TTY 0
- +#define N_SLIP 1
- +#define N_MOUSE 2
- +#define N_PPP 3
- +#define N_STRIP 4
- +#define N_AX25 5
- +#define N_X25 6 /* X.25 async */
- +#define N_6PACK 7
- +#define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */
- +#define N_R3964 9 /* Reserved for Simatic R3964 module */
- +#define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */
- +#define N_IRDA 11 /* Linux IrDa - http://irda.sourceforge.net/ */
- +#define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data cards about SMS messages */
- +#define N_HDLC 13 /* synchronous HDLC */
- +#define N_SYNC_PPP 14
- +#define N_HCI 15 /* Bluetooth HCI UART */
- +
- +#ifdef __KERNEL__
- +
- +/*
- + * Translate a "termio" structure into a "termios". Ugh.
- + */
- +#define user_termio_to_kernel_termios(termios, termio) \
- +({ \
- + unsigned short tmp; \
- + get_user(tmp, &(termio)->c_iflag); \
- + (termios)->c_iflag = (0xffff0000 & ((termios)->c_iflag)) | tmp; \
- + get_user(tmp, &(termio)->c_oflag); \
- + (termios)->c_oflag = (0xffff0000 & ((termios)->c_oflag)) | tmp; \
- + get_user(tmp, &(termio)->c_cflag); \
- + (termios)->c_cflag = (0xffff0000 & ((termios)->c_cflag)) | tmp; \
- + get_user(tmp, &(termio)->c_lflag); \
- + (termios)->c_lflag = (0xffff0000 & ((termios)->c_lflag)) | tmp; \
- + get_user((termios)->c_line, &(termio)->c_line); \
- + copy_from_user((termios)->c_cc, (termio)->c_cc, NCC); \
- +})
- +
- +/*
- + * Translate a "termios" structure into a "termio". Ugh.
- + */
- +#define kernel_termios_to_user_termio(termio, termios) \
- +({ \
- + put_user((termios)->c_iflag, &(termio)->c_iflag); \
- + put_user((termios)->c_oflag, &(termio)->c_oflag); \
- + put_user((termios)->c_cflag, &(termio)->c_cflag); \
- + put_user((termios)->c_lflag, &(termio)->c_lflag); \
- + put_user((termios)->c_line, &(termio)->c_line); \
- + copy_to_user((termio)->c_cc, (termios)->c_cc, NCC); \
- +})
- +
- +#define user_termios_to_kernel_termios(k, u) copy_from_user(k, u, sizeof(struct termios))
- +#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios))
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _NIOS_TERMIOS_H */
- --- linux/include/asm-nios2nommu/thread_info.h
- +++ linux/include/asm-nios2nommu/thread_info.h
- @@ -0,0 +1,127 @@
- +/* thread_info.h: niosnommu low-level thread information
- + * adapted from the m68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd.
- + * Copyright (C) 2002 Microtronix Datacom
- + *
- + * - Incorporating suggestions made by Linus Torvalds and Dave Miller
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +
- +#ifndef _ASM_THREAD_INFO_H
- +#define _ASM_THREAD_INFO_H
- +
- +#include <asm/page.h>
- +
- +#ifdef __KERNEL__
- +
- +#ifndef __ASSEMBLY__
- +
- +/*
- + * low level task data.
- + */
- +struct thread_info {
- + struct task_struct *task; /* main task structure */
- + struct exec_domain *exec_domain; /* execution domain */
- + unsigned long flags; /* low level flags */
- + int cpu; /* cpu we're on */
- + int preempt_count; /* 0 => preemptable, <0 => BUG*/
- + struct restart_block restart_block;
- +};
- +
- +/*
- + * macros/functions for gaining access to the thread information structure
- + */
- +#define INIT_THREAD_INFO(tsk) \
- +{ \
- + .task = &tsk, \
- + .exec_domain = &default_exec_domain, \
- + .flags = 0, \
- + .cpu = 0, \
- + .preempt_count = 1, \
- + .restart_block = { \
- + .fn = do_no_restart_syscall, \
- + }, \
- +}
- +
- +#define init_thread_info (init_thread_union.thread_info)
- +#define init_stack (init_thread_union.stack)
- +
- +
- +/* how to get the thread information struct from C
- + usable only in supervisor mode */
- +static inline struct thread_info *current_thread_info(void)
- +{
- + struct thread_info *ti;
- + __asm__ __volatile__(
- + "mov %0, sp\n"
- + "and %0, %0, %1\n"
- + : "=&r"(ti)
- + : "r" (~(THREAD_SIZE-1))
- + );
- + return ti;
- +}
- +
- +/* thread information allocation */
- +#define alloc_thread_info(tsk) ((struct thread_info *) \
- + __get_free_pages(GFP_KERNEL, 1))
- +#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
- +#define put_thread_info(ti) put_task_struct((ti)->task)
- +
- +#define PREEMPT_ACTIVE 0x4000000
- +
- +/*
- + * thread information flag bit numbers
- + */
- +#define TIF_SYSCALL_TRACE 0 /* syscall trace active */
- +#define TIF_NOTIFY_RESUME 1 /* resumption notification requested */
- +#define TIF_SIGPENDING 2 /* signal pending */
- +#define TIF_NEED_RESCHED 3 /* rescheduling necessary */
- +#define TIF_POLLING_NRFLAG 4 /* true if poll_idle() is polling
- + TIF_NEED_RESCHED */
- +#define TIF_MEMDIE 5
- +
- +/* as above, but as bit values */
- +#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
- +#define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME)
- +#define _TIF_SIGPENDING (1<<TIF_SIGPENDING)
- +#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
- +#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
- +
- +#define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */
- +
- +#else /* __ASSEMBLY__ */
- +
- +/* how to get the thread information struct from ASM
- + usable only in supervisor mode */
- +.macro GET_THREAD_INFO reg
- +.if THREAD_SIZE & 0xffff0000
- + andhi \reg, sp, %hi(~(THREAD_SIZE-1))
- +.else
- + addi \reg, r0, %lo(~(THREAD_SIZE-1))
- + and \reg, \reg, sp
- +.endif
- +.endm
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _ASM_THREAD_INFO_H */
- --- linux/include/asm-nios2nommu/timer_struct.h
- +++ linux/include/asm-nios2nommu/timer_struct.h
- @@ -0,0 +1,38 @@
- +
- +// ----------------------------------------------
- +// Timer Peripheral
- +
- +// Timer Registers
- +typedef volatile struct
- + {
- + int np_timerstatus; // read only, 2 bits (any write to clear TO)
- + int np_timercontrol; // write/readable, 4 bits
- + int np_timerperiodl; // write/readable, 16 bits
- + int np_timerperiodh; // write/readable, 16 bits
- + int np_timersnapl; // read only, 16 bits
- + int np_timersnaph; // read only, 16 bits
- + } np_timer;
- +
- +// Timer Register Bits
- +enum
- + {
- + np_timerstatus_run_bit = 1, // timer is running
- + np_timerstatus_to_bit = 0, // timer has timed out
- +
- + np_timercontrol_stop_bit = 3, // stop the timer
- + np_timercontrol_start_bit = 2, // start the timer
- + np_timercontrol_cont_bit = 1, // continous mode
- + np_timercontrol_ito_bit = 0, // enable time out interrupt
- +
- + np_timerstatus_run_mask = (1<<1), // timer is running
- + np_timerstatus_to_mask = (1<<0), // timer has timed out
- +
- + np_timercontrol_stop_mask = (1<<3), // stop the timer
- + np_timercontrol_start_mask = (1<<2), // start the timer
- + np_timercontrol_cont_mask = (1<<1), // continous mode
- + np_timercontrol_ito_mask = (1<<0) // enable time out interrupt
- + };
- +
- +// Timer Routines
- +int nr_timer_milliseconds(void); // Starts on first call, hogs timer1.
- +
- --- linux/include/asm-nios2nommu/timex.h
- +++ linux/include/asm-nios2nommu/timex.h
- @@ -0,0 +1,48 @@
- +#ifndef _ASMNIOS2NOMMU_TIMEX_H
- +#define _ASMNIOS2NOMMU_TIMEX_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/timex.h
- + *
- + * timex specifications
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/nios.h>
- +
- +
- +#define CLOCK_TICK_RATE nasys_clock_freq /* Underlying HZ */
- +
- +#define CLOCK_TICK_FACTOR 20 /* Factor of both 1000000 and CLOCK_TICK_RATE */
- +
- +#define FINETUNE ((((((long)LATCH * HZ - CLOCK_TICK_RATE) << SHIFT_HZ) * \
- + (1000000/CLOCK_TICK_FACTOR) / (CLOCK_TICK_RATE/CLOCK_TICK_FACTOR)) \
- + << (SHIFT_SCALE-SHIFT_HZ)) / HZ)
- +
- +typedef unsigned long cycles_t;
- +
- +static inline cycles_t get_cycles(void)
- +{
- + return 0;
- +}
- +
- +#endif
- --- linux/include/asm-nios2nommu/tlbflush.h
- +++ linux/include/asm-nios2nommu/tlbflush.h
- @@ -0,0 +1,86 @@
- +#ifndef _NIOS2NOMMU_TLBFLUSH_H
- +#define _NIOS2NOMMU_TLBFLUSH_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/tlbflush.h
- + *
- + * Ported from m68knommu.
- + *
- + * Copyright (C) 2003 Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +#include <asm/setup.h>
- +
- +/*
- + * flush all user-space atc entries.
- + */
- +static inline void __flush_tlb(void)
- +{
- + BUG();
- +}
- +
- +static inline void __flush_tlb_one(unsigned long addr)
- +{
- + BUG();
- +}
- +
- +#define flush_tlb() __flush_tlb()
- +
- +/*
- + * flush all atc entries (both kernel and user-space entries).
- + */
- +static inline void flush_tlb_all(void)
- +{
- + BUG();
- +}
- +
- +static inline void flush_tlb_mm(struct mm_struct *mm)
- +{
- + BUG();
- +}
- +
- +static inline void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
- +{
- + BUG();
- +}
- +
- +static inline void flush_tlb_range(struct mm_struct *mm,
- + unsigned long start, unsigned long end)
- +{
- + BUG();
- +}
- +
- +extern inline void flush_tlb_kernel_page(unsigned long addr)
- +{
- + BUG();
- +}
- +
- +extern inline void flush_tlb_pgtables(struct mm_struct *mm,
- + unsigned long start, unsigned long end)
- +{
- + BUG();
- +}
- +
- +#endif /* _NIOS2NOMMU_TLBFLUSH_H */
- --- linux/include/asm-nios2nommu/tlb.h
- +++ linux/include/asm-nios2nommu/tlb.h
- @@ -0,0 +1,35 @@
- +#ifndef __NIOS_TLB_H__
- +#define __NIOS_TLB_H__
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/tlb.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2003 Microtronix Datacom Ltd
- + * Copyright (C) 2002 NEC Corporation
- + * Copyright (C) 2002 Miles Bader <miles@gnu.org>
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Written by Miles Bader <miles@gnu.org>
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +#define tlb_flush(tlb) ((void)0)
- +
- +#include <asm-generic/tlb.h>
- +
- +#endif /* __NIOS_TLB_H__ */
- +
- --- linux/include/asm-nios2nommu/topology.h
- +++ linux/include/asm-nios2nommu/topology.h
- @@ -0,0 +1,30 @@
- +#ifndef _ASM_NIOS2NOMMU_TOPOLOGY_H
- +#define _ASM_NIOS2NOMMU_TOPOLOGY_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/topology.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm-generic/topology.h>
- +
- +#endif /* _ASM_NIOS2NOMMU_TOPOLOGY_H */
- --- linux/include/asm-nios2nommu/traps.h
- +++ linux/include/asm-nios2nommu/traps.h
- @@ -0,0 +1,27 @@
- +/*
- + * Copyright (C) 2004, Microtronix Datacom Ltd.
- + *
- + * All rights reserved.
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful, but
- + * WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- + * NON INFRINGEMENT. See the GNU General Public License for more
- + * details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- + *
- + */
- +#ifndef _NIOS2_TRAPS_H
- +#define _NIOS2_TRAPS_H
- +
- +#define TRAP_ID_SYSCALL 0
- +#define TRAP_ID_APPDEBUG 1
- +#endif /* !(_NIOS2_TRAPS_H) */
- --- linux/include/asm-nios2nommu/types.h
- +++ linux/include/asm-nios2nommu/types.h
- @@ -0,0 +1,93 @@
- +#ifndef _NIOS_TYPES_H
- +#define _NIOS_TYPES_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/types.h
- + *
- + * Derived from m68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/*
- + * This file is never included by application software unless
- + * explicitly requested (e.g., via linux/types.h) in which case the
- + * application is Linux specific so (user-) name space pollution is
- + * not a major issue. However, for interoperability, libraries still
- + * need to be careful to avoid a name clashes.
- + */
- +
- +#ifndef __ASSEMBLY__
- +
- +typedef unsigned short umode_t;
- +
- +/*
- + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
- + * header files exported to user space
- + */
- +
- +typedef __signed__ char __s8;
- +typedef unsigned char __u8;
- +
- +typedef __signed__ short __s16;
- +typedef unsigned short __u16;
- +
- +typedef __signed__ int __s32;
- +typedef unsigned int __u32;
- +
- +#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
- +typedef __signed__ long long __s64;
- +typedef unsigned long long __u64;
- +#endif
- +
- +#endif /* __ASSEMBLY__ */
- +
- +/*
- + * These aren't exported outside the kernel to avoid name space clashes
- + */
- +#ifdef __KERNEL__
- +
- +#define BITS_PER_LONG 32
- +
- +#ifndef __ASSEMBLY__
- +
- +typedef signed char s8;
- +typedef unsigned char u8;
- +
- +typedef signed short s16;
- +typedef unsigned short u16;
- +
- +typedef signed int s32;
- +typedef unsigned int u32;
- +
- +typedef signed long long s64;
- +typedef unsigned long long u64;
- +
- +/* DMA addresses are always 32-bits wide */
- +
- +typedef u32 dma_addr_t;
- +typedef u32 dma64_addr_t;
- +
- +typedef unsigned short kmem_bufctl_t;
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _NIOS_TYPES_H */
- --- linux/include/asm-nios2nommu/uaccess.h
- +++ linux/include/asm-nios2nommu/uaccess.h
- @@ -0,0 +1,183 @@
- +#ifndef __NIOS2NOMMU_UACCESS_H
- +#define __NIOS2NOMMU_UACCESS_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * asm-nios2nommu/uaccess.h
- + *
- + * User space memory access functions
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Ported from asm-m68knommu/uaccess.h --wentao
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <linux/sched.h>
- +#include <linux/mm.h>
- +#include <asm/segment.h>
- +#include <asm/nios.h>
- +
- +#define VERIFY_READ 0
- +#define VERIFY_WRITE 1
- +
- +#define access_ok(type,addr,size) _access_ok((unsigned long)(addr),(size))
- +
- +static inline int _access_ok(unsigned long addr, unsigned long size)
- +{
- + return (((unsigned long)addr < (unsigned long)nasys_program_mem_end) &&
- + (((unsigned long)addr >= (unsigned long)nasys_program_mem)));
- +}
- +
- +extern inline int verify_area(int type, const void * addr, unsigned long size)
- +{
- + return access_ok(type,addr,size)?0:-EFAULT;
- +}
- +
- +/*
- + * The exception table consists of pairs of addresses: the first is the
- + * address of an instruction that is allowed to fault, and the second is
- + * the address at which the program should continue. No registers are
- + * modified, so it is entirely up to the continuation code to figure out
- + * what to do.
- + *
- + * All the routines below use bits of fixup code that are out of line
- + * with the main instruction path. This means when everything is well,
- + * we don't even have to jump over them. Further, they do not intrude
- + * on our cache or tlb entries.
- + */
- +
- +#define ARCH_HAS_SEARCH_EXTABLE
- +//;dgt2;tmp;
- +
- +struct exception_table_entry
- +{
- + unsigned long insn, fixup;
- +};
- +
- +/* Returns 0 if exception not found and fixup otherwise. */
- +extern unsigned long search_exception_table(unsigned long);
- +
- +
- +/*
- + * These are the main single-value transfer routines. They automatically
- + * use the right size if we just have the right pointer type.
- + */
- +
- +#define put_user(x, ptr) \
- +({ \
- + int __pu_err = 0; \
- + typeof(*(ptr)) __pu_val = (x); \
- + switch (sizeof (*(ptr))) { \
- + case 1: \
- + case 2: \
- + case 4: \
- + case 8: \
- + memcpy(ptr, &__pu_val, sizeof (*(ptr))); \
- + break; \
- + default: \
- + __pu_err = __put_user_bad(); \
- + break; \
- + } \
- + __pu_err; \
- +})
- +#define __put_user(x, ptr) put_user(x, ptr)
- +
- +extern int __put_user_bad(void);
- +
- +/*
- + * Tell gcc we read from memory instead of writing: this is because
- + * we do not write to any memory gcc knows about, so there are no
- + * aliasing issues.
- + */
- +
- +#define __ptr(x) ((unsigned long *)(x))
- +
- +#define get_user(x, ptr) \
- +({ \
- + int __gu_err = 0; \
- + typeof(*(ptr)) __gu_val = 0; \
- + switch (sizeof(*(ptr))) { \
- + case 1: \
- + case 2: \
- + case 4: \
- + case 8: \
- + memcpy(&__gu_val, ptr, sizeof (*(ptr))); \
- + break; \
- + default: \
- + __gu_val = 0; \
- + __gu_err = __get_user_bad(); \
- + break; \
- + } \
- + (x) = __gu_val; \
- + __gu_err; \
- +})
- +#define __get_user(x, ptr) get_user(x, ptr)
- +
- +extern int __get_user_bad(void);
- +
- +#define copy_from_user(to, from, n) (memcpy(to, from, n), 0)
- +#define copy_to_user(to, from, n) (memcpy(to, from, n), 0)
- +
- +#define __copy_from_user(to, from, n) copy_from_user(to, from, n)
- +#define __copy_to_user(to, from, n) copy_to_user(to, from, n)
- +#define __copy_to_user_inatomic __copy_to_user
- +#define __copy_from_user_inatomic __copy_from_user
- +
- +#define copy_to_user_ret(to,from,n,retval) ({ if (copy_to_user(to,from,n)) return retval; })
- +
- +#define copy_from_user_ret(to,from,n,retval) ({ if (copy_from_user(to,from,n)) return retval; })
- +
- +/*
- + * Copy a null terminated string from userspace.
- + */
- +
- +static inline long
- +strncpy_from_user(char *dst, const char *src, long count)
- +{
- + char *tmp;
- + strncpy(dst, src, count);
- + for (tmp = dst; *tmp && count > 0; tmp++, count--)
- + ;
- + return(tmp - dst); /* DAVIDM should we count a NUL ? check getname */
- +}
- +
- +/*
- + * Return the size of a string (including the ending 0)
- + *
- + * Return 0 on exception, a value greater than N if too long
- + */
- +static inline long strnlen_user(const char *src, long n)
- +{
- + return(strlen(src) + 1); /* DAVIDM make safer */
- +}
- +
- +#define strlen_user(str) strnlen_user(str, 32767)
- +
- +/*
- + * Zero Userspace
- + */
- +
- +static inline unsigned long
- +clear_user(void *to, unsigned long n)
- +{
- + memset(to, 0, n);
- + return(0);
- +}
- +
- +#endif /* _NIOS2NOMMU_UACCESS_H */
- --- linux/include/asm-nios2nommu/uart_struct.h
- +++ linux/include/asm-nios2nommu/uart_struct.h
- @@ -0,0 +1,83 @@
- +
- +// UART Registers
- +typedef volatile struct
- + {
- + int np_uartrxdata; // Read-only, 8-bit
- + int np_uarttxdata; // Write-only, 8-bit
- + int np_uartstatus; // Read-only, 8-bit
- + int np_uartcontrol; // Read/Write, 9-bit
- + int np_uartdivisor; // Read/Write, 16-bit, optional
- + int np_uartendofpacket; // Read/Write, end-of-packet character
- + } np_uart;
- +
- +// UART Status Register Bits
- +enum
- + {
- + np_uartstatus_eop_bit = 12,
- + np_uartstatus_cts_bit = 11,
- + np_uartstatus_dcts_bit = 10,
- + np_uartstatus_e_bit = 8,
- + np_uartstatus_rrdy_bit = 7,
- + np_uartstatus_trdy_bit = 6,
- + np_uartstatus_tmt_bit = 5,
- + np_uartstatus_toe_bit = 4,
- + np_uartstatus_roe_bit = 3,
- + np_uartstatus_brk_bit = 2,
- + np_uartstatus_fe_bit = 1,
- + np_uartstatus_pe_bit = 0,
- +
- + np_uartstatus_eop_mask = (1<<12),
- + np_uartstatus_cts_mask = (1<<11),
- + np_uartstatus_dcts_mask = (1<<10),
- + np_uartstatus_e_mask = (1<<8),
- + np_uartstatus_rrdy_mask = (1<<7),
- + np_uartstatus_trdy_mask = (1<<6),
- + np_uartstatus_tmt_mask = (1<<5),
- + np_uartstatus_toe_mask = (1<<4),
- + np_uartstatus_roe_mask = (1<<3),
- + np_uartstatus_brk_mask = (1<<2),
- + np_uartstatus_fe_mask = (1<<1),
- + np_uartstatus_pe_mask = (1<<0)
- + };
- +
- +// UART Control Register Bits
- +enum
- + {
- + np_uartcontrol_ieop_bit = 12,
- + np_uartcontrol_rts_bit = 11,
- + np_uartcontrol_idcts_bit = 10,
- + np_uartcontrol_tbrk_bit = 9,
- + np_uartcontrol_ie_bit = 8,
- + np_uartcontrol_irrdy_bit = 7,
- + np_uartcontrol_itrdy_bit = 6,
- + np_uartcontrol_itmt_bit = 5,
- + np_uartcontrol_itoe_bit = 4,
- + np_uartcontrol_iroe_bit = 3,
- + np_uartcontrol_ibrk_bit = 2,
- + np_uartcontrol_ife_bit = 1,
- + np_uartcontrol_ipe_bit = 0,
- +
- + np_uartcontrol_ieop_mask = (1<<12),
- + np_uartcontrol_rts_mask = (1<<11),
- + np_uartcontrol_idcts_mask = (1<<10),
- + np_uartcontrol_tbrk_mask = (1<<9),
- + np_uartcontrol_ie_mask = (1<<8),
- + np_uartcontrol_irrdy_mask = (1<<7),
- + np_uartcontrol_itrdy_mask = (1<<6),
- + np_uartcontrol_itmt_mask = (1<<5),
- + np_uartcontrol_itoe_mask = (1<<4),
- + np_uartcontrol_iroe_mask = (1<<3),
- + np_uartcontrol_ibrk_mask = (1<<2),
- + np_uartcontrol_ife_mask = (1<<1),
- + np_uartcontrol_ipe_mask = (1<<0)
- + };
- +
- +// UART Routines
- +int nr_uart_rxchar(np_uart *uartBase); // 0 for default UART
- +void nr_uart_txcr(void);
- +void nr_uart_txchar(int c,np_uart *uartBase); // 0 for default UART
- +void nr_uart_txhex(int x); // 16 or 32 bits
- +void nr_uart_txhex16(short x);
- +void nr_uart_txhex32(long x);
- +void nr_uart_txstring(char *s);
- +
- --- linux/include/asm-nios2nommu/ucontext.h
- +++ linux/include/asm-nios2nommu/ucontext.h
- @@ -0,0 +1,63 @@
- +#ifndef _NIOSKNOMMU_UCONTEXT_H
- +#define _NIOSKNOMMU_UCONTEXT_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/ucontext.h
- + *
- + * Derived from M68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +typedef int greg_t;
- +#define NGREG 32
- +typedef greg_t gregset_t[NGREG];
- +
- +#ifdef CONFIG_FPU
- +typedef struct fpregset {
- + int f_pcr;
- + int f_psr;
- + int f_fpiaddr;
- + int f_fpregs[8][3];
- +} fpregset_t;
- +#endif
- +
- +struct mcontext {
- + int version;
- + int status_extension;
- + gregset_t gregs;
- +#ifdef CONFIG_FPU
- + fpregset_t fpregs;
- +#endif
- +};
- +
- +#define MCONTEXT_VERSION 2
- +
- +struct ucontext {
- + unsigned long uc_flags;
- + struct ucontext *uc_link;
- + stack_t uc_stack;
- + struct mcontext uc_mcontext;
- +#ifdef CONFIG_FPU
- + unsigned long uc_filler[80];
- +#endif
- + sigset_t uc_sigmask; /* mask last for extensibility */
- +};
- +
- +#endif
- --- linux/include/asm-nios2nommu/unaligned.h
- +++ linux/include/asm-nios2nommu/unaligned.h
- @@ -0,0 +1,43 @@
- +#ifndef __NIOS_UNALIGNED_H
- +#define __NIOS_UNALIGNED_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/unaligned.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/*
- + * The nios cannot do unaligned accesses itself.
- + */
- +
- +#define get_unaligned(ptr) ({ \
- + typeof((*(ptr))) x; \
- + memcpy(&x, (void*)ptr, sizeof(*(ptr))); \
- + x; \
- +})
- +
- +#define put_unaligned(val, ptr) ({ \
- + typeof((*(ptr))) x = val; \
- + memcpy((void*)ptr, &x, sizeof(*(ptr))); \
- +})
- +
- +#endif /* __NIOS_UNALIGNED_H */
- --- linux/include/asm-nios2nommu/unistd.h
- +++ linux/include/asm-nios2nommu/unistd.h
- @@ -0,0 +1,686 @@
- +#ifndef _ASM_NIOS_UNISTD_H_
- +#define _ASM_NIOS_UNISTD_H_
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/unistd.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * //vic - kernel_thread moved to process.c
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/traps.h>
- +
- +/* TRAP isr expects the trap# (syscall=#TRAP_ID_SYSCALL) in r2,
- + * the syscall # in r3, and arguments in r4, r5, ...
- + * Return argument expected in r2.
- + */
- +
- +#define __NR_restart_syscall 0
- +#define __NR_exit 1
- +#define __NR_fork 2
- +#define __NR_read 3
- +#define __NR_write 4
- +#define __NR_open 5
- +#define __NR_close 6
- +#define __NR_waitpid 7
- +#define __NR_creat 8
- +#define __NR_link 9
- +#define __NR_unlink 10
- +#define __NR_execve 11
- +#define __NR_chdir 12
- +#define __NR_time 13
- +#define __NR_mknod 14
- +#define __NR_chmod 15
- +#define __NR_chown 16
- +#define __NR_break 17
- +#define __NR_oldstat 18
- +#define __NR_lseek 19
- +#define __NR_getpid 20
- +#define __NR_mount 21
- +#define __NR_umount 22
- +#define __NR_setuid 23
- +#define __NR_getuid 24
- +#define __NR_stime 25
- +#define __NR_ptrace 26
- +#define __NR_alarm 27
- +#define __NR_oldfstat 28
- +#define __NR_pause 29
- +#define __NR_utime 30
- +#define __NR_stty 31
- +#define __NR_gtty 32
- +#define __NR_access 33
- +#define __NR_nice 34
- +#define __NR_ftime 35
- +#define __NR_sync 36
- +#define __NR_kill 37
- +#define __NR_rename 38
- +#define __NR_mkdir 39
- +#define __NR_rmdir 40
- +#define __NR_dup 41
- +#define __NR_pipe 42
- +#define __NR_times 43
- +#define __NR_prof 44
- +#define __NR_brk 45
- +#define __NR_setgid 46
- +#define __NR_getgid 47
- +#define __NR_signal 48
- +#define __NR_geteuid 49
- +#define __NR_getegid 50
- +#define __NR_acct 51
- +#define __NR_umount2 52 //vic #define __NR_phys 52
- +#define __NR_lock 53
- +#define __NR_ioctl 54
- +#define __NR_fcntl 55
- +#define __NR_mpx 56
- +#define __NR_setpgid 57
- +#define __NR_ulimit 58
- +#define __NR_oldolduname 59
- +#define __NR_umask 60
- +#define __NR_chroot 61
- +#define __NR_ustat 62
- +#define __NR_dup2 63
- +#define __NR_getppid 64
- +#define __NR_getpgrp 65
- +#define __NR_setsid 66
- +#define __NR_sigaction 67
- +#define __NR_sgetmask 68
- +#define __NR_ssetmask 69
- +#define __NR_setreuid 70
- +#define __NR_setregid 71
- +#define __NR_sigsuspend 72
- +#define __NR_sigpending 73
- +#define __NR_sethostname 74
- +#define __NR_setrlimit 75
- +#define __NR_getrlimit 76
- +#define __NR_getrusage 77
- +#define __NR_gettimeofday 78
- +#define __NR_settimeofday 79
- +#define __NR_getgroups 80
- +#define __NR_setgroups 81
- +#define __NR_select 82
- +#define __NR_symlink 83
- +#define __NR_oldlstat 84
- +#define __NR_readlink 85
- +#define __NR_uselib 86
- +#define __NR_swapon 87
- +#define __NR_reboot 88
- +#define __NR_readdir 89
- +#define __NR_mmap 90
- +#define __NR_munmap 91
- +#define __NR_truncate 92
- +#define __NR_ftruncate 93
- +#define __NR_fchmod 94
- +#define __NR_fchown 95
- +#define __NR_getpriority 96
- +#define __NR_setpriority 97
- +#define __NR_profil 98
- +#define __NR_statfs 99
- +#define __NR_fstatfs 100
- +#define __NR_ioperm 101
- +#define __NR_socketcall 102
- +#define __NR_syslog 103
- +#define __NR_setitimer 104
- +#define __NR_getitimer 105
- +#define __NR_stat 106
- +#define __NR_lstat 107
- +#define __NR_fstat 108
- +#define __NR_olduname 109
- +#define __NR_iopl /* 110 */ not supported
- +#define __NR_vhangup 111
- +#define __NR_idle /* 112 */ Obsolete
- +#define __NR_vm86 /* 113 */ not supported
- +#define __NR_wait4 114
- +#define __NR_swapoff 115
- +#define __NR_sysinfo 116
- +#define __NR_ipc 117
- +#define __NR_fsync 118
- +#define __NR_sigreturn 119
- +#define __NR_clone 120
- +#define __NR_setdomainname 121
- +#define __NR_uname 122
- +#define __NR_cacheflush 123
- +#define __NR_adjtimex 124
- +#define __NR_mprotect 125
- +#define __NR_sigprocmask 126
- +#define __NR_create_module 127
- +#define __NR_init_module 128
- +#define __NR_delete_module 129
- +#define __NR_get_kernel_syms 130
- +#define __NR_quotactl 131
- +#define __NR_getpgid 132
- +#define __NR_fchdir 133
- +#define __NR_bdflush 134
- +#define __NR_sysfs 135
- +#define __NR_personality 136
- +#define __NR_afs_syscall 137 /* Syscall for Andrew File System */
- +#define __NR_setfsuid 138
- +#define __NR_setfsgid 139
- +#define __NR__llseek 140
- +#define __NR_getdents 141
- +#define __NR__newselect 142
- +#define __NR_flock 143
- +#define __NR_msync 144
- +#define __NR_readv 145
- +#define __NR_writev 146
- +#define __NR_getsid 147
- +#define __NR_fdatasync 148
- +#define __NR__sysctl 149
- +#define __NR_mlock 150
- +#define __NR_munlock 151
- +#define __NR_mlockall 152
- +#define __NR_munlockall 153
- +#define __NR_sched_setparam 154
- +#define __NR_sched_getparam 155
- +#define __NR_sched_setscheduler 156
- +#define __NR_sched_getscheduler 157
- +#define __NR_sched_yield 158
- +#define __NR_sched_get_priority_max 159
- +#define __NR_sched_get_priority_min 160
- +#define __NR_sched_rr_get_interval 161
- +#define __NR_nanosleep 162
- +#define __NR_mremap 163
- +#define __NR_setresuid 164
- +#define __NR_getresuid 165
- +#define __NR_getpagesize 166
- +#define __NR_query_module 167
- +#define __NR_poll 168
- +#define __NR_nfsservctl 169
- +#define __NR_setresgid 170
- +#define __NR_getresgid 171
- +#define __NR_prctl 172
- +#define __NR_rt_sigreturn 173
- +#define __NR_rt_sigaction 174
- +#define __NR_rt_sigprocmask 175
- +#define __NR_rt_sigpending 176
- +#define __NR_rt_sigtimedwait 177
- +#define __NR_rt_sigqueueinfo 178
- +#define __NR_rt_sigsuspend 179
- +#define __NR_pread 180
- +#define __NR_pwrite 181
- +#define __NR_lchown 182
- +#define __NR_getcwd 183
- +#define __NR_capget 184
- +#define __NR_capset 185
- +#define __NR_sigaltstack 186
- +#define __NR_sendfile 187
- +#define __NR_getpmsg 188 /* some people actually want streams */
- +#define __NR_putpmsg 189 /* some people actually want streams */
- +#define __NR_vfork 190
- +#define __NR_ugetrlimit 191
- +#define __NR_mmap2 192
- +#define __NR_truncate64 193
- +#define __NR_ftruncate64 194
- +#define __NR_stat64 195
- +#define __NR_lstat64 196
- +#define __NR_fstat64 197
- +#define __NR_chown32 198
- +#define __NR_getuid32 199
- +#define __NR_getgid32 200
- +#define __NR_geteuid32 201
- +#define __NR_getegid32 202
- +#define __NR_setreuid32 203
- +#define __NR_setregid32 204
- +#define __NR_getgroups32 205
- +#define __NR_setgroups32 206
- +#define __NR_fchown32 207
- +#define __NR_setresuid32 208
- +#define __NR_getresuid32 209
- +#define __NR_setresgid32 210
- +#define __NR_getresgid32 211
- +#define __NR_lchown32 212
- +#define __NR_setuid32 213
- +#define __NR_setgid32 214
- +#define __NR_setfsuid32 215
- +#define __NR_setfsgid32 216
- +#define __NR_pivot_root 217
- +/* 218 unused */
- +/* 219 unused */
- +#define __NR_getdents64 220
- +#define __NR_gettid 221
- +#define __NR_tkill 222
- +#define __NR_setxattr 223
- +#define __NR_lsetxattr 224
- +#define __NR_fsetxattr 225
- +#define __NR_getxattr 226
- +#define __NR_lgetxattr 227
- +#define __NR_fgetxattr 228
- +#define __NR_listxattr 229
- +#define __NR_llistxattr 230
- +#define __NR_flistxattr 231
- +#define __NR_removexattr 232
- +#define __NR_lremovexattr 233
- +#define __NR_fremovexattr 234
- +#define __NR_futex 235
- +#define __NR_sendfile64 236
- +#define __NR_mincore 237
- +#define __NR_madvise 238
- +#define __NR_fcntl64 239
- +#define __NR_readahead 240
- +#define __NR_io_setup 241
- +#define __NR_io_destroy 242
- +#define __NR_io_getevents 243
- +#define __NR_io_submit 244
- +#define __NR_io_cancel 245
- +#define __NR_fadvise64 246
- +#define __NR_exit_group 247
- +#define __NR_lookup_dcookie 248
- +#define __NR_epoll_create 249
- +#define __NR_epoll_ctl 250
- +#define __NR_epoll_wait 251
- +#define __NR_remap_file_pages 252
- +#define __NR_set_tid_address 253
- +#define __NR_timer_create 254
- +#define __NR_timer_settime 255
- +#define __NR_timer_gettime 256
- +#define __NR_timer_getoverrun 257
- +#define __NR_timer_delete 258
- +#define __NR_clock_settime 259
- +#define __NR_clock_gettime 260
- +#define __NR_clock_getres 261
- +#define __NR_clock_nanosleep 262
- +#define __NR_statfs64 263
- +#define __NR_fstatfs64 264
- +#define __NR_tgkill 265
- +#define __NR_utimes 266
- +#define __NR_fadvise64_64 267
- +#define __NR_mbind 268
- +#define __NR_get_mempolicy 269
- +#define __NR_set_mempolicy 270
- +#define __NR_mq_open 271
- +#define __NR_mq_unlink 272
- +#define __NR_mq_timedsend 273
- +#define __NR_mq_timedreceive 274
- +#define __NR_mq_notify 275
- +#define __NR_mq_getsetattr 276
- +#define __NR_waitid 277
- +#define __NR_sys_setaltroot 278
- +#define __NR_add_key 279
- +#define __NR_request_key 280
- +#define __NR_keyctl 281
- +
- +#define NR_syscalls 282
- +
- +/* user-visible error numbers are in the range -1 - -122: see
- + <asm-nios2nommu/errno.h> */
- +
- +#define __syscall_return(type, res) \
- +do { \
- + if ((unsigned long)(res) >= (unsigned long)(-125)) { \
- + \
- + /* avoid using res which is declared to be in \
- + register r2; errno might expand to a function \
- + call and clobber it. */ \
- + \
- + int __err = -(res); \
- + errno = __err; \
- + res = -1; \
- + } \
- + return (type) (res); \
- +} while (0)
- +
- +#define _syscall0(type,name) \
- +type name(void) \
- +{ \
- + long __res; \
- + \
- + __asm__ __volatile__ ( \
- + \
- + " \n\t" \
- + \
- + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
- + " movi r3, %1\n\t" /* __NR_##name */ \
- + \
- + " trap\n\t" \
- + " mov %0, r2\n\t" /* syscall rtn */ \
- + \
- + " \n\t" \
- + \
- + : "=r" (__res) /* %0 */ \
- + \
- + : "i" (__NR_##name) /* %1 */ \
- + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
- + \
- + : "r2" /* Clobbered */ \
- + , "r3" /* Clobbered */ \
- + ); \
- + \
- +__syscall_return(type,__res); \
- +}
- +
- +//;dgt2;tmp;can we RELY on syscall1 arg a
- +//;dgt2;tmp; already being in r4 ?
- +#define _syscall1(type,name,atype,a) \
- +type name(atype a) \
- +{ \
- + long __res; \
- + \
- + __asm__ __volatile__ ( \
- + \
- + " \n\t" \
- + \
- + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
- + " movi r3, %1\n\t" /* __NR_##name */ \
- + " mov r4, %3\n\t" /* (long) a */ \
- + \
- + " trap\n\t" \
- + " mov %0, r2\n\t" /* syscall rtn */ \
- + \
- + " \n\t" \
- + \
- + : "=r" (__res) /* %0 */ \
- + \
- + : "i" (__NR_##name) /* %1 */ \
- + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
- + , "r" ((long) a) /* %3 */ \
- + \
- + : "r2" /* Clobbered */ \
- + , "r3" /* Clobbered */ \
- + , "r4" /* Clobbered */ \
- + ); \
- + \
- +__syscall_return(type,__res); \
- +}
- +
- +//;dgt2;tmp;can we RELY on syscall2 args a,b
- +//;dgt2;tmp; already being in r4,r5 ?
- +#define _syscall2(type,name,atype,a,btype,b) \
- +type name(atype a,btype b) \
- +{ \
- + long __res; \
- + \
- + __asm__ __volatile__ ( \
- + \
- + " \n\t" \
- + \
- + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
- + " movi r3, %1\n\t" /* __NR_##name */ \
- + " mov r4, %3\n\t" /* (long) a */ \
- + " mov r5, %4\n\t" /* (long) b */ \
- + \
- + " trap\n\t" \
- + " mov %0, r2\n\t" /* syscall rtn */ \
- + \
- + " \n\t" \
- + \
- + : "=r" (__res) /* %0 */ \
- + \
- + : "i" (__NR_##name) /* %1 */ \
- + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
- + , "r" ((long) a) /* %3 */ \
- + , "r" ((long) b) /* %4 */ \
- + \
- + : "r2" /* Clobbered */ \
- + , "r3" /* Clobbered */ \
- + , "r4" /* Clobbered */ \
- + , "r5" /* Clobbered */ \
- + ); \
- + \
- +__syscall_return(type,__res); \
- +}
- +
- +//;dgt2;tmp;can we RELY on syscall3 args a,b,c
- +//;dgt2;tmp; already being in r4,r5,r6 ?
- +#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
- +type name(atype a,btype b,ctype c) \
- +{ \
- + long __res; \
- + \
- + __asm__ __volatile__ ( \
- + \
- + " \n\t" \
- + \
- + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
- + " movi r3, %1\n\t" /* __NR_##name */ \
- + " mov r4, %3\n\t" /* (long) a */ \
- + " mov r5, %4\n\t" /* (long) b */ \
- + " mov r6, %5\n\t" /* (long) c */ \
- + \
- + " trap\n\t" \
- + " mov %0, r2\n\t" /* syscall rtn */ \
- + \
- + " \n\t" \
- + \
- + : "=r" (__res) /* %0 */ \
- + \
- + : "i" (__NR_##name) /* %1 */ \
- + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
- + , "r" ((long) a) /* %3 */ \
- + , "r" ((long) b) /* %4 */ \
- + , "r" ((long) c) /* %5 */ \
- + \
- + : "r2" /* Clobbered */ \
- + , "r3" /* Clobbered */ \
- + , "r4" /* Clobbered */ \
- + , "r5" /* Clobbered */ \
- + , "r6" /* Clobbered */ \
- + ); \
- + \
- +__syscall_return(type,__res); \
- +}
- +
- +//;dgt2;tmp;can we RELY on syscall4 args a,b,c,d
- +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
- +#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
- +type name (atype a, btype b, ctype c, dtype d) \
- +{ \
- + long __res; \
- + \
- + __asm__ __volatile__ ( \
- + \
- + " \n\t" \
- + \
- + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
- + " movi r3, %1\n\t" /* __NR_##name */ \
- + " mov r4, %3\n\t" /* (long) a */ \
- + " mov r5, %4\n\t" /* (long) b */ \
- + " mov r6, %5\n\t" /* (long) c */ \
- + " mov r7, %6\n\t" /* (long) d */ \
- + \
- + " trap\n\t" \
- + " mov %0, r2\n\t" /* syscall rtn */ \
- + \
- + " \n\t" \
- + \
- + : "=r" (__res) /* %0 */ \
- + \
- + : "i" (__NR_##name) /* %1 */ \
- + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
- + , "r" ((long) a) /* %3 */ \
- + , "r" ((long) b) /* %4 */ \
- + , "r" ((long) c) /* %5 */ \
- + , "r" ((long) d) /* %6 */ \
- + \
- + : "r2" /* Clobbered */ \
- + , "r3" /* Clobbered */ \
- + , "r4" /* Clobbered */ \
- + , "r5" /* Clobbered */ \
- + , "r6" /* Clobbered */ \
- + , "r7" /* Clobbered */ \
- + ); \
- + \
- +__syscall_return(type,__res); \
- +}
- +
- +//;dgt2;tmp;can we RELY on syscall5 args a,b,c,d
- +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
- +#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
- +type name (atype a,btype b,ctype c,dtype d,etype e) \
- +{ \
- + long __res; \
- + \
- + __asm__ __volatile__ ( \
- + \
- + " \n\t" \
- + \
- + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
- + " movi r3, %1\n\t" /* __NR_##name */ \
- + " mov r4, %3\n\t" /* (long) a */ \
- + " mov r5, %4\n\t" /* (long) b */ \
- + " mov r6, %5\n\t" /* (long) c */ \
- + " mov r7, %6\n\t" /* (long) c */ \
- + " mov r8, %7\n\t" /* (long) e */ \
- + \
- + " trap\n\t" \
- + " mov %0, r2\n\t" /* syscall rtn */ \
- + \
- + " \n\t" \
- + \
- + : "=r" (__res) /* %0 */ \
- + \
- + : "i" (__NR_##name) /* %1 */ \
- + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
- + , "r" ((long) a) /* %3 */ \
- + , "r" ((long) b) /* %4 */ \
- + , "r" ((long) c) /* %5 */ \
- + , "r" ((long) d) /* %6 */ \
- + , "r" ((long) e) /* %7 */ \
- + \
- + : "r2" /* Clobbered */ \
- + , "r3" /* Clobbered */ \
- + , "r4" /* Clobbered */ \
- + , "r5" /* Clobbered */ \
- + , "r6" /* Clobbered */ \
- + , "r7" /* Clobbered */ \
- + , "r8" /* Clobbered */ \
- + ); \
- + \
- +__syscall_return(type,__res); \
- +}
- +
- +//;dgt2;tmp;can we RELY on syscall6 args a,b,c,d
- +//;dgt2;tmp; already being in r4,r5,r6,r7 ?
- +#define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \
- +type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \
- +{ \
- + long __res; \
- + \
- + __asm__ __volatile__ ( \
- + \
- + " \n\t" \
- + \
- + " movi r2, %2\n\t" /* TRAP_ID_SYSCALL */ \
- + " movi r3, %1\n\t" /* __NR_##name */ \
- + " mov r4, %3\n\t" /* (long) a */ \
- + " mov r5, %4\n\t" /* (long) b */ \
- + " mov r6, %5\n\t" /* (long) c */ \
- + " mov r7, %6\n\t" /* (long) c */ \
- + " mov r8, %7\n\t" /* (long) e */ \
- + " mov r9, %8\n\t" /* (long) f */ \
- + \
- + " trap\n\t" \
- + " mov %0, r2\n\t" /* syscall rtn */ \
- + \
- + " \n\t" \
- + \
- + : "=r" (__res) /* %0 */ \
- + \
- + : "i" (__NR_##name) /* %1 */ \
- + , "i" (TRAP_ID_SYSCALL) /* %2 */ \
- + , "r" ((long) a) /* %3 */ \
- + , "r" ((long) b) /* %4 */ \
- + , "r" ((long) c) /* %5 */ \
- + , "r" ((long) d) /* %6 */ \
- + , "r" ((long) e) /* %7 */ \
- + , "r" ((long) f) /* %8 */ \
- + \
- + : "r2" /* Clobbered */ \
- + , "r3" /* Clobbered */ \
- + , "r4" /* Clobbered */ \
- + , "r5" /* Clobbered */ \
- + , "r6" /* Clobbered */ \
- + , "r7" /* Clobbered */ \
- + , "r8" /* Clobbered */ \
- + , "r9" /* Clobbered */ \
- + ); \
- + \
- +__syscall_return(type,__res); \
- +}
- +
- +#ifdef __KERNEL__
- +#define __ARCH_WANT_IPC_PARSE_VERSION
- +#define __ARCH_WANT_OLD_READDIR
- +#define __ARCH_WANT_OLD_STAT
- +#define __ARCH_WANT_STAT64
- +#define __ARCH_WANT_SYS_ALARM
- +#define __ARCH_WANT_SYS_GETHOSTNAME
- +#define __ARCH_WANT_SYS_PAUSE
- +#define __ARCH_WANT_SYS_SGETMASK
- +#define __ARCH_WANT_SYS_SIGNAL
- +#define __ARCH_WANT_SYS_TIME
- +#define __ARCH_WANT_SYS_UTIME
- +#define __ARCH_WANT_SYS_WAITPID
- +#define __ARCH_WANT_SYS_SOCKETCALL
- +#define __ARCH_WANT_SYS_FADVISE64
- +#define __ARCH_WANT_SYS_GETPGRP
- +#define __ARCH_WANT_SYS_LLSEEK
- +#define __ARCH_WANT_SYS_NICE
- +#define __ARCH_WANT_SYS_OLD_GETRLIMIT
- +#define __ARCH_WANT_SYS_OLDUMOUNT
- +#define __ARCH_WANT_SYS_SIGPENDING
- +#define __ARCH_WANT_SYS_SIGPROCMASK
- +#define __ARCH_WANT_SYS_RT_SIGACTION
- +#endif
- +
- +#ifdef __KERNEL_SYSCALLS__
- +
- +/*
- + * we need this inline - forking from kernel space will result
- + * in NO COPY ON WRITE (!!!), until an execve is executed. This
- + * is no problem, but for the stack. This is handled by not letting
- + * main() use the stack at all after fork(). Thus, no function
- + * calls - which means inline code for fork too, as otherwise we
- + * would use the stack upon exit from 'fork()'.
- + *
- + * Actually only pause and fork are needed inline, so that there
- + * won't be any messing with the stack from main(), but we define
- + * some others too.
- + */
- +#define __NR__exit __NR_exit
- +static inline _syscall0(int,pause)
- +static inline _syscall0(int,sync)
- +static inline _syscall0(pid_t,setsid)
- +static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
- +static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
- +static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
- +static inline _syscall1(int,dup,int,fd)
- +static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
- +static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
- +static inline _syscall1(int,close,int,fd)
- +static inline _syscall1(int,_exit,int,exitcode)
- +static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
- +static inline _syscall1(int,delete_module,const char *,name)
- +
- +static inline pid_t wait(int * wait_stat)
- +{
- + return waitpid(-1,wait_stat,0);
- +}
- +
- +#endif
- +
- +/*
- + * "Conditional" syscalls
- + *
- + * What we want is __attribute__((weak,alias("sys_ni_syscall"))),
- + * but it doesn't work on all toolchains, so we just do it by hand
- + */
- +#define cond_syscall(x) asm(".weak\t" #x "\n\t.set\t" #x ",sys_ni_syscall");
- +
- +#endif /* _ASM_NIOS_UNISTD_H_ */
- --- linux/include/asm-nios2nommu/user.h
- +++ linux/include/asm-nios2nommu/user.h
- @@ -0,0 +1,112 @@
- +#ifndef _NIOS2NOMMU_USER_H
- +#define _NIOS2NOMMU_USER_H
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/user.h
- + *
- + * Derived from M68knommu
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +#include <asm/page.h>
- +
- +/* Core file format: The core file is written in such a way that gdb
- + can understand it and provide useful information to the user (under
- + linux we use the 'trad-core' bfd). There are quite a number of
- + obstacles to being able to view the contents of the floating point
- + registers, and until these are solved you will not be able to view the
- + contents of them. Actually, you can read in the core file and look at
- + the contents of the user struct to find out what the floating point
- + registers contain.
- + The actual file contents are as follows:
- + UPAGE: 1 page consisting of a user struct that tells gdb what is present
- + in the file. Directly after this is a copy of the task_struct, which
- + is currently not used by gdb, but it may come in useful at some point.
- + All of the registers are stored as part of the upage. The upage should
- + always be only one page.
- + DATA: The data area is stored. We use current->end_text to
- + current->brk to pick up all of the user variables, plus any memory
- + that may have been malloced. No attempt is made to determine if a page
- + is demand-zero or if a page is totally unused, we just cover the entire
- + range. All of the addresses are rounded in such a way that an integral
- + number of pages is written.
- + STACK: We need the stack information in order to get a meaningful
- + backtrace. We need to write the data from (esp) to
- + current->start_stack, so we round each of these off in order to be able
- + to write an integer number of pages.
- + The minimum core file size is 3 pages, or 12288 bytes.
- +*/
- +
- +struct user_m68kfp_struct {
- + unsigned long fpregs[8*3]; /* fp0-fp7 registers */
- + unsigned long fpcntl[3]; /* fp control regs */
- +};
- +
- +/* This is needs more work, probably should look like gdb useage */
- +struct user_regs_struct {
- + long r1,r2,r3,r4,r5,r6,r7,r8;
- + long r9,r10,r11,r12,r13,r14,r15;
- + long r16,r17,r18,r19,r20,r21,r22,r23;
- + long gp;
- + long sp;
- + long ra;
- + long fp;
- + long orig_r2;
- + long estatus;
- + long status_extension;
- + long ea;
- +};
- +
- +
- +/* When the kernel dumps core, it starts by dumping the user struct -
- + this will be used by gdb to figure out where the data and stack segments
- + are within the file, and what virtual addresses to use. */
- +struct user{
- +/* We start with the registers, to mimic the way that "memory" is returned
- + from the ptrace(3,...) function. */
- + struct user_regs_struct regs; /* Where the registers are actually stored */
- +/* ptrace does not yet supply these. Someday.... */
- + int u_fpvalid; /* True if math co-processor being used. */
- + /* for this mess. Not yet used. */
- + struct user_m68kfp_struct m68kfp; /* Math Co-processor registers. */
- +/* The rest of this junk is to help gdb figure out what goes where */
- + unsigned long int u_tsize; /* Text segment size (pages). */
- + unsigned long int u_dsize; /* Data segment size (pages). */
- + unsigned long int u_ssize; /* Stack segment size (pages). */
- + unsigned long start_code; /* Starting virtual address of text. */
- + unsigned long start_stack; /* Starting virtual address of stack area.
- + This is actually the bottom of the stack,
- + the top of the stack is always found in the
- + esp register. */
- + long int signal; /* Signal that caused the core dump. */
- + int reserved; /* No longer used */
- + struct user_regs_struct *u_ar0;
- + /* Used by gdb to help find the values for */
- + /* the registers. */
- + struct user_m68kfp_struct* u_fpstate; /* Math Co-processor pointer. */
- + unsigned long magic; /* To uniquely identify a core file */
- + char u_comm[32]; /* User command that was responsible */
- +};
- +#define NBPG PAGE_SIZE
- +#define UPAGES 1
- +#define HOST_TEXT_START_ADDR (u.start_code)
- +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
- +
- +#endif
- --- linux/include/asm-nios2nommu/virtconvert.h
- +++ linux/include/asm-nios2nommu/virtconvert.h
- @@ -0,0 +1,47 @@
- +#ifndef __NIOS_VIRT_CONVERT__
- +#define __NIOS_VIRT_CONVERT__
- +
- +/*--------------------------------------------------------------------
- + *
- + * include/asm-nios2nommu/virtconvert.h
- + *
- + * Derived from various works, Alpha, ix86, M68K, Sparc, ...et al
- + *
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + *
- + * Jan/20/2004 dgt NiosII
- + *
- + ---------------------------------------------------------------------*/
- +
- +
- +/*
- + * Macros used for converting between virtual and physical mappings.
- + */
- +
- +#ifdef __KERNEL__
- +
- +// #include <linux/config.h>
- +#include <asm/setup.h>
- +#include <asm/page.h>
- +
- +#define mm_ptov(vaddr) ((void *) (vaddr))
- +#define mm_vtop(vaddr) ((unsigned long) (vaddr))
- +#define phys_to_virt(vaddr) ((void *) (vaddr))
- +#define virt_to_phys(vaddr) ((unsigned long) (vaddr))
- +
- +#define virt_to_bus virt_to_phys
- +#define bus_to_virt phys_to_virt
- +
- +#endif /*__KERNEL__ */
- +#endif /*__NIOS_VIRT_CONVERT__*/
|