| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525115261152711528115291153011531115321153311534115351153611537115381153911540115411154211543115441154511546115471154811549115501155111552115531155411555115561155711558115591156011561115621156311564115651156611567115681156911570115711157211573115741157511576115771157811579115801158111582115831158411585115861158711588115891159011591115921159311594115951159611597115981159911600116011160211603116041160511606116071160811609116101161111612116131161411615116161161711618116191162011621116221162311624116251162611627116281162911630116311163211633116341163511636116371163811639116401164111642116431164411645116461164711648116491165011651116521165311654116551165611657116581165911660116611166211663116641166511666116671166811669116701167111672116731167411675116761167711678116791168011681116821168311684116851168611687116881168911690116911169211693116941169511696116971169811699117001170111702117031170411705117061170711708117091171011711117121171311714117151171611717117181171911720117211172211723117241172511726117271172811729117301173111732117331173411735117361173711738117391174011741117421174311744117451174611747117481174911750117511175211753117541175511756117571175811759117601176111762117631176411765117661176711768117691177011771117721177311774117751177611777117781177911780117811178211783117841178511786117871178811789117901179111792117931179411795117961179711798117991180011801118021180311804118051180611807118081180911810118111181211813118141181511816118171181811819118201182111822118231182411825118261182711828118291183011831118321183311834118351183611837118381183911840118411184211843118441184511846118471184811849118501185111852118531185411855118561185711858118591186011861118621186311864118651186611867118681186911870118711187211873118741187511876118771187811879118801188111882118831188411885118861188711888118891189011891118921189311894118951189611897118981189911900119011190211903119041190511906119071190811909119101191111912119131191411915119161191711918119191192011921119221192311924119251192611927119281192911930119311193211933119341193511936119371193811939119401194111942119431194411945119461194711948119491195011951119521195311954119551195611957119581195911960119611196211963119641196511966119671196811969119701197111972119731197411975119761197711978119791198011981119821198311984119851198611987119881198911990119911199211993119941199511996119971199811999120001200112002120031200412005120061200712008120091201012011120121201312014120151201612017120181201912020120211202212023120241202512026120271202812029120301203112032120331203412035120361203712038120391204012041120421204312044120451204612047120481204912050120511205212053120541205512056120571205812059120601206112062120631206412065120661206712068120691207012071120721207312074120751207612077120781207912080120811208212083120841208512086120871208812089120901209112092120931209412095120961209712098120991210012101121021210312104121051210612107121081210912110121111211212113121141211512116121171211812119121201212112122121231212412125121261212712128121291213012131121321213312134121351213612137121381213912140121411214212143121441214512146121471214812149121501215112152121531215412155121561215712158121591216012161121621216312164121651216612167121681216912170121711217212173121741217512176121771217812179121801218112182121831218412185121861218712188121891219012191121921219312194121951219612197121981219912200122011220212203122041220512206122071220812209122101221112212122131221412215122161221712218122191222012221122221222312224122251222612227122281222912230122311223212233122341223512236122371223812239122401224112242122431224412245122461224712248122491225012251122521225312254122551225612257122581225912260122611226212263122641226512266122671226812269122701227112272122731227412275122761227712278122791228012281122821228312284122851228612287122881228912290122911229212293122941229512296122971229812299123001230112302123031230412305123061230712308123091231012311123121231312314123151231612317123181231912320123211232212323123241232512326123271232812329123301233112332123331233412335123361233712338123391234012341123421234312344123451234612347123481234912350123511235212353123541235512356123571235812359123601236112362123631236412365123661236712368123691237012371123721237312374123751237612377123781237912380123811238212383123841238512386123871238812389123901239112392123931239412395123961239712398123991240012401124021240312404124051240612407124081240912410124111241212413124141241512416124171241812419124201242112422124231242412425124261242712428124291243012431124321243312434124351243612437124381243912440124411244212443124441244512446124471244812449124501245112452124531245412455124561245712458124591246012461124621246312464124651246612467124681246912470124711247212473124741247512476124771247812479124801248112482124831248412485124861248712488124891249012491124921249312494124951249612497124981249912500125011250212503125041250512506125071250812509125101251112512125131251412515125161251712518125191252012521125221252312524125251252612527125281252912530125311253212533125341253512536125371253812539125401254112542125431254412545125461254712548125491255012551125521255312554125551255612557125581255912560125611256212563125641256512566125671256812569125701257112572125731257412575125761257712578125791258012581125821258312584125851258612587125881258912590125911259212593125941259512596125971259812599126001260112602126031260412605126061260712608126091261012611126121261312614126151261612617126181261912620126211262212623126241262512626126271262812629126301263112632126331263412635126361263712638126391264012641126421264312644126451264612647126481264912650126511265212653126541265512656126571265812659126601266112662126631266412665126661266712668126691267012671126721267312674126751267612677126781267912680126811268212683126841268512686126871268812689126901269112692126931269412695126961269712698126991270012701127021270312704127051270612707127081270912710127111271212713127141271512716127171271812719127201272112722127231272412725127261272712728127291273012731127321273312734127351273612737127381273912740127411274212743127441274512746127471274812749127501275112752127531275412755127561275712758127591276012761127621276312764127651276612767127681276912770127711277212773127741277512776127771277812779127801278112782127831278412785127861278712788127891279012791127921279312794127951279612797127981279912800128011280212803128041280512806128071280812809128101281112812128131281412815128161281712818128191282012821128221282312824128251282612827128281282912830128311283212833128341283512836128371283812839128401284112842128431284412845128461284712848128491285012851128521285312854128551285612857128581285912860128611286212863128641286512866128671286812869128701287112872128731287412875128761287712878128791288012881128821288312884128851288612887128881288912890128911289212893128941289512896128971289812899129001290112902129031290412905129061290712908129091291012911129121291312914129151291612917129181291912920129211292212923129241292512926129271292812929129301293112932129331293412935129361293712938129391294012941129421294312944129451294612947129481294912950129511295212953129541295512956129571295812959129601296112962129631296412965129661296712968129691297012971129721297312974129751297612977129781297912980129811298212983129841298512986129871298812989129901299112992129931299412995129961299712998129991300013001130021300313004130051300613007130081300913010130111301213013130141301513016130171301813019130201302113022130231302413025130261302713028130291303013031130321303313034130351303613037130381303913040130411304213043130441304513046130471304813049130501305113052130531305413055130561305713058130591306013061130621306313064130651306613067130681306913070130711307213073130741307513076130771307813079130801308113082130831308413085130861308713088130891309013091130921309313094130951309613097130981309913100131011310213103131041310513106131071310813109131101311113112131131311413115131161311713118131191312013121131221312313124131251312613127131281312913130131311313213133131341313513136131371313813139131401314113142131431314413145131461314713148131491315013151131521315313154131551315613157131581315913160131611316213163131641316513166131671316813169131701317113172131731317413175131761317713178131791318013181131821318313184131851318613187131881318913190131911319213193131941319513196131971319813199132001320113202132031320413205132061320713208132091321013211132121321313214132151321613217132181321913220132211322213223132241322513226132271322813229132301323113232132331323413235132361323713238132391324013241132421324313244132451324613247132481324913250132511325213253132541325513256132571325813259132601326113262132631326413265132661326713268132691327013271132721327313274132751327613277132781327913280132811328213283132841328513286132871328813289132901329113292132931329413295132961329713298132991330013301133021330313304133051330613307133081330913310133111331213313133141331513316133171331813319133201332113322133231332413325133261332713328133291333013331133321333313334133351333613337133381333913340133411334213343133441334513346133471334813349133501335113352133531335413355133561335713358133591336013361133621336313364133651336613367133681336913370133711337213373133741337513376133771337813379133801338113382133831338413385133861338713388133891339013391133921339313394133951339613397133981339913400134011340213403134041340513406134071340813409134101341113412134131341413415134161341713418134191342013421134221342313424134251342613427134281342913430134311343213433134341343513436134371343813439134401344113442134431344413445134461344713448134491345013451134521345313454134551345613457134581345913460134611346213463134641346513466134671346813469134701347113472134731347413475134761347713478134791348013481134821348313484134851348613487134881348913490134911349213493134941349513496134971349813499135001350113502135031350413505135061350713508135091351013511135121351313514135151351613517135181351913520135211352213523135241352513526135271352813529135301353113532135331353413535135361353713538135391354013541135421354313544135451354613547135481354913550135511355213553135541355513556135571355813559135601356113562135631356413565135661356713568135691357013571135721357313574135751357613577135781357913580135811358213583135841358513586135871358813589135901359113592135931359413595135961359713598135991360013601136021360313604136051360613607136081360913610136111361213613136141361513616136171361813619136201362113622136231362413625136261362713628136291363013631136321363313634136351363613637136381363913640136411364213643136441364513646136471364813649136501365113652136531365413655136561365713658136591366013661136621366313664136651366613667136681366913670136711367213673136741367513676136771367813679136801368113682136831368413685136861368713688136891369013691136921369313694136951369613697136981369913700137011370213703137041370513706137071370813709137101371113712137131371413715137161371713718137191372013721137221372313724137251372613727137281372913730137311373213733137341373513736137371373813739137401374113742137431374413745137461374713748137491375013751137521375313754137551375613757137581375913760137611376213763137641376513766137671376813769137701377113772137731377413775137761377713778137791378013781137821378313784137851378613787137881378913790137911379213793137941379513796137971379813799138001380113802138031380413805138061380713808138091381013811138121381313814138151381613817138181381913820138211382213823138241382513826138271382813829138301383113832138331383413835138361383713838138391384013841138421384313844138451384613847138481384913850138511385213853138541385513856138571385813859138601386113862138631386413865138661386713868138691387013871138721387313874138751387613877138781387913880138811388213883138841388513886138871388813889138901389113892138931389413895138961389713898138991390013901139021390313904139051390613907139081390913910139111391213913139141391513916139171391813919139201392113922139231392413925139261392713928139291393013931139321393313934139351393613937139381393913940139411394213943139441394513946139471394813949139501395113952139531395413955139561395713958139591396013961139621396313964139651396613967139681396913970139711397213973139741397513976139771397813979139801398113982139831398413985139861398713988139891399013991139921399313994139951399613997139981399914000140011400214003140041400514006140071400814009140101401114012140131401414015140161401714018140191402014021140221402314024140251402614027140281402914030140311403214033140341403514036140371403814039140401404114042140431404414045140461404714048140491405014051140521405314054140551405614057140581405914060140611406214063140641406514066140671406814069140701407114072140731407414075140761407714078140791408014081140821408314084140851408614087140881408914090140911409214093140941409514096140971409814099141001410114102141031410414105141061410714108141091411014111141121411314114141151411614117141181411914120141211412214123141241412514126141271412814129141301413114132141331413414135141361413714138141391414014141141421414314144141451414614147141481414914150141511415214153141541415514156141571415814159141601416114162141631416414165141661416714168141691417014171141721417314174141751417614177141781417914180141811418214183141841418514186141871418814189141901419114192141931419414195141961419714198141991420014201142021420314204142051420614207142081420914210142111421214213142141421514216142171421814219142201422114222142231422414225142261422714228142291423014231142321423314234142351423614237142381423914240142411424214243142441424514246142471424814249142501425114252142531425414255142561425714258142591426014261142621426314264142651426614267142681426914270142711427214273142741427514276142771427814279142801428114282142831428414285142861428714288142891429014291142921429314294142951429614297142981429914300143011430214303143041430514306143071430814309143101431114312143131431414315143161431714318143191432014321143221432314324143251432614327143281432914330143311433214333143341433514336143371433814339143401434114342143431434414345143461434714348143491435014351143521435314354143551435614357143581435914360143611436214363143641436514366143671436814369143701437114372143731437414375143761437714378143791438014381143821438314384143851438614387143881438914390143911439214393143941439514396143971439814399144001440114402144031440414405144061440714408144091441014411144121441314414144151441614417144181441914420144211442214423144241442514426144271442814429144301443114432144331443414435144361443714438144391444014441144421444314444144451444614447144481444914450144511445214453144541445514456144571445814459144601446114462144631446414465144661446714468144691447014471144721447314474144751447614477144781447914480144811448214483144841448514486144871448814489144901449114492144931449414495144961449714498144991450014501145021450314504145051450614507145081450914510145111451214513145141451514516145171451814519145201452114522145231452414525145261452714528145291453014531145321453314534145351453614537145381453914540145411454214543145441454514546145471454814549145501455114552145531455414555145561455714558145591456014561145621456314564145651456614567145681456914570145711457214573145741457514576145771457814579145801458114582145831458414585145861458714588145891459014591145921459314594145951459614597145981459914600146011460214603146041460514606146071460814609146101461114612146131461414615146161461714618146191462014621146221462314624146251462614627146281462914630146311463214633146341463514636146371463814639146401464114642146431464414645146461464714648146491465014651146521465314654146551465614657146581465914660146611466214663146641466514666146671466814669146701467114672146731467414675146761467714678146791468014681146821468314684146851468614687146881468914690146911469214693146941469514696146971469814699147001470114702147031470414705147061470714708147091471014711147121471314714147151471614717147181471914720147211472214723 |
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/configs/IP5160EVAL_defconfig linux-2.6.28.10/arch/ubicom32/configs/IP5160EVAL_defconfig
- --- linux-2.6.28.10_o/arch/ubicom32/configs/IP5160EVAL_defconfig 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/configs/IP5160EVAL_defconfig 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,524 @@
- +#
- +# Automatically generated make config: don't edit
- +# Linux kernel version: 2.6.28.10
- +#
- +CONFIG_RAMBASE=0x40000000
- +CONFIG_UBICOM32=y
- +CONFIG_RAMKERNEL=y
- +CONFIG_CPU_BIG_ENDIAN=y
- +CONFIG_FORCE_MAX_ZONEORDER=14
- +CONFIG_HAVE_CLK=y
- +# CONFIG_MMU is not set
- +# CONFIG_FPU is not set
- +CONFIG_ZONE_DMA=y
- +CONFIG_RWSEM_GENERIC_SPINLOCK=y
- +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
- +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
- +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
- +CONFIG_GENERIC_FIND_NEXT_BIT=y
- +CONFIG_GENERIC_GPIO=y
- +CONFIG_GPIOLIB=y
- +CONFIG_GENERIC_HWEIGHT=y
- +CONFIG_GENERIC_HARDIRQS=y
- +CONFIG_STACKTRACE_SUPPORT=y
- +CONFIG_LOCKDEP_SUPPORT=y
- +CONFIG_GENERIC_CALIBRATE_DELAY=y
- +CONFIG_GENERIC_TIME=y
- +CONFIG_TIME_LOW_RES=y
- +CONFIG_GENERIC_CLOCKEVENTS=y
- +CONFIG_NO_IOPORT=y
- +CONFIG_ARCH_SUPPORTS_AOUT=y
- +CONFIG_IRQ_PER_CPU=y
- +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- +
- +#
- +# Processor type and features
- +#
- +CONFIG_BRD_32MB=y
- +
- +#
- +# Processor type will be selected by Board
- +#
- +CONFIG_UBICOM32_V3=y
- +
- +#
- +# Board
- +#
- +# CONFIG_NOBOARD is not set
- +# CONFIG_IP5170DPF is not set
- +# CONFIG_IP5160DEV is not set
- +CONFIG_IP5160EVAL=y
- +# CONFIG_IP7145DPF is not set
- +# CONFIG_IP7160RGW is not set
- +# CONFIG_IP7160BRINGUP is not set
- +# CONFIG_IP7160DPF is not set
- +# CONFIG_IP7500MODULE is not set
- +# CONFIG_IP7500AV is not set
- +# CONFIG_IP7500MEDIA is not set
- +
- +#
- +# Kernel Options
- +#
- +# CONFIG_SMP is not set
- +CONFIG_TIMER_EXTRA_ALLOC=0
- +# CONFIG_IRQSTACKS is not set
- +CONFIG_UBICOM32_OCM_MODULES=y
- +CONFIG_OCM_MODULES_RESERVATION=41
- +CONFIG_OCM_MODULES_MAY_CONSUME_REMAINING_CODESPACE=y
- +CONFIG_HZ=1000
- +
- +#
- +# RAM configuration
- +#
- +CONFIG_RAMSIZE=0x02000000
- +CONFIG_KERNELBASE=0x40400000
- +
- +#
- +# Build options
- +#
- +CONFIG_LINKER_RELAXATION=y
- +
- +#
- +# Driver options
- +#
- +
- +#
- +# PCI Bus
- +#
- +# CONFIG_PCI is not set
- +# CONFIG_ARCH_SUPPORTS_MSI is not set
- +
- +#
- +# Input devices
- +#
- +# CONFIG_UBICOM_INPUT is not set
- +# CONFIG_UBICOM_INPUT_I2C is not set
- +CONFIG_UBICOM_SWITCH=y
- +
- +#
- +# Misc devices
- +#
- +# CONFIG_UBICOM_HID is not set
- +CONFIG_CMDLINE_BOOL=y
- +CONFIG_CMDLINE="console=ttyUM0"
- +# CONFIG_CMDLINE_OVERRIDE is not set
- +
- +#
- +# Kernel hacking
- +#
- +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
- +CONFIG_PROTECT_KERNEL=y
- +# CONFIG_NO_KERNEL_MSG is not set
- +# CONFIG_EARLY_PRINTK is not set
- +# CONFIG_STOP_ON_TRAP is not set
- +# CONFIG_STOP_ON_BUG is not set
- +# CONFIG_DEBUG_IRQMEASURE is not set
- +# CONFIG_DEBUG_PCIMEASURE is not set
- +# CONFIG_ACCESS_OK_CHECKS_ENABLED is not set
- +CONFIG_UNALIGNED_ACCESS_ENABLED=y
- +# CONFIG_UNALIGNED_ACCESS_USERSPACE_ONLY is not set
- +# CONFIG_UNALIGNED_ACCESS_DISABLED is not set
- +# CONFIG_DEBUG_STACKOVERFLOW is not set
- +# CONFIG_DEBUG_STACK_USAGE is not set
- +# CONFIG_PRINTK_TIME is not set
- +CONFIG_ENABLE_WARN_DEPRECATED=y
- +CONFIG_ENABLE_MUST_CHECK=y
- +CONFIG_FRAME_WARN=1024
- +# CONFIG_MAGIC_SYSRQ is not set
- +# CONFIG_UNUSED_SYMBOLS is not set
- +# CONFIG_HEADERS_CHECK is not set
- +CONFIG_DEBUG_KERNEL=y
- +# CONFIG_DEBUG_SHIRQ is not set
- +CONFIG_DETECT_SOFTLOCKUP=y
- +# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
- +CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
- +CONFIG_SCHED_DEBUG=y
- +# CONFIG_SCHEDSTATS is not set
- +# CONFIG_TIMER_STATS is not set
- +# CONFIG_DEBUG_OBJECTS is not set
- +# CONFIG_DEBUG_SLAB is not set
- +# CONFIG_DEBUG_SPINLOCK is not set
- +# CONFIG_DEBUG_MUTEXES is not set
- +# CONFIG_DEBUG_LOCK_ALLOC is not set
- +# CONFIG_PROVE_LOCKING is not set
- +# CONFIG_LOCK_STAT is not set
- +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
- +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
- +# CONFIG_DEBUG_KOBJECT is not set
- +CONFIG_DEBUG_INFO=y
- +# CONFIG_DEBUG_VM is not set
- +# CONFIG_DEBUG_WRITECOUNT is not set
- +# CONFIG_DEBUG_MEMORY_INIT is not set
- +# CONFIG_DEBUG_LIST is not set
- +# CONFIG_DEBUG_SG is not set
- +# CONFIG_FRAME_POINTER is not set
- +# CONFIG_BOOT_PRINTK_DELAY is not set
- +# CONFIG_RCU_TORTURE_TEST is not set
- +# CONFIG_RCU_CPU_STALL_DETECTOR is not set
- +# CONFIG_BACKTRACE_SELF_TEST is not set
- +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
- +# CONFIG_FAULT_INJECTION is not set
- +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
- +
- +#
- +# Tracers
- +#
- +# CONFIG_IRQSOFF_TRACER is not set
- +# CONFIG_SCHED_TRACER is not set
- +# CONFIG_CONTEXT_SWITCH_TRACER is not set
- +# CONFIG_BOOT_TRACER is not set
- +# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
- +# CONFIG_SAMPLES is not set
- +
- +#
- +# Executable file formats
- +#
- +CONFIG_BINFMT_ELF_FDPIC=y
- +CONFIG_BINFMT_FLAT=y
- +# CONFIG_BINFMT_ZFLAT is not set
- +# CONFIG_BINFMT_SHARED_FLAT is not set
- +# CONFIG_HAVE_AOUT is not set
- +# CONFIG_BINFMT_MISC is not set
- +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
- +
- +#
- +# General setup
- +#
- +CONFIG_EXPERIMENTAL=y
- +CONFIG_BROKEN_ON_SMP=y
- +CONFIG_INIT_ENV_ARG_LIMIT=32
- +CONFIG_LOCALVERSION=""
- +CONFIG_LOCALVERSION_AUTO=y
- +# CONFIG_SYSVIPC is not set
- +# CONFIG_BSD_PROCESS_ACCT is not set
- +# CONFIG_IKCONFIG is not set
- +CONFIG_LOG_BUF_SHIFT=14
- +# CONFIG_CGROUPS is not set
- +# CONFIG_GROUP_SCHED is not set
- +# CONFIG_RELAY is not set
- +# CONFIG_NAMESPACES is not set
- +CONFIG_BLK_DEV_INITRD=y
- +CONFIG_INITRAMFS_SOURCE=""
- +CONFIG_INITRAMFS_ROOT_UID=0
- +CONFIG_INITRAMFS_ROOT_GID=0
- +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
- +CONFIG_SYSCTL=y
- +CONFIG_EMBEDDED=y
- +CONFIG_SYSCTL_SYSCALL=y
- +# CONFIG_KALLSYMS is not set
- +# CONFIG_HOTPLUG is not set
- +CONFIG_PRINTK=y
- +CONFIG_BUG=y
- +# CONFIG_ELF_CORE is not set
- +CONFIG_BASE_FULL=y
- +# CONFIG_FUTEX is not set
- +# CONFIG_EPOLL is not set
- +# CONFIG_SIGNALFD is not set
- +# CONFIG_TIMERFD is not set
- +# CONFIG_EVENTFD is not set
- +CONFIG_AIO=y
- +# CONFIG_VM_EVENT_COUNTERS is not set
- +# CONFIG_COMPAT_BRK is not set
- +CONFIG_SLAB=y
- +# CONFIG_SLUB is not set
- +# CONFIG_SLOB is not set
- +# CONFIG_PROFILING is not set
- +# CONFIG_MARKERS is not set
- +CONFIG_HAVE_OPROFILE=y
- +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
- +CONFIG_SLABINFO=y
- +CONFIG_TINY_SHMEM=y
- +CONFIG_BASE_SMALL=0
- +# CONFIG_MODULES is not set
- +CONFIG_BLOCK=y
- +# CONFIG_LBD is not set
- +# CONFIG_LSF is not set
- +# CONFIG_BLK_DEV_BSG is not set
- +# CONFIG_BLK_DEV_INTEGRITY is not set
- +
- +#
- +# IO Schedulers
- +#
- +CONFIG_IOSCHED_NOOP=y
- +# CONFIG_IOSCHED_AS is not set
- +# CONFIG_IOSCHED_DEADLINE is not set
- +# CONFIG_IOSCHED_CFQ is not set
- +# CONFIG_DEFAULT_AS is not set
- +# CONFIG_DEFAULT_DEADLINE is not set
- +# CONFIG_DEFAULT_CFQ is not set
- +CONFIG_DEFAULT_NOOP=y
- +CONFIG_DEFAULT_IOSCHED="noop"
- +CONFIG_CLASSIC_RCU=y
- +CONFIG_PREEMPT_NONE=y
- +# CONFIG_PREEMPT_VOLUNTARY is not set
- +# CONFIG_PREEMPT is not set
- +# CONFIG_NO_HZ is not set
- +# CONFIG_HIGH_RES_TIMERS is not set
- +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
- +CONFIG_SELECT_MEMORY_MODEL=y
- +CONFIG_FLATMEM_MANUAL=y
- +# CONFIG_DISCONTIGMEM_MANUAL is not set
- +# CONFIG_SPARSEMEM_MANUAL is not set
- +CONFIG_FLATMEM=y
- +CONFIG_FLAT_NODE_MEM_MAP=y
- +CONFIG_PAGEFLAGS_EXTENDED=y
- +CONFIG_SPLIT_PTLOCK_CPUS=4
- +# CONFIG_RESOURCES_64BIT is not set
- +# CONFIG_PHYS_ADDR_T_64BIT is not set
- +CONFIG_ZONE_DMA_FLAG=1
- +CONFIG_VIRT_TO_BUS=y
- +# CONFIG_NET is not set
- +
- +#
- +# Device Drivers
- +#
- +
- +#
- +# Generic Driver Options
- +#
- +CONFIG_STANDALONE=y
- +CONFIG_PREVENT_FIRMWARE_BUILD=y
- +CONFIG_DEBUG_DRIVER=y
- +CONFIG_DEBUG_DEVRES=y
- +# CONFIG_SYS_HYPERVISOR is not set
- +# CONFIG_MTD is not set
- +# CONFIG_PARPORT is not set
- +CONFIG_BLK_DEV=y
- +# CONFIG_BLK_DEV_COW_COMMON is not set
- +# CONFIG_BLK_DEV_LOOP is not set
- +CONFIG_BLK_DEV_RAM=y
- +CONFIG_BLK_DEV_RAM_COUNT=16
- +CONFIG_BLK_DEV_RAM_SIZE=4096
- +# CONFIG_BLK_DEV_XIP is not set
- +# CONFIG_CDROM_PKTCDVD is not set
- +# CONFIG_MISC_DEVICES is not set
- +
- +#
- +# SCSI device support
- +#
- +# CONFIG_RAID_ATTRS is not set
- +# CONFIG_SCSI is not set
- +# CONFIG_SCSI_DMA is not set
- +# CONFIG_SCSI_NETLINK is not set
- +# CONFIG_ATA is not set
- +# CONFIG_MD is not set
- +# CONFIG_PHONE is not set
- +
- +#
- +# Input device support
- +#
- +# CONFIG_INPUT is not set
- +
- +#
- +# Hardware I/O ports
- +#
- +# CONFIG_SERIO is not set
- +# CONFIG_GAMEPORT is not set
- +
- +#
- +# Character devices
- +#
- +# CONFIG_VT is not set
- +CONFIG_DEVKMEM=y
- +# CONFIG_SERIAL_NONSTANDARD is not set
- +
- +#
- +# Serial drivers
- +#
- +# CONFIG_SERIAL_8250 is not set
- +
- +#
- +# Non-8250 serial port support
- +#
- +CONFIG_SERIAL_UBI32_SERDES=y
- +CONFIG_SERIAL_UBI32_SERDES_CONSOLE=y
- +# CONFIG_SERIAL_UBI32_MAILBOX is not set
- +CONFIG_SERIAL_CORE=y
- +CONFIG_SERIAL_CORE_CONSOLE=y
- +# CONFIG_UNIX98_PTYS is not set
- +CONFIG_LEGACY_PTYS=y
- +CONFIG_LEGACY_PTY_COUNT=256
- +# CONFIG_IPMI_HANDLER is not set
- +# CONFIG_HW_RANDOM is not set
- +# CONFIG_RTC is not set
- +# CONFIG_GEN_RTC is not set
- +# CONFIG_R3964 is not set
- +# CONFIG_RAW_DRIVER is not set
- +# CONFIG_TCG_TPM is not set
- +# CONFIG_I2C is not set
- +# CONFIG_SPI is not set
- +# CONFIG_DEBUG_GPIO is not set
- +
- +#
- +# Memory mapped GPIO expanders:
- +#
- +
- +#
- +# I2C GPIO expanders:
- +#
- +
- +#
- +# PCI GPIO expanders:
- +#
- +
- +#
- +# SPI GPIO expanders:
- +#
- +# CONFIG_W1 is not set
- +# CONFIG_POWER_SUPPLY is not set
- +# CONFIG_HWMON is not set
- +# CONFIG_THERMAL is not set
- +# CONFIG_THERMAL_HWMON is not set
- +# CONFIG_WATCHDOG is not set
- +CONFIG_SSB_POSSIBLE=y
- +
- +#
- +# Sonics Silicon Backplane
- +#
- +# CONFIG_SSB is not set
- +
- +#
- +# Multifunction device drivers
- +#
- +# CONFIG_MFD_CORE is not set
- +# CONFIG_MFD_SM501 is not set
- +# CONFIG_HTC_PASIC3 is not set
- +# CONFIG_MFD_TMIO is not set
- +# CONFIG_REGULATOR is not set
- +
- +#
- +# Multimedia devices
- +#
- +
- +#
- +# Multimedia core support
- +#
- +# CONFIG_VIDEO_DEV is not set
- +# CONFIG_VIDEO_MEDIA is not set
- +
- +#
- +# Multimedia drivers
- +#
- +# CONFIG_DAB is not set
- +
- +#
- +# Graphics support
- +#
- +# CONFIG_VGASTATE is not set
- +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
- +# CONFIG_FB is not set
- +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
- +
- +#
- +# Display device support
- +#
- +# CONFIG_DISPLAY_SUPPORT is not set
- +# CONFIG_SOUND is not set
- +# CONFIG_USB_SUPPORT is not set
- +# CONFIG_MMC is not set
- +# CONFIG_MEMSTICK is not set
- +# CONFIG_NEW_LEDS is not set
- +# CONFIG_ACCESSIBILITY is not set
- +# CONFIG_RTC_CLASS is not set
- +# CONFIG_DMADEVICES is not set
- +# CONFIG_UIO is not set
- +# CONFIG_STAGING is not set
- +
- +#
- +# File systems
- +#
- +# CONFIG_EXT2_FS is not set
- +# CONFIG_EXT3_FS is not set
- +# CONFIG_EXT4_FS is not set
- +# CONFIG_REISERFS_FS is not set
- +# CONFIG_JFS_FS is not set
- +# CONFIG_FS_POSIX_ACL is not set
- +CONFIG_FILE_LOCKING=y
- +# CONFIG_XFS_FS is not set
- +# CONFIG_DNOTIFY is not set
- +# CONFIG_INOTIFY is not set
- +# CONFIG_QUOTA is not set
- +# CONFIG_AUTOFS_FS is not set
- +# CONFIG_AUTOFS4_FS is not set
- +# CONFIG_FUSE_FS is not set
- +
- +#
- +# CD-ROM/DVD Filesystems
- +#
- +# CONFIG_ISO9660_FS is not set
- +# CONFIG_UDF_FS is not set
- +
- +#
- +# DOS/FAT/NT Filesystems
- +#
- +# CONFIG_MSDOS_FS is not set
- +# CONFIG_VFAT_FS is not set
- +# CONFIG_NTFS_FS is not set
- +
- +#
- +# Pseudo filesystems
- +#
- +CONFIG_PROC_FS=y
- +CONFIG_PROC_SYSCTL=y
- +# CONFIG_SYSFS is not set
- +# CONFIG_TMPFS is not set
- +# CONFIG_HUGETLB_PAGE is not set
- +
- +#
- +# Layered filesystems
- +#
- +# CONFIG_UNION_FS is not set
- +
- +#
- +# Miscellaneous filesystems
- +#
- +# CONFIG_ADFS_FS is not set
- +# CONFIG_AFFS_FS is not set
- +# CONFIG_HFS_FS is not set
- +# CONFIG_HFSPLUS_FS is not set
- +# CONFIG_BEFS_FS is not set
- +# CONFIG_BFS_FS is not set
- +# CONFIG_EFS_FS is not set
- +# CONFIG_CRAMFS is not set
- +# CONFIG_VXFS_FS is not set
- +# CONFIG_MINIX_FS is not set
- +# CONFIG_OMFS_FS is not set
- +# CONFIG_HPFS_FS is not set
- +# CONFIG_QNX4FS_FS is not set
- +CONFIG_ROMFS_FS=y
- +# CONFIG_SYSV_FS is not set
- +# CONFIG_UFS_FS is not set
- +
- +#
- +# Partition Types
- +#
- +# CONFIG_PARTITION_ADVANCED is not set
- +CONFIG_MSDOS_PARTITION=y
- +# CONFIG_NLS is not set
- +
- +#
- +# Security options
- +#
- +# CONFIG_KEYS is not set
- +# CONFIG_SECURITYFS is not set
- +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
- +# CONFIG_CRYPTO is not set
- +
- +#
- +# OCF Configuration
- +#
- +# CONFIG_OCF_OCF is not set
- +
- +#
- +# Library routines
- +#
- +CONFIG_BITREVERSE=y
- +# CONFIG_CRC_CCITT is not set
- +# CONFIG_CRC16 is not set
- +# CONFIG_CRC_T10DIF is not set
- +# CONFIG_CRC_ITU_T is not set
- +CONFIG_CRC32=y
- +# CONFIG_CRC7 is not set
- +# CONFIG_LIBCRC32C is not set
- +CONFIG_HAS_IOMEM=y
- +CONFIG_HAS_DMA=y
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/configs/IP7160RGW_defconfig linux-2.6.28.10/arch/ubicom32/configs/IP7160RGW_defconfig
- --- linux-2.6.28.10_o/arch/ubicom32/configs/IP7160RGW_defconfig 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/configs/IP7160RGW_defconfig 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,1301 @@
- +#
- +# Automatically generated make config: don't edit
- +# Linux kernel version: 2.6.28.10
- +#
- +CONFIG_RAMBASE=0x40000000
- +CONFIG_UBICOM32=y
- +CONFIG_RAMKERNEL=y
- +CONFIG_CPU_BIG_ENDIAN=y
- +CONFIG_FORCE_MAX_ZONEORDER=14
- +CONFIG_HAVE_CLK=y
- +# CONFIG_MMU is not set
- +# CONFIG_FPU is not set
- +CONFIG_ZONE_DMA=y
- +CONFIG_RWSEM_GENERIC_SPINLOCK=y
- +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
- +# CONFIG_ARCH_HAS_ILOG2_U32 is not set
- +# CONFIG_ARCH_HAS_ILOG2_U64 is not set
- +CONFIG_GENERIC_FIND_NEXT_BIT=y
- +CONFIG_GENERIC_GPIO=y
- +CONFIG_GPIOLIB=y
- +CONFIG_GENERIC_HWEIGHT=y
- +CONFIG_GENERIC_HARDIRQS=y
- +CONFIG_STACKTRACE_SUPPORT=y
- +CONFIG_LOCKDEP_SUPPORT=y
- +CONFIG_GENERIC_CALIBRATE_DELAY=y
- +CONFIG_GENERIC_TIME=y
- +CONFIG_TIME_LOW_RES=y
- +CONFIG_GENERIC_CLOCKEVENTS=y
- +CONFIG_NO_IOPORT=y
- +CONFIG_ARCH_SUPPORTS_AOUT=y
- +CONFIG_IRQ_PER_CPU=y
- +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
- +
- +#
- +# Processor type and features
- +#
- +CONFIG_BRD_64MB=y
- +
- +#
- +# Processor type will be selected by Board
- +#
- +CONFIG_UBICOM32_V4=y
- +
- +#
- +# Board
- +#
- +# CONFIG_NOBOARD is not set
- +# CONFIG_IP5170DPF is not set
- +# CONFIG_IP5160DEV is not set
- +# CONFIG_IP5160EVAL is not set
- +# CONFIG_IP7145DPF is not set
- +CONFIG_IP7160RGW=y
- +# CONFIG_IP7160BRINGUP is not set
- +# CONFIG_IP7160DPF is not set
- +# CONFIG_IP7500MODULE is not set
- +# CONFIG_IP7500AV is not set
- +# CONFIG_IP7500MEDIA is not set
- +
- +#
- +# Kernel Options
- +#
- +# CONFIG_SMP is not set
- +CONFIG_TIMER_EXTRA_ALLOC=0
- +# CONFIG_IRQSTACKS is not set
- +CONFIG_UBICOM32_OCM_MODULES=y
- +CONFIG_OCM_MODULES_RESERVATION=41
- +CONFIG_OCM_MODULES_MAY_CONSUME_REMAINING_CODESPACE=y
- +CONFIG_HZ=100
- +
- +#
- +# RAM configuration
- +#
- +CONFIG_RAMSIZE=0x04000000
- +CONFIG_KERNELBASE=0x40400000
- +
- +#
- +# Build options
- +#
- +# CONFIG_LINKER_RELAXATION is not set
- +
- +#
- +# Driver options
- +#
- +
- +#
- +# PCI Bus
- +#
- +CONFIG_PCI=y
- +# CONFIG_ARCH_SUPPORTS_MSI is not set
- +# CONFIG_PCI_LEGACY is not set
- +# CONFIG_PCI_DEBUG is not set
- +CONFIG_PCI_DEV0_IDSEL=0x001000000
- +CONFIG_PCI_DEV1_IDSEL=0x002000000
- +
- +#
- +# Input devices
- +#
- +CONFIG_UBICOM_INPUT=y
- +# CONFIG_UBICOM_INPUT_I2C is not set
- +CONFIG_UBICOM_SWITCH=y
- +CONFIG_UBICOM_SWITCH_BCM539X=y
- +
- +#
- +# Misc devices
- +#
- +# CONFIG_UBICOM_HID is not set
- +CONFIG_CMDLINE_BOOL=y
- +CONFIG_CMDLINE="console=ttyUM0 console=ttyUS0 serdes=0x02004000,61,250000000"
- +# CONFIG_CMDLINE_OVERRIDE is not set
- +
- +#
- +# Kernel hacking
- +#
- +CONFIG_TRACE_IRQFLAGS_SUPPORT=y
- +CONFIG_PROTECT_KERNEL=y
- +# CONFIG_NO_KERNEL_MSG is not set
- +CONFIG_EARLY_PRINTK=y
- +# CONFIG_STOP_ON_TRAP is not set
- +# CONFIG_STOP_ON_BUG is not set
- +# CONFIG_DEBUG_IRQMEASURE is not set
- +# CONFIG_DEBUG_PCIMEASURE is not set
- +# CONFIG_ACCESS_OK_CHECKS_ENABLED is not set
- +CONFIG_UNALIGNED_ACCESS_ENABLED=y
- +# CONFIG_UNALIGNED_ACCESS_USERSPACE_ONLY is not set
- +# CONFIG_UNALIGNED_ACCESS_DISABLED is not set
- +# CONFIG_DEBUG_STACKOVERFLOW is not set
- +# CONFIG_DEBUG_STACK_USAGE is not set
- +CONFIG_PRINTK_TIME=y
- +CONFIG_ENABLE_WARN_DEPRECATED=y
- +CONFIG_ENABLE_MUST_CHECK=y
- +CONFIG_FRAME_WARN=1024
- +# CONFIG_MAGIC_SYSRQ is not set
- +# CONFIG_UNUSED_SYMBOLS is not set
- +# CONFIG_DEBUG_FS is not set
- +# CONFIG_HEADERS_CHECK is not set
- +CONFIG_DEBUG_KERNEL=y
- +# CONFIG_DEBUG_SHIRQ is not set
- +# CONFIG_DETECT_SOFTLOCKUP is not set
- +# CONFIG_SCHED_DEBUG is not set
- +# CONFIG_SCHEDSTATS is not set
- +# CONFIG_TIMER_STATS is not set
- +# CONFIG_DEBUG_OBJECTS is not set
- +# CONFIG_DEBUG_SLAB is not set
- +# CONFIG_DEBUG_SPINLOCK is not set
- +# CONFIG_DEBUG_MUTEXES is not set
- +# CONFIG_DEBUG_LOCK_ALLOC is not set
- +# CONFIG_PROVE_LOCKING is not set
- +# CONFIG_LOCK_STAT is not set
- +# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
- +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
- +# CONFIG_DEBUG_KOBJECT is not set
- +CONFIG_DEBUG_INFO=y
- +# CONFIG_DEBUG_VM is not set
- +# CONFIG_DEBUG_WRITECOUNT is not set
- +# CONFIG_DEBUG_MEMORY_INIT is not set
- +# CONFIG_DEBUG_LIST is not set
- +# CONFIG_DEBUG_SG is not set
- +# CONFIG_FRAME_POINTER is not set
- +# CONFIG_BOOT_PRINTK_DELAY is not set
- +# CONFIG_RCU_TORTURE_TEST is not set
- +# CONFIG_RCU_CPU_STALL_DETECTOR is not set
- +# CONFIG_BACKTRACE_SELF_TEST is not set
- +# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
- +# CONFIG_FAULT_INJECTION is not set
- +# CONFIG_SYSCTL_SYSCALL_CHECK is not set
- +
- +#
- +# Tracers
- +#
- +# CONFIG_IRQSOFF_TRACER is not set
- +# CONFIG_SCHED_TRACER is not set
- +# CONFIG_CONTEXT_SWITCH_TRACER is not set
- +# CONFIG_BOOT_TRACER is not set
- +# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
- +# CONFIG_SAMPLES is not set
- +
- +#
- +# Executable file formats
- +#
- +CONFIG_BINFMT_ELF_FDPIC=y
- +CONFIG_BINFMT_FLAT=y
- +CONFIG_BINFMT_ZFLAT=y
- +# CONFIG_BINFMT_SHARED_FLAT is not set
- +# CONFIG_HAVE_AOUT is not set
- +# CONFIG_BINFMT_MISC is not set
- +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
- +
- +#
- +# General setup
- +#
- +CONFIG_EXPERIMENTAL=y
- +CONFIG_BROKEN_ON_SMP=y
- +CONFIG_INIT_ENV_ARG_LIMIT=32
- +CONFIG_LOCALVERSION=""
- +# CONFIG_LOCALVERSION_AUTO is not set
- +CONFIG_SYSVIPC=y
- +CONFIG_SYSVIPC_SYSCTL=y
- +# CONFIG_POSIX_MQUEUE is not set
- +# CONFIG_BSD_PROCESS_ACCT is not set
- +# CONFIG_TASKSTATS is not set
- +# CONFIG_AUDIT is not set
- +# CONFIG_IKCONFIG is not set
- +CONFIG_LOG_BUF_SHIFT=14
- +# CONFIG_CGROUPS is not set
- +# CONFIG_GROUP_SCHED is not set
- +CONFIG_SYSFS_DEPRECATED=y
- +CONFIG_SYSFS_DEPRECATED_V2=y
- +# CONFIG_RELAY is not set
- +# CONFIG_NAMESPACES is not set
- +CONFIG_BLK_DEV_INITRD=y
- +CONFIG_INITRAMFS_SOURCE=""
- +CONFIG_INITRAMFS_ROOT_UID=0
- +CONFIG_INITRAMFS_ROOT_GID=0
- +CONFIG_CC_OPTIMIZE_FOR_SIZE=y
- +CONFIG_SYSCTL=y
- +CONFIG_EMBEDDED=y
- +CONFIG_SYSCTL_SYSCALL=y
- +# CONFIG_KALLSYMS is not set
- +# CONFIG_HOTPLUG is not set
- +CONFIG_PRINTK=y
- +CONFIG_BUG=y
- +# CONFIG_ELF_CORE is not set
- +CONFIG_BASE_FULL=y
- +# CONFIG_FUTEX is not set
- +# CONFIG_EPOLL is not set
- +# CONFIG_SIGNALFD is not set
- +# CONFIG_TIMERFD is not set
- +# CONFIG_EVENTFD is not set
- +CONFIG_AIO=y
- +# CONFIG_VM_EVENT_COUNTERS is not set
- +CONFIG_PCI_QUIRKS=y
- +# CONFIG_COMPAT_BRK is not set
- +CONFIG_SLAB=y
- +# CONFIG_SLUB is not set
- +# CONFIG_SLOB is not set
- +# CONFIG_PROFILING is not set
- +# CONFIG_MARKERS is not set
- +CONFIG_HAVE_OPROFILE=y
- +# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
- +CONFIG_SLABINFO=y
- +CONFIG_TINY_SHMEM=y
- +CONFIG_BASE_SMALL=0
- +CONFIG_MODULES=y
- +CONFIG_MODULE_FORCE_LOAD=y
- +# CONFIG_MODULE_UNLOAD is not set
- +# CONFIG_MODVERSIONS is not set
- +# CONFIG_MODULE_SRCVERSION_ALL is not set
- +CONFIG_KMOD=y
- +CONFIG_BLOCK=y
- +# CONFIG_LBD is not set
- +# CONFIG_BLK_DEV_IO_TRACE is not set
- +# CONFIG_LSF is not set
- +# CONFIG_BLK_DEV_BSG is not set
- +# CONFIG_BLK_DEV_INTEGRITY is not set
- +
- +#
- +# IO Schedulers
- +#
- +CONFIG_IOSCHED_NOOP=y
- +# CONFIG_IOSCHED_AS is not set
- +# CONFIG_IOSCHED_DEADLINE is not set
- +# CONFIG_IOSCHED_CFQ is not set
- +# CONFIG_DEFAULT_AS is not set
- +# CONFIG_DEFAULT_DEADLINE is not set
- +# CONFIG_DEFAULT_CFQ is not set
- +CONFIG_DEFAULT_NOOP=y
- +CONFIG_DEFAULT_IOSCHED="noop"
- +CONFIG_CLASSIC_RCU=y
- +CONFIG_PREEMPT_NONE=y
- +# CONFIG_PREEMPT_VOLUNTARY is not set
- +# CONFIG_PREEMPT is not set
- +CONFIG_TICK_ONESHOT=y
- +CONFIG_NO_HZ=y
- +CONFIG_HIGH_RES_TIMERS=y
- +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
- +CONFIG_SELECT_MEMORY_MODEL=y
- +CONFIG_FLATMEM_MANUAL=y
- +# CONFIG_DISCONTIGMEM_MANUAL is not set
- +# CONFIG_SPARSEMEM_MANUAL is not set
- +CONFIG_FLATMEM=y
- +CONFIG_FLAT_NODE_MEM_MAP=y
- +CONFIG_PAGEFLAGS_EXTENDED=y
- +CONFIG_SPLIT_PTLOCK_CPUS=4
- +# CONFIG_RESOURCES_64BIT is not set
- +# CONFIG_PHYS_ADDR_T_64BIT is not set
- +CONFIG_ZONE_DMA_FLAG=1
- +CONFIG_VIRT_TO_BUS=y
- +CONFIG_NET=y
- +
- +#
- +# Networking options
- +#
- +CONFIG_PACKET=y
- +# CONFIG_PACKET_MMAP is not set
- +CONFIG_UNIX=y
- +# CONFIG_NET_KEY is not set
- +CONFIG_INET=y
- +CONFIG_IP_MULTICAST=y
- +CONFIG_IP_ADVANCED_ROUTER=y
- +CONFIG_ASK_IP_FIB_HASH=y
- +# CONFIG_IP_FIB_TRIE is not set
- +CONFIG_IP_FIB_HASH=y
- +# CONFIG_IP_MULTIPLE_TABLES is not set
- +# CONFIG_IP_ROUTE_MULTIPATH is not set
- +CONFIG_IP_ROUTE_VERBOSE=y
- +CONFIG_IP_PNP=y
- +CONFIG_IP_PNP_DHCP=y
- +CONFIG_IP_PNP_BOOTP=y
- +CONFIG_IP_PNP_RARP=y
- +CONFIG_NET_IPIP=y
- +CONFIG_NET_IPGRE=y
- +# CONFIG_NET_IPGRE_BROADCAST is not set
- +# CONFIG_IP_MROUTE is not set
- +# CONFIG_ARPD is not set
- +# CONFIG_SYN_COOKIES is not set
- +# CONFIG_INET_AH is not set
- +# CONFIG_INET_ESP is not set
- +# CONFIG_INET_IPCOMP is not set
- +# CONFIG_INET_XFRM_TUNNEL is not set
- +CONFIG_INET_TUNNEL=y
- +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
- +# CONFIG_INET_XFRM_MODE_TUNNEL is not set
- +# CONFIG_INET_XFRM_MODE_BEET is not set
- +# CONFIG_INET_LRO is not set
- +CONFIG_INET_DIAG=y
- +CONFIG_INET_TCP_DIAG=y
- +# CONFIG_TCP_CONG_ADVANCED is not set
- +CONFIG_TCP_CONG_CUBIC=y
- +CONFIG_DEFAULT_TCP_CONG="cubic"
- +# CONFIG_TCP_MD5SIG is not set
- +# CONFIG_IPV6 is not set
- +# CONFIG_NETWORK_SECMARK is not set
- +CONFIG_NETFILTER=y
- +# CONFIG_NETFILTER_DEBUG is not set
- +CONFIG_NETFILTER_ADVANCED=y
- +# CONFIG_BRIDGE_NETFILTER is not set
- +
- +#
- +# Core Netfilter Configuration
- +#
- +# CONFIG_NETFILTER_NETLINK_QUEUE is not set
- +# CONFIG_NETFILTER_NETLINK_LOG is not set
- +CONFIG_NF_CONNTRACK=y
- +# CONFIG_NF_CT_ACCT is not set
- +# CONFIG_NF_CONNTRACK_MARK is not set
- +# CONFIG_NF_CONNTRACK_EVENTS is not set
- +# CONFIG_NF_CT_PROTO_DCCP is not set
- +CONFIG_NF_CT_PROTO_GRE=y
- +# CONFIG_NF_CT_PROTO_SCTP is not set
- +# CONFIG_NF_CT_PROTO_UDPLITE is not set
- +# CONFIG_NF_CONNTRACK_AMANDA is not set
- +# CONFIG_NF_CONNTRACK_FTP is not set
- +# CONFIG_NF_CONNTRACK_H323 is not set
- +# CONFIG_NF_CONNTRACK_IRC is not set
- +# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
- +CONFIG_NF_CONNTRACK_PPTP=y
- +# CONFIG_NF_CONNTRACK_SANE is not set
- +# CONFIG_NF_CONNTRACK_SIP is not set
- +# CONFIG_NF_CONNTRACK_TFTP is not set
- +# CONFIG_NF_CT_NETLINK is not set
- +# CONFIG_NETFILTER_TPROXY is not set
- +CONFIG_NETFILTER_XTABLES=y
- +# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
- +# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
- +# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
- +# CONFIG_NETFILTER_XT_TARGET_MARK is not set
- +# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
- +# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
- +# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
- +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
- +# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
- +# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
- +# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
- +# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
- +# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
- +# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
- +# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
- +# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
- +CONFIG_NETFILTER_XT_MATCH_ESP=y
- +# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
- +# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
- +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
- +# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
- +CONFIG_NETFILTER_XT_MATCH_LIMIT=y
- +CONFIG_NETFILTER_XT_MATCH_MAC=y
- +# CONFIG_NETFILTER_XT_MATCH_MARK is not set
- +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
- +# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
- +# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
- +# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
- +# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
- +# CONFIG_NETFILTER_XT_MATCH_REALM is not set
- +# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
- +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
- +CONFIG_NETFILTER_XT_MATCH_STATE=y
- +# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
- +CONFIG_NETFILTER_XT_MATCH_STRING=y
- +CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
- +# CONFIG_NETFILTER_XT_MATCH_TIME is not set
- +# CONFIG_NETFILTER_XT_MATCH_U32 is not set
- +# CONFIG_IP_VS is not set
- +
- +#
- +# IP: Netfilter Configuration
- +#
- +CONFIG_NF_DEFRAG_IPV4=y
- +CONFIG_NF_CONNTRACK_IPV4=y
- +CONFIG_NF_CONNTRACK_PROC_COMPAT=y
- +# CONFIG_IP_NF_QUEUE is not set
- +CONFIG_IP_NF_IPTABLES=y
- +# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
- +CONFIG_IP_NF_MATCH_AH=y
- +# CONFIG_IP_NF_MATCH_ECN is not set
- +CONFIG_IP_NF_MATCH_TTL=y
- +CONFIG_IP_NF_FILTER=y
- +CONFIG_IP_NF_TARGET_REJECT=y
- +CONFIG_IP_NF_TARGET_LOG=y
- +# CONFIG_IP_NF_TARGET_ULOG is not set
- +# CONFIG_NF_QOS_UBICOM_STREAMENGINE_DEFAULT_CLASSIFIER is not set
- +CONFIG_NF_NAT=y
- +CONFIG_NF_NAT_NEEDED=y
- +CONFIG_IP_NF_TARGET_MASQUERADE=y
- +CONFIG_IP_NF_TARGET_NETMAP=y
- +CONFIG_IP_NF_TARGET_REDIRECT=y
- +CONFIG_NF_NAT_SNMP_BASIC=y
- +CONFIG_NF_NAT_PROTO_GRE=y
- +# CONFIG_NF_NAT_FTP is not set
- +# CONFIG_NF_NAT_IRC is not set
- +# CONFIG_NF_NAT_TFTP is not set
- +# CONFIG_NF_NAT_AMANDA is not set
- +CONFIG_NF_NAT_PPTP=y
- +# CONFIG_NF_NAT_H323 is not set
- +# CONFIG_NF_NAT_SIP is not set
- +CONFIG_IP_NF_MANGLE=y
- +# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
- +# CONFIG_IP_NF_TARGET_ECN is not set
- +CONFIG_IP_NF_TARGET_TTL=y
- +# CONFIG_IP_NF_RAW is not set
- +# CONFIG_IP_NF_ARPTABLES is not set
- +# CONFIG_IP_DCCP is not set
- +# CONFIG_IP_SCTP is not set
- +# CONFIG_TIPC is not set
- +# CONFIG_ATM is not set
- +CONFIG_STP=y
- +CONFIG_BRIDGE=y
- +# CONFIG_NET_DSA is not set
- +CONFIG_VLAN_8021Q=y
- +# CONFIG_VLAN_8021Q_GVRP is not set
- +# CONFIG_DECNET is not set
- +CONFIG_LLC=y
- +# CONFIG_LLC2 is not set
- +# CONFIG_IPX is not set
- +# CONFIG_ATALK is not set
- +# CONFIG_X25 is not set
- +# CONFIG_LAPB is not set
- +# CONFIG_ECONET is not set
- +# CONFIG_WAN_ROUTER is not set
- +# CONFIG_NET_SCHED is not set
- +
- +#
- +# Network testing
- +#
- +# CONFIG_NET_PKTGEN is not set
- +# CONFIG_HAMRADIO is not set
- +# CONFIG_CAN is not set
- +# CONFIG_IRDA is not set
- +# CONFIG_BT is not set
- +# CONFIG_AF_RXRPC is not set
- +# CONFIG_PHONET is not set
- +CONFIG_WIRELESS=y
- +# CONFIG_CFG80211 is not set
- +# CONFIG_WIRELESS_OLD_REGULATORY is not set
- +CONFIG_WIRELESS_EXT=y
- +CONFIG_WIRELESS_EXT_SYSFS=y
- +# CONFIG_MAC80211 is not set
- +# CONFIG_IEEE80211 is not set
- +# CONFIG_RFKILL is not set
- +# CONFIG_NET_9P is not set
- +
- +#
- +# Device Drivers
- +#
- +
- +#
- +# Generic Driver Options
- +#
- +CONFIG_STANDALONE=y
- +CONFIG_PREVENT_FIRMWARE_BUILD=y
- +# CONFIG_DEBUG_DRIVER is not set
- +# CONFIG_DEBUG_DEVRES is not set
- +# CONFIG_SYS_HYPERVISOR is not set
- +# CONFIG_CONNECTOR is not set
- +CONFIG_MTD=y
- +# CONFIG_MTD_DEBUG is not set
- +# CONFIG_MTD_CONCAT is not set
- +CONFIG_MTD_PARTITIONS=y
- +# CONFIG_MTD_REDBOOT_PARTS is not set
- +CONFIG_MTD_CMDLINE_PARTS=y
- +# CONFIG_MTD_AR7_PARTS is not set
- +
- +#
- +# User Modules And Translation Layers
- +#
- +CONFIG_MTD_CHAR=y
- +CONFIG_MTD_BLKDEVS=y
- +CONFIG_MTD_BLOCK=y
- +# CONFIG_FTL is not set
- +# CONFIG_NFTL is not set
- +# CONFIG_INFTL is not set
- +# CONFIG_RFD_FTL is not set
- +# CONFIG_SSFDC is not set
- +# CONFIG_MTD_OOPS is not set
- +
- +#
- +# RAM/ROM/Flash chip drivers
- +#
- +# CONFIG_MTD_CFI is not set
- +# CONFIG_MTD_JEDECPROBE is not set
- +CONFIG_MTD_MAP_BANK_WIDTH_1=y
- +CONFIG_MTD_MAP_BANK_WIDTH_2=y
- +CONFIG_MTD_MAP_BANK_WIDTH_4=y
- +# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
- +# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
- +# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
- +CONFIG_MTD_CFI_I1=y
- +CONFIG_MTD_CFI_I2=y
- +# CONFIG_MTD_CFI_I4 is not set
- +# CONFIG_MTD_CFI_I8 is not set
- +# CONFIG_MTD_RAM is not set
- +# CONFIG_MTD_ROM is not set
- +# CONFIG_MTD_ABSENT is not set
- +
- +#
- +# Mapping drivers for chip access
- +#
- +# CONFIG_MTD_COMPLEX_MAPPINGS is not set
- +# CONFIG_MTD_INTEL_VR_NOR is not set
- +# CONFIG_MTD_PLATRAM is not set
- +
- +#
- +# Self-contained MTD device drivers
- +#
- +# CONFIG_MTD_PMC551 is not set
- +# CONFIG_MTD_DATAFLASH is not set
- +# CONFIG_MTD_M25P80 is not set
- +CONFIG_MTD_UBI32_M25P80=y
- +# CONFIG_MTD_SLRAM is not set
- +# CONFIG_MTD_PHRAM is not set
- +# CONFIG_MTD_MTDRAM is not set
- +# CONFIG_MTD_BLOCK2MTD is not set
- +
- +#
- +# Disk-On-Chip Device Drivers
- +#
- +# CONFIG_MTD_DOC2000 is not set
- +# CONFIG_MTD_DOC2001 is not set
- +# CONFIG_MTD_DOC2001PLUS is not set
- +# CONFIG_MTD_NAND is not set
- +# CONFIG_MTD_ONENAND is not set
- +
- +#
- +# UBI - Unsorted block images
- +#
- +# CONFIG_MTD_UBI is not set
- +# CONFIG_PARPORT is not set
- +CONFIG_BLK_DEV=y
- +# CONFIG_BLK_CPQ_DA is not set
- +# CONFIG_BLK_CPQ_CISS_DA is not set
- +# CONFIG_BLK_DEV_DAC960 is not set
- +# CONFIG_BLK_DEV_UMEM is not set
- +# CONFIG_BLK_DEV_COW_COMMON is not set
- +# CONFIG_BLK_DEV_LOOP is not set
- +# CONFIG_BLK_DEV_NBD is not set
- +# CONFIG_BLK_DEV_SX8 is not set
- +# CONFIG_BLK_DEV_UB is not set
- +CONFIG_BLK_DEV_RAM=y
- +CONFIG_BLK_DEV_RAM_COUNT=16
- +CONFIG_BLK_DEV_RAM_SIZE=4096
- +# CONFIG_BLK_DEV_XIP is not set
- +# CONFIG_CDROM_PKTCDVD is not set
- +# CONFIG_ATA_OVER_ETH is not set
- +# CONFIG_MISC_DEVICES is not set
- +
- +#
- +# SCSI device support
- +#
- +# CONFIG_RAID_ATTRS is not set
- +CONFIG_SCSI=y
- +CONFIG_SCSI_DMA=y
- +# CONFIG_SCSI_TGT is not set
- +# CONFIG_SCSI_NETLINK is not set
- +CONFIG_SCSI_PROC_FS=y
- +
- +#
- +# SCSI support type (disk, tape, CD-ROM)
- +#
- +CONFIG_BLK_DEV_SD=y
- +# CONFIG_CHR_DEV_ST is not set
- +# CONFIG_CHR_DEV_OSST is not set
- +# CONFIG_BLK_DEV_SR is not set
- +CONFIG_CHR_DEV_SG=y
- +# CONFIG_CHR_DEV_SCH is not set
- +
- +#
- +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
- +#
- +CONFIG_SCSI_MULTI_LUN=y
- +# CONFIG_SCSI_CONSTANTS is not set
- +# CONFIG_SCSI_LOGGING is not set
- +# CONFIG_SCSI_SCAN_ASYNC is not set
- +CONFIG_SCSI_WAIT_SCAN=m
- +
- +#
- +# SCSI Transports
- +#
- +# CONFIG_SCSI_SPI_ATTRS is not set
- +# CONFIG_SCSI_FC_ATTRS is not set
- +# CONFIG_SCSI_ISCSI_ATTRS is not set
- +# CONFIG_SCSI_SAS_LIBSAS is not set
- +# CONFIG_SCSI_SRP_ATTRS is not set
- +# CONFIG_SCSI_LOWLEVEL is not set
- +# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
- +# CONFIG_SCSI_DH is not set
- +# CONFIG_ATA is not set
- +# CONFIG_MD is not set
- +# CONFIG_FUSION is not set
- +
- +#
- +# IEEE 1394 (FireWire) support
- +#
- +
- +#
- +# Enable only one of the two stacks, unless you know what you are doing
- +#
- +# CONFIG_FIREWIRE is not set
- +# CONFIG_IEEE1394 is not set
- +# CONFIG_I2O is not set
- +CONFIG_NETDEVICES=y
- +# CONFIG_DUMMY is not set
- +# CONFIG_BONDING is not set
- +# CONFIG_MACVLAN is not set
- +# CONFIG_EQUALIZER is not set
- +# CONFIG_TUN is not set
- +# CONFIG_VETH is not set
- +# CONFIG_ARCNET is not set
- +# CONFIG_NET_ETHERNET is not set
- +CONFIG_MII=y
- +CONFIG_NETDEV_1000=y
- +# CONFIG_ACENIC is not set
- +# CONFIG_DL2K is not set
- +# CONFIG_E1000 is not set
- +# CONFIG_E1000E is not set
- +# CONFIG_IP1000 is not set
- +# CONFIG_IGB is not set
- +# CONFIG_NS83820 is not set
- +# CONFIG_HAMACHI is not set
- +# CONFIG_YELLOWFIN is not set
- +# CONFIG_R8169 is not set
- +# CONFIG_SIS190 is not set
- +# CONFIG_SKGE is not set
- +# CONFIG_SKY2 is not set
- +# CONFIG_VIA_VELOCITY is not set
- +# CONFIG_TIGON3 is not set
- +# CONFIG_BNX2 is not set
- +# CONFIG_QLA3XXX is not set
- +# CONFIG_ATL1 is not set
- +# CONFIG_ATL1E is not set
- +# CONFIG_JME is not set
- +CONFIG_UBICOM32_GMAC=y
- +CONFIG_UBICOM32_NAPI=y
- +CONFIG_UBICOM32_OCM_FOR_SKB=y
- +# CONFIG_NETDEV_10000 is not set
- +# CONFIG_TR is not set
- +
- +#
- +# Wireless LAN
- +#
- +# CONFIG_WLAN_PRE80211 is not set
- +# CONFIG_WLAN_80211 is not set
- +# CONFIG_IWLWIFI_LEDS is not set
- +
- +#
- +# USB Network Adapters
- +#
- +# CONFIG_USB_CATC is not set
- +# CONFIG_USB_KAWETH is not set
- +# CONFIG_USB_PEGASUS is not set
- +# CONFIG_USB_RTL8150 is not set
- +CONFIG_USB_USBNET=y
- +CONFIG_USB_NET_AX8817X=y
- +CONFIG_USB_NET_CDCETHER=y
- +# CONFIG_USB_NET_DM9601 is not set
- +# CONFIG_USB_NET_SMSC95XX is not set
- +# CONFIG_USB_NET_GL620A is not set
- +# CONFIG_USB_NET_NET1080 is not set
- +# CONFIG_USB_NET_PLUSB is not set
- +# CONFIG_USB_NET_MCS7830 is not set
- +# CONFIG_USB_NET_RNDIS_HOST is not set
- +# CONFIG_USB_NET_CDC_SUBSET is not set
- +# CONFIG_USB_NET_ZAURUS is not set
- +# CONFIG_WAN is not set
- +# CONFIG_FDDI is not set
- +# CONFIG_HIPPI is not set
- +CONFIG_PPP=y
- +# CONFIG_PPP_MULTILINK is not set
- +# CONFIG_PPP_FILTER is not set
- +CONFIG_PPP_ASYNC=y
- +# CONFIG_PPP_SYNC_TTY is not set
- +# CONFIG_PPP_DEFLATE is not set
- +# CONFIG_PPP_BSDCOMP is not set
- +# CONFIG_PPP_MPPE is not set
- +# CONFIG_PPPOE is not set
- +# CONFIG_PPPOL2TP is not set
- +# CONFIG_SLIP is not set
- +CONFIG_SLHC=y
- +# CONFIG_NET_FC is not set
- +# CONFIG_NETCONSOLE is not set
- +# CONFIG_NETPOLL is not set
- +# CONFIG_NET_POLL_CONTROLLER is not set
- +# CONFIG_ISDN is not set
- +# CONFIG_PHONE is not set
- +
- +#
- +# Input device support
- +#
- +CONFIG_INPUT=y
- +# CONFIG_INPUT_FF_MEMLESS is not set
- +CONFIG_INPUT_POLLDEV=y
- +
- +#
- +# Userland interfaces
- +#
- +# CONFIG_INPUT_MOUSEDEV is not set
- +# CONFIG_INPUT_JOYDEV is not set
- +# CONFIG_INPUT_EVDEV is not set
- +# CONFIG_INPUT_EVBUG is not set
- +
- +#
- +# Input Device Drivers
- +#
- +# CONFIG_INPUT_KEYBOARD is not set
- +# CONFIG_INPUT_MOUSE is not set
- +# CONFIG_INPUT_JOYSTICK is not set
- +# CONFIG_INPUT_TABLET is not set
- +# CONFIG_INPUT_TOUCHSCREEN is not set
- +# CONFIG_INPUT_MISC is not set
- +
- +#
- +# Hardware I/O ports
- +#
- +# CONFIG_SERIO is not set
- +# CONFIG_GAMEPORT is not set
- +
- +#
- +# Character devices
- +#
- +# CONFIG_VT is not set
- +CONFIG_DEVKMEM=y
- +# CONFIG_SERIAL_NONSTANDARD is not set
- +# CONFIG_NOZOMI is not set
- +
- +#
- +# Serial drivers
- +#
- +# CONFIG_SERIAL_8250 is not set
- +
- +#
- +# Non-8250 serial port support
- +#
- +# CONFIG_SERIAL_UBI32_SERDES is not set
- +CONFIG_SERIAL_UBI32_MAILBOX=y
- +CONFIG_SERIAL_UBI32_MAILBOX_CONSOLE=y
- +CONFIG_SERIAL_CORE=y
- +CONFIG_SERIAL_CORE_CONSOLE=y
- +# CONFIG_SERIAL_JSM is not set
- +CONFIG_UNIX98_PTYS=y
- +CONFIG_LEGACY_PTYS=y
- +CONFIG_LEGACY_PTY_COUNT=256
- +# CONFIG_IPMI_HANDLER is not set
- +CONFIG_HW_RANDOM=y
- +CONFIG_HW_RANDOM_UBICOM32=y
- +# CONFIG_RTC is not set
- +# CONFIG_GEN_RTC is not set
- +# CONFIG_R3964 is not set
- +# CONFIG_APPLICOM is not set
- +# CONFIG_RAW_DRIVER is not set
- +# CONFIG_TCG_TPM is not set
- +CONFIG_DEVPORT=y
- +# CONFIG_I2C is not set
- +CONFIG_SPI=y
- +# CONFIG_SPI_DEBUG is not set
- +CONFIG_SPI_MASTER=y
- +
- +#
- +# SPI Master Controller Drivers
- +#
- +CONFIG_SPI_BITBANG=y
- +CONFIG_SPI_UBICOM32_GPIO=y
- +
- +#
- +# SPI Protocol Masters
- +#
- +# CONFIG_SPI_AT25 is not set
- +# CONFIG_SPI_SPIDEV is not set
- +# CONFIG_SPI_TLE62X0 is not set
- +# CONFIG_DEBUG_GPIO is not set
- +# CONFIG_GPIO_SYSFS is not set
- +
- +#
- +# Memory mapped GPIO expanders:
- +#
- +
- +#
- +# I2C GPIO expanders:
- +#
- +
- +#
- +# PCI GPIO expanders:
- +#
- +# CONFIG_GPIO_BT8XX is not set
- +
- +#
- +# SPI GPIO expanders:
- +#
- +# CONFIG_GPIO_MAX7301 is not set
- +# CONFIG_GPIO_MCP23S08 is not set
- +# CONFIG_W1 is not set
- +# CONFIG_POWER_SUPPLY is not set
- +# CONFIG_HWMON is not set
- +# CONFIG_THERMAL is not set
- +# CONFIG_THERMAL_HWMON is not set
- +CONFIG_WATCHDOG=y
- +# CONFIG_WATCHDOG_NOWAYOUT is not set
- +
- +#
- +# Watchdog Device Drivers
- +#
- +# CONFIG_SOFT_WATCHDOG is not set
- +# CONFIG_ALIM7101_WDT is not set
- +CONFIG_UBI32_WDT=y
- +
- +#
- +# PCI-based Watchdog Cards
- +#
- +# CONFIG_PCIPCWATCHDOG is not set
- +# CONFIG_WDTPCI is not set
- +
- +#
- +# USB-based Watchdog Cards
- +#
- +# CONFIG_USBPCWATCHDOG is not set
- +CONFIG_SSB_POSSIBLE=y
- +
- +#
- +# Sonics Silicon Backplane
- +#
- +# CONFIG_SSB is not set
- +
- +#
- +# Multifunction device drivers
- +#
- +# CONFIG_MFD_CORE is not set
- +# CONFIG_MFD_SM501 is not set
- +# CONFIG_HTC_PASIC3 is not set
- +# CONFIG_MFD_TMIO is not set
- +# CONFIG_REGULATOR is not set
- +
- +#
- +# Multimedia devices
- +#
- +
- +#
- +# Multimedia core support
- +#
- +# CONFIG_VIDEO_DEV is not set
- +# CONFIG_DVB_CORE is not set
- +# CONFIG_VIDEO_MEDIA is not set
- +
- +#
- +# Multimedia drivers
- +#
- +# CONFIG_DAB is not set
- +
- +#
- +# Graphics support
- +#
- +# CONFIG_VGASTATE is not set
- +# CONFIG_VIDEO_OUTPUT_CONTROL is not set
- +# CONFIG_FB is not set
- +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
- +
- +#
- +# Display device support
- +#
- +# CONFIG_DISPLAY_SUPPORT is not set
- +# CONFIG_SOUND is not set
- +# CONFIG_HID_SUPPORT is not set
- +CONFIG_USB_SUPPORT=y
- +CONFIG_USB_ARCH_HAS_HCD=y
- +CONFIG_USB_ARCH_HAS_OHCI=y
- +CONFIG_USB_ARCH_HAS_EHCI=y
- +CONFIG_USB=y
- +# CONFIG_USB_DEBUG is not set
- +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
- +
- +#
- +# Miscellaneous USB options
- +#
- +CONFIG_USB_DEVICEFS=y
- +# CONFIG_USB_DEVICE_CLASS is not set
- +# CONFIG_USB_DYNAMIC_MINORS is not set
- +# CONFIG_USB_OTG is not set
- +# CONFIG_USB_OTG_WHITELIST is not set
- +# CONFIG_USB_OTG_BLACKLIST_HUB is not set
- +# CONFIG_USB_MON is not set
- +# CONFIG_USB_WUSB is not set
- +# CONFIG_USB_WUSB_CBAF is not set
- +
- +#
- +# USB Host Controller Drivers
- +#
- +# CONFIG_USB_C67X00_HCD is not set
- +# CONFIG_USB_EHCI_HCD is not set
- +# CONFIG_USB_ISP116X_HCD is not set
- +# CONFIG_USB_ISP1760_HCD is not set
- +# CONFIG_USB_OHCI_HCD is not set
- +# CONFIG_USB_UHCI_HCD is not set
- +# CONFIG_USB_SL811_HCD is not set
- +# CONFIG_USB_R8A66597_HCD is not set
- +# CONFIG_USB_WHCI_HCD is not set
- +# CONFIG_USB_HWA_HCD is not set
- +CONFIG_USB_MUSB_HDRC=y
- +# CONFIG_USB_TUSB6010 is not set
- +CONFIG_USB_MUSB_HOST=y
- +# CONFIG_USB_MUSB_PERIPHERAL is not set
- +# CONFIG_USB_MUSB_OTG is not set
- +CONFIG_USB_MUSB_HDRC_HCD=y
- +CONFIG_MUSB_PIO_ONLY=y
- +# CONFIG_USB_MUSB_DEBUG is not set
- +
- +#
- +# USB Device Class drivers
- +#
- +# CONFIG_USB_ACM is not set
- +# CONFIG_USB_PRINTER is not set
- +# CONFIG_USB_WDM is not set
- +# CONFIG_USB_TMC is not set
- +
- +#
- +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
- +#
- +
- +#
- +# see USB_STORAGE Help for more information
- +#
- +CONFIG_USB_STORAGE=y
- +# CONFIG_USB_STORAGE_DEBUG is not set
- +# CONFIG_USB_STORAGE_DATAFAB is not set
- +# CONFIG_USB_STORAGE_FREECOM is not set
- +# CONFIG_USB_STORAGE_ISD200 is not set
- +# CONFIG_USB_STORAGE_DPCM is not set
- +# CONFIG_USB_STORAGE_USBAT is not set
- +# CONFIG_USB_STORAGE_SDDR09 is not set
- +# CONFIG_USB_STORAGE_SDDR55 is not set
- +# CONFIG_USB_STORAGE_JUMPSHOT is not set
- +# CONFIG_USB_STORAGE_ALAUDA is not set
- +# CONFIG_USB_STORAGE_ONETOUCH is not set
- +# CONFIG_USB_STORAGE_KARMA is not set
- +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
- +CONFIG_USB_LIBUSUAL=y
- +
- +#
- +# USB Imaging devices
- +#
- +# CONFIG_USB_MDC800 is not set
- +# CONFIG_USB_MICROTEK is not set
- +
- +#
- +# USB port drivers
- +#
- +# CONFIG_USB_SERIAL is not set
- +
- +#
- +# USB Miscellaneous drivers
- +#
- +# CONFIG_USB_EMI62 is not set
- +# CONFIG_USB_EMI26 is not set
- +# CONFIG_USB_ADUTUX is not set
- +# CONFIG_USB_SEVSEG is not set
- +# CONFIG_USB_RIO500 is not set
- +# CONFIG_USB_LEGOTOWER is not set
- +# CONFIG_USB_LCD is not set
- +# CONFIG_USB_BERRY_CHARGE is not set
- +# CONFIG_USB_LED is not set
- +# CONFIG_USB_CYPRESS_CY7C63 is not set
- +# CONFIG_USB_CYTHERM is not set
- +# CONFIG_USB_PHIDGET is not set
- +# CONFIG_USB_IDMOUSE is not set
- +# CONFIG_USB_FTDI_ELAN is not set
- +# CONFIG_USB_APPLEDISPLAY is not set
- +# CONFIG_USB_LD is not set
- +# CONFIG_USB_TRANCEVIBRATOR is not set
- +# CONFIG_USB_IOWARRIOR is not set
- +# CONFIG_USB_TEST is not set
- +# CONFIG_USB_ISIGHTFW is not set
- +# CONFIG_USB_VST is not set
- +# CONFIG_USB_GADGET is not set
- +# CONFIG_UWB is not set
- +# CONFIG_MMC is not set
- +# CONFIG_MEMSTICK is not set
- +CONFIG_NEW_LEDS=y
- +CONFIG_LEDS_CLASS=y
- +
- +#
- +# LED drivers
- +#
- +CONFIG_LEDS_GPIO=y
- +
- +#
- +# LED Triggers
- +#
- +# CONFIG_LEDS_TRIGGERS is not set
- +# CONFIG_ACCESSIBILITY is not set
- +# CONFIG_INFINIBAND is not set
- +# CONFIG_RTC_CLASS is not set
- +# CONFIG_DMADEVICES is not set
- +# CONFIG_UIO is not set
- +# CONFIG_STAGING is not set
- +
- +#
- +# File systems
- +#
- +# CONFIG_EXT2_FS is not set
- +# CONFIG_EXT3_FS is not set
- +# CONFIG_EXT4_FS is not set
- +# CONFIG_REISERFS_FS is not set
- +# CONFIG_JFS_FS is not set
- +# CONFIG_FS_POSIX_ACL is not set
- +CONFIG_FILE_LOCKING=y
- +# CONFIG_XFS_FS is not set
- +# CONFIG_OCFS2_FS is not set
- +# CONFIG_DNOTIFY is not set
- +# CONFIG_INOTIFY is not set
- +# CONFIG_QUOTA is not set
- +CONFIG_AUTOFS_FS=y
- +# CONFIG_AUTOFS4_FS is not set
- +# CONFIG_FUSE_FS is not set
- +
- +#
- +# CD-ROM/DVD Filesystems
- +#
- +# CONFIG_ISO9660_FS is not set
- +# CONFIG_UDF_FS is not set
- +
- +#
- +# DOS/FAT/NT Filesystems
- +#
- +CONFIG_FAT_FS=y
- +CONFIG_MSDOS_FS=y
- +CONFIG_VFAT_FS=y
- +CONFIG_FAT_DEFAULT_CODEPAGE=437
- +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
- +# CONFIG_NTFS_FS is not set
- +
- +#
- +# Pseudo filesystems
- +#
- +CONFIG_PROC_FS=y
- +CONFIG_PROC_SYSCTL=y
- +CONFIG_SYSFS=y
- +# CONFIG_TMPFS is not set
- +# CONFIG_HUGETLB_PAGE is not set
- +# CONFIG_CONFIGFS_FS is not set
- +
- +#
- +# Layered filesystems
- +#
- +CONFIG_UNION_FS=y
- +# CONFIG_UNION_FS_XATTR is not set
- +# CONFIG_UNION_FS_DEBUG is not set
- +
- +#
- +# Miscellaneous filesystems
- +#
- +# CONFIG_ADFS_FS is not set
- +# CONFIG_AFFS_FS is not set
- +# CONFIG_HFS_FS is not set
- +# CONFIG_HFSPLUS_FS is not set
- +# CONFIG_BEFS_FS is not set
- +# CONFIG_BFS_FS is not set
- +# CONFIG_EFS_FS is not set
- +CONFIG_JFFS2_FS=y
- +CONFIG_JFFS2_FS_DEBUG=0
- +CONFIG_JFFS2_FS_WRITEBUFFER=y
- +# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
- +# CONFIG_JFFS2_SUMMARY is not set
- +# CONFIG_JFFS2_FS_XATTR is not set
- +# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
- +CONFIG_JFFS2_ZLIB=y
- +# CONFIG_JFFS2_LZO is not set
- +CONFIG_JFFS2_RTIME=y
- +# CONFIG_JFFS2_RUBIN is not set
- +# CONFIG_CRAMFS is not set
- +# CONFIG_VXFS_FS is not set
- +# CONFIG_MINIX_FS is not set
- +# CONFIG_OMFS_FS is not set
- +# CONFIG_HPFS_FS is not set
- +# CONFIG_QNX4FS_FS is not set
- +CONFIG_ROMFS_FS=y
- +# CONFIG_SYSV_FS is not set
- +# CONFIG_UFS_FS is not set
- +# CONFIG_NETWORK_FILESYSTEMS is not set
- +
- +#
- +# Partition Types
- +#
- +CONFIG_PARTITION_ADVANCED=y
- +# CONFIG_ACORN_PARTITION is not set
- +# CONFIG_OSF_PARTITION is not set
- +# CONFIG_AMIGA_PARTITION is not set
- +# CONFIG_ATARI_PARTITION is not set
- +# CONFIG_MAC_PARTITION is not set
- +CONFIG_MSDOS_PARTITION=y
- +# CONFIG_BSD_DISKLABEL is not set
- +# CONFIG_MINIX_SUBPARTITION is not set
- +# CONFIG_SOLARIS_X86_PARTITION is not set
- +# CONFIG_UNIXWARE_DISKLABEL is not set
- +CONFIG_LDM_PARTITION=y
- +CONFIG_LDM_DEBUG=y
- +# CONFIG_SGI_PARTITION is not set
- +# CONFIG_ULTRIX_PARTITION is not set
- +# CONFIG_SUN_PARTITION is not set
- +# CONFIG_KARMA_PARTITION is not set
- +# CONFIG_EFI_PARTITION is not set
- +# CONFIG_SYSV68_PARTITION is not set
- +CONFIG_NLS=y
- +CONFIG_NLS_DEFAULT="iso8859-1"
- +CONFIG_NLS_CODEPAGE_437=y
- +# CONFIG_NLS_CODEPAGE_737 is not set
- +# CONFIG_NLS_CODEPAGE_775 is not set
- +# CONFIG_NLS_CODEPAGE_850 is not set
- +# CONFIG_NLS_CODEPAGE_852 is not set
- +# CONFIG_NLS_CODEPAGE_855 is not set
- +# CONFIG_NLS_CODEPAGE_857 is not set
- +# CONFIG_NLS_CODEPAGE_860 is not set
- +# CONFIG_NLS_CODEPAGE_861 is not set
- +# CONFIG_NLS_CODEPAGE_862 is not set
- +# CONFIG_NLS_CODEPAGE_863 is not set
- +# CONFIG_NLS_CODEPAGE_864 is not set
- +# CONFIG_NLS_CODEPAGE_865 is not set
- +# CONFIG_NLS_CODEPAGE_866 is not set
- +# CONFIG_NLS_CODEPAGE_869 is not set
- +# CONFIG_NLS_CODEPAGE_936 is not set
- +# CONFIG_NLS_CODEPAGE_950 is not set
- +# CONFIG_NLS_CODEPAGE_932 is not set
- +# CONFIG_NLS_CODEPAGE_949 is not set
- +# CONFIG_NLS_CODEPAGE_874 is not set
- +# CONFIG_NLS_ISO8859_8 is not set
- +# CONFIG_NLS_CODEPAGE_1250 is not set
- +# CONFIG_NLS_CODEPAGE_1251 is not set
- +CONFIG_NLS_ASCII=y
- +CONFIG_NLS_ISO8859_1=y
- +# CONFIG_NLS_ISO8859_2 is not set
- +# CONFIG_NLS_ISO8859_3 is not set
- +# CONFIG_NLS_ISO8859_4 is not set
- +# CONFIG_NLS_ISO8859_5 is not set
- +# CONFIG_NLS_ISO8859_6 is not set
- +# CONFIG_NLS_ISO8859_7 is not set
- +# CONFIG_NLS_ISO8859_9 is not set
- +# CONFIG_NLS_ISO8859_13 is not set
- +# CONFIG_NLS_ISO8859_14 is not set
- +CONFIG_NLS_ISO8859_15=y
- +# CONFIG_NLS_KOI8_R is not set
- +# CONFIG_NLS_KOI8_U is not set
- +CONFIG_NLS_UTF8=y
- +# CONFIG_DLM is not set
- +
- +#
- +# Security options
- +#
- +# CONFIG_KEYS is not set
- +# CONFIG_SECURITY is not set
- +# CONFIG_SECURITYFS is not set
- +# CONFIG_SECURITY_FILE_CAPABILITIES is not set
- +CONFIG_CRYPTO=y
- +
- +#
- +# Crypto core or helper
- +#
- +# CONFIG_CRYPTO_FIPS is not set
- +CONFIG_CRYPTO_ALGAPI=y
- +CONFIG_CRYPTO_ALGAPI2=y
- +CONFIG_CRYPTO_AEAD2=y
- +CONFIG_CRYPTO_BLKCIPHER=y
- +CONFIG_CRYPTO_BLKCIPHER2=y
- +CONFIG_CRYPTO_HASH2=y
- +CONFIG_CRYPTO_RNG2=y
- +CONFIG_CRYPTO_MANAGER=y
- +CONFIG_CRYPTO_MANAGER2=y
- +# CONFIG_CRYPTO_GF128MUL is not set
- +# CONFIG_CRYPTO_NULL is not set
- +# CONFIG_CRYPTO_CRYPTD is not set
- +# CONFIG_CRYPTO_AUTHENC is not set
- +# CONFIG_CRYPTO_TEST is not set
- +
- +#
- +# Authenticated Encryption with Associated Data
- +#
- +# CONFIG_CRYPTO_CCM is not set
- +# CONFIG_CRYPTO_GCM is not set
- +# CONFIG_CRYPTO_SEQIV is not set
- +
- +#
- +# Block modes
- +#
- +# CONFIG_CRYPTO_CBC is not set
- +# CONFIG_CRYPTO_CTR is not set
- +# CONFIG_CRYPTO_CTS is not set
- +CONFIG_CRYPTO_ECB=y
- +# CONFIG_CRYPTO_LRW is not set
- +# CONFIG_CRYPTO_PCBC is not set
- +# CONFIG_CRYPTO_XTS is not set
- +
- +#
- +# Hash modes
- +#
- +# CONFIG_CRYPTO_HMAC is not set
- +# CONFIG_CRYPTO_XCBC is not set
- +
- +#
- +# Digest
- +#
- +# CONFIG_CRYPTO_CRC32C is not set
- +# CONFIG_CRYPTO_MD4 is not set
- +# CONFIG_CRYPTO_MD5 is not set
- +# CONFIG_CRYPTO_MICHAEL_MIC is not set
- +# CONFIG_CRYPTO_RMD128 is not set
- +# CONFIG_CRYPTO_RMD160 is not set
- +# CONFIG_CRYPTO_RMD256 is not set
- +# CONFIG_CRYPTO_RMD320 is not set
- +# CONFIG_CRYPTO_SHA1 is not set
- +# CONFIG_CRYPTO_SHA256 is not set
- +# CONFIG_CRYPTO_SHA512 is not set
- +# CONFIG_CRYPTO_TGR192 is not set
- +# CONFIG_CRYPTO_WP512 is not set
- +
- +#
- +# Ciphers
- +#
- +CONFIG_CRYPTO_AES=y
- +# CONFIG_CRYPTO_ANUBIS is not set
- +CONFIG_CRYPTO_ARC4=y
- +# CONFIG_CRYPTO_BLOWFISH is not set
- +# CONFIG_CRYPTO_CAMELLIA is not set
- +# CONFIG_CRYPTO_CAST5 is not set
- +# CONFIG_CRYPTO_CAST6 is not set
- +# CONFIG_CRYPTO_DES is not set
- +# CONFIG_CRYPTO_FCRYPT is not set
- +# CONFIG_CRYPTO_KHAZAD is not set
- +# CONFIG_CRYPTO_SALSA20 is not set
- +# CONFIG_CRYPTO_SEED is not set
- +# CONFIG_CRYPTO_SERPENT is not set
- +# CONFIG_CRYPTO_TEA is not set
- +# CONFIG_CRYPTO_TWOFISH is not set
- +
- +#
- +# Compression
- +#
- +# CONFIG_CRYPTO_DEFLATE is not set
- +# CONFIG_CRYPTO_LZO is not set
- +
- +#
- +# Random Number Generation
- +#
- +# CONFIG_CRYPTO_ANSI_CPRNG is not set
- +# CONFIG_CRYPTO_HW is not set
- +
- +#
- +# OCF Configuration
- +#
- +# CONFIG_OCF_OCF is not set
- +
- +#
- +# Library routines
- +#
- +CONFIG_BITREVERSE=y
- +CONFIG_CRC_CCITT=y
- +# CONFIG_CRC16 is not set
- +# CONFIG_CRC_T10DIF is not set
- +# CONFIG_CRC_ITU_T is not set
- +CONFIG_CRC32=y
- +# CONFIG_CRC7 is not set
- +# CONFIG_LIBCRC32C is not set
- +CONFIG_ZLIB_INFLATE=y
- +CONFIG_ZLIB_DEFLATE=y
- +CONFIG_TEXTSEARCH=y
- +CONFIG_TEXTSEARCH_KMP=y
- +CONFIG_TEXTSEARCH_BM=y
- +CONFIG_TEXTSEARCH_FSM=y
- +CONFIG_HAS_IOMEM=y
- +CONFIG_HAS_DMA=y
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/a.out.h linux-2.6.28.10/arch/ubicom32/include/asm/a.out.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/a.out.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/a.out.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,47 @@
- +/*
- + * arch/ubicom32/include/asm/a.out.h
- + * Definitions for Ubicom32 a.out executable format.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_A_OUT_H
- +#define _ASM_UBICOM32_A_OUT_H
- +
- +struct exec
- +{
- + unsigned long a_info; /* Use macros N_MAGIC, etc for access */
- + unsigned a_text; /* length of text, in bytes */
- + unsigned a_data; /* length of data, in bytes */
- + unsigned a_bss; /* length of uninitialized data area for file, in bytes */
- + unsigned a_syms; /* length of symbol table data in file, in bytes */
- + unsigned a_entry; /* start address */
- + unsigned a_trsize; /* length of relocation info for text, in bytes */
- + unsigned a_drsize; /* length of relocation info for data, in bytes */
- +};
- +
- +#define N_TRSIZE(a) ((a).a_trsize)
- +#define N_DRSIZE(a) ((a).a_drsize)
- +#define N_SYMSIZE(a) ((a).a_syms)
- +
- +#endif /* _ASM_UBICOM32_A_OUT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/atomic.h linux-2.6.28.10/arch/ubicom32/include/asm/atomic.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/atomic.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/atomic.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,352 @@
- +/*
- + * arch/ubicom32/include/asm/atomic.h
- + * Atomic operations definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_ATOMIC_H
- +#define _ASM_UBICOM32_ATOMIC_H
- +
- +#include <asm/system.h>
- +#include <asm/ubicom32-common.h>
- +#include <asm/types.h>
- +
- +/*
- + * Most instructions on the Ubicom32 processor are atomic in that they
- + * execute in one clock cycle. However, Linux has several operations
- + * (e.g. compare and swap) which will require more than a single instruction
- + * to perform. To achieve this, the Ubicom32 processor uses a single
- + * global bit in a scratchpad register as a critical section lock. All
- + * atomic operations acquire this lock.
- + *
- + * NOTE: To AVOID DEADLOCK(s), the atomic lock must only be used for atomic
- + * operations or by the ldsr to avoid disabling a thread performing an atomic
- + * operation.
- + *
- + * Do not attempt to disable interrupts while holding the atomic operations
- + * lock or you will DEADLOCK the system.
- + */
- +
- +typedef struct {
- + volatile int counter;
- +} atomic_t;
- +
- +#define ATOMIC_INIT(i) { (i) }
- +
- +/*
- + * __atomic_add()
- + * Add i to v and return the result.
- + */
- +static inline void __atomic_add(int i, atomic_t *v)
- +{
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + vt->counter += i;
- + __atomic_lock_release();
- +}
- +
- +/*
- + * __atomic_sub()
- + * Subtract i from v and return the result.
- + */
- +static inline void __atomic_sub(int i, atomic_t *v)
- +{
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + vt->counter -= i;
- + __atomic_lock_release();
- +}
- +
- +/*
- + * __atomic_add_return()
- + * Add i to v and return the result.
- + *
- + * The implementation here looks rather odd because we appear to be doing
- + * the addition twice. In fact that's exactly what we're doing but with
- + * the ubicom32 instruction set we can do the inner load and add with two
- + * instructions whereas generating both the atomic result and the "ret"
- + * result requires three instructions. The second add is generally only as
- + * costly as a move instruction and in cases where we compare the result
- + * with a constant the compiler can fold two constant values and do a
- + * single instruction, thus saving an instruction overall!
- + *
- + * At the worst we save one instruction inside the atomic lock.
- + */
- +static inline int __atomic_add_return(int i, atomic_t *v)
- +{
- + int ret;
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + ret = vt->counter;
- + vt->counter = ret + i;
- + __atomic_lock_release();
- +
- + return ret + i;
- +}
- +
- +/*
- + * __atomic_sub_return()
- + * Subtract i from v and return the result.
- + *
- + * The implementation here looks rather odd because we appear to be doing
- + * the subtraction twice. In fact that's exactly what we're doing but with
- + * the ubicom32 instruction set we can do the inner load and sub with two
- + * instructions whereas generating both the atomic result and the "ret"
- + * result requires three instructions. The second sub is generally only as
- + * costly as a move instruction and in cases where we compare the result
- + * with a constant the compiler can fold two constant values and do a
- + * single instruction, thus saving an instruction overall!
- + *
- + * At the worst we save one instruction inside the atomic lock.
- + */
- +static inline int __atomic_sub_return(int i, atomic_t *v)
- +{
- + int ret;
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + ret = vt->counter;
- + vt->counter = ret - i;
- + __atomic_lock_release();
- +
- + return ret - i;
- +}
- +
- +/*
- + * PUBLIC API FOR ATOMIC!
- + */
- +#define atomic_add(i,v) (__atomic_add( ((int)i),(v)))
- +#define atomic_sub(i,v) (__atomic_sub( ((int)i),(v)))
- +#define atomic_inc(v) (__atomic_add( 1,(v)))
- +#define atomic_dec(v) (__atomic_sub( 1,(v)))
- +#define atomic_add_return(i,v) (__atomic_add_return( ((int)i),(v)))
- +#define atomic_sub_return(i,v) (__atomic_sub_return( ((int)i),(v)))
- +#define atomic_inc_return(v) (__atomic_add_return( 1,(v)))
- +#define atomic_dec_return(v) (__atomic_sub_return( 1,(v)))
- +#define atomic_inc_and_test(v) (atomic_inc_return(v) == 0)
- +#define atomic_dec_and_test(v) (atomic_dec_return(v) == 0)
- +#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0)
- +#define atomic_sub_and_test(i,v) (atomic_sub_return((i),(v)) == 0)
- +
- +/*
- + * atomic_read()
- + * Acquire the atomic lock and read the variable.
- + */
- +static inline int atomic_read(const atomic_t *v)
- +{
- + int ret;
- + const atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + ret = vt->counter;
- + __atomic_lock_release();
- +
- + return ret;
- +}
- +
- +/*
- + * atomic_set()
- + * Acquire the atomic lock and set the variable.
- + */
- +static inline void atomic_set(atomic_t *v, int i)
- +{
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + vt->counter = i;
- + __atomic_lock_release();
- +}
- +
- +/*
- + * atomic_cmpxchg
- + * Acquire the atomic lock and exchange if current == old.
- + */
- +static inline int atomic_cmpxchg(atomic_t *v, int old, int new)
- +{
- + int prev;
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + prev = vt->counter;
- + if (prev == old) {
- + vt->counter = new;
- + }
- + __atomic_lock_release();
- +
- + return prev;
- +}
- +
- +/*
- + * atomic_xchg()
- + * Acquire the atomic lock and exchange values.
- + */
- +static inline int atomic_xchg(atomic_t *v, int new)
- +{
- + int prev;
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + prev = vt->counter;
- + vt->counter = new;
- + __atomic_lock_release();
- +
- + return prev;
- +}
- +
- +/*
- + * atomic_add_unless()
- + * Acquire the atomic lock and add a unless the value is u.
- + */
- +static inline int atomic_add_unless(atomic_t *v, int a, int u)
- +{
- + int prev;
- + atomic_t *vt = v;
- +
- + __atomic_lock_acquire();
- + prev = vt->counter;
- + if (prev != u) {
- + vt->counter += a;
- + __atomic_lock_release();
- + return 1;
- + }
- +
- + __atomic_lock_release();
- + return 0;
- +}
- +
- +#define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0)
- +
- +#include <asm-generic/atomic.h>
- +
- +/*
- + * The following is not a real function. The compiler should remove the function
- + * call as long as the user does not pass in a size that __xchg and __cmpxchg
- + * are not prepared for. If the user does pass in an unknown size, the user
- + * will get a link time error.
- + *
- + * The no return is to prevent a compiler error that can occur when dealing with
- + * uninitialized variables. Given that the function doesn't exist there is no
- + * net effect (and if it did it would not return).
- + */
- +extern void __xchg_called_with_bad_pointer(void) __attribute__((noreturn));
- +
- +/*
- + * __xchg()
- + * Xchange *ptr for x atomically.
- + *
- + * Must be both locally atomic and atomic on SMP. Ubicom32 does not have an
- + * atomic exchange instruction so we use the global atomic_lock.
- + */
- +static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
- +{
- + unsigned long ret;
- +
- + __atomic_lock_acquire();
- +
- + switch (size) {
- + case 1:
- + ret = *(volatile unsigned char *)ptr;
- + *(volatile unsigned char *)ptr = x;
- + break;
- +
- + case 2:
- + ret = *(volatile unsigned short *)ptr;
- + *(volatile unsigned short *)ptr = x;
- + break;
- +
- + case 4:
- + ret = *(volatile unsigned int *)ptr;
- + *(volatile unsigned int *)ptr = x;
- + break;
- +
- + default:
- + __xchg_called_with_bad_pointer();
- + break;
- + }
- + __atomic_lock_release();
- + return ret;
- +}
- +
- +#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
- +
- +/*
- + * __cmpxchg()
- + * Compare and Xchange *ptr for x atomically.
- + *
- + * Must be both locally atomic and atomic on SMP. Ubicom32 does not have an
- + * atomic exchange instruction so we use the global atomic_lock.
- + */
- +static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, unsigned long next, int size)
- +{
- + unsigned long prev;
- +
- + __atomic_lock_acquire();
- + switch (size) {
- + case 1:
- + prev = *(u8 *)ptr;
- + if (prev == old) {
- + *(u8 *)ptr = (u8)next;
- + }
- + break;
- +
- + case 2:
- + prev = *(u16 *)ptr;
- + if (prev == old) {
- + *(u16 *)ptr = (u16)next;
- + }
- + break;
- +
- + case 4:
- + prev = *(u32 *)ptr;
- + if (prev == old) {
- + *(u32 *)ptr = (u32)next;
- + }
- + break;
- +
- + default:
- + __xchg_called_with_bad_pointer();
- + break;
- + }
- + __atomic_lock_release();
- + return prev;
- +}
- +
- +/*
- + * cmpxchg_local and cmpxchg64_local are atomic wrt current CPU. Always make
- + * them available.
- + */
- +#define cmpxchg_local(ptr, o, n) \
- + ((__typeof__(*(ptr)))__cmpxchg((ptr), (unsigned long)(o), (unsigned long)(n), sizeof(*(ptr))))
- +
- +#define cmpxchg(ptr, o, n) __cmpxchg((ptr), (o), (n), sizeof(*(ptr)))
- +
- +#define smp_mb__before_atomic_inc() asm volatile ("" : : : "memory")
- +#define smp_mb__after_atomic_inc() asm volatile ("" : : : "memory")
- +#define smp_mb__before_atomic_dec() asm volatile ("" : : : "memory")
- +#define smp_mb__after_atomic_dec() asm volatile ("" : : : "memory")
- +
- +#endif /* _ASM_UBICOM32_ATOMIC_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/audio_tio.h linux-2.6.28.10/arch/ubicom32/include/asm/audio_tio.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/audio_tio.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/audio_tio.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,124 @@
- +/*
- + * arch/ubicom32/include/asm/audio_tio.h
- + * AudioTIO include file
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + */
- +
- +#ifndef _AUDIO_TIO_H
- +#define _AUDIO_TIO_H
- +
- +#include <asm/devtree.h>
- +#include <asm/ubi32-pcm.h>
- +
- +#define UBI32_AUDIO_INT_FLAG_MORE_SAMPLES 0x00000001
- +#define UBI32_AUDIO_INT_FLAG_COMMAND 0x00000002
- +
- +/*
- + * Commands the Primary OS sends to the audio device
- + */
- +enum ubi32_audio_command {
- + UBI32_AUDIO_CMD_NONE,
- + UBI32_AUDIO_CMD_START,
- + UBI32_AUDIO_CMD_STOP,
- + UBI32_AUDIO_CMD_PAUSE,
- + UBI32_AUDIO_CMD_RESUME,
- + UBI32_AUDIO_CMD_MUTE,
- + UBI32_AUDIO_CMD_UNMUTE,
- + UBI32_AUDIO_CMD_SETUP,
- + UBI32_AUDIO_CMD_ENABLE,
- + UBI32_AUDIO_CMD_DISABLE,
- +};
- +
- +/*
- + * Flag bits passed in the registers
- + */
- +#define UBI32_CMD_SETUP_FLAG_LE (1 << 0) /* Use Little Endian Mode */
- +
- +/*
- + * Status bits that audio device can set to indicate reason
- + * for interrupting the Primary OS
- + */
- +#define UBI32_AUDIO_STATUS_PLAY_DMA0_REQUEST (1 << 0) /* Audio device needs samples in DMA0 for playback */
- +#define UBI32_AUDIO_STATUS_PLAY_DMA1_REQUEST (1 << 1) /* Audio device needs samples in DMA1 for playback */
- +
- +struct ubi32_audio_dma {
- + /*
- + * NOTE: The active flag shall only be SET by the producer and CLEARED
- + * by the consumer, NEVER the other way around. For playback, the
- + * Primary OS sets this flag and ipAudioTIO clears it.
- + *
- + * The producer shall not modify the ptr or ctr fields when the transfer
- + * is marked as active, as these are used by the consumer to do the
- + * transfer.
- + */
- + volatile uint32_t active; /* Nonzero if data in ptr/ctr ready to be transferred */
- + //volatile u32_t active; /* Nonzero if data in ptr/ctr ready to be transferred */
- + volatile void *ptr; /* Pointer to data to be transferred */
- + volatile uint32_t ctr; /* Counter: number of data units to transfer */
- + //volatile u32_t ctr; /* Counter: number of data units to transfer */
- +};
- +
- +#define AUDIOTIONODE_CAP_BE (1 << 0)
- +#define AUDIOTIONODE_CAP_LE (1 << 1)
- +
- +/*
- + * Resource indices used to access IRQs via platform_get_resource
- + */
- +#define AUDIOTIO_MEM_RESOURCE 0
- +#define AUDIOTIO_TX_IRQ_RESOURCE 0
- +#define AUDIOTIO_RX_IRQ_RESOURCE 1
- +
- +#define AUDIOTIONODE_VERSION 5
- +struct audiotionode {
- + struct devtree_node dn;
- + uint32_t version; /* Version of this node */
- + struct audiotioregs *regs;
- +};
- +
- +#define AUDIOTIOREGS_VERSION 3
- +struct audiotioregs {
- + uint32_t version;
- + uint32_t caps; /* Capabilities of the driver */
- + u32_t *sample_rates; /* Sample Rates supported by this driver */
- + u32_t n_sample_rates; /* Number of sample rates supported by this driver */
- + u32_t channel_mask; /* The channel configs supported by this driver (bit 1 = 1 channel, etc) */
- + volatile uint32_t int_flags; /* Reason for interrupting audio device */
- + volatile enum ubi32_audio_command command; /* Command from Primary OS */
- + volatile uint32_t flags; /* Flag bits for this command */
- + volatile uint32_t channels; /* Number of channels in stream */
- + volatile uint32_t sample_rate; /* Sample rate */
- + volatile uint32_t status; /* Status bits sent from AudioTIO to Primary OS */
- + volatile void *current_read_pos; /* Position of next sample to be removed from Primary OS sample buffer */
- +
- + /*
- + * These are the transfer requests. They are used in alternating
- + * order so that when ipAudioTIO is processing one request, the
- + * Primary OS can fill in the other one.
- + *
- + * NOTE: The active bit shall always be SET by the producer and
- + * CLEARED by the consumer, NEVER the other way around.
- + */
- + struct ubi32_audio_dma playback_xfer_requests[2];
- +};
- +
- +extern struct platform_device * __init audio_tio_alloc(const char *driver_name, const char *node_name, int priv_size);
- +
- +#define audio_tio_priv(pdev) (((struct ubi32pcm_platform_data *)(((struct platform_device *)(pdev))->dev.platform_data))->priv_data)
- +#endif
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/auxvec.h linux-2.6.28.10/arch/ubicom32/include/asm/auxvec.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/auxvec.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/auxvec.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,32 @@
- +/*
- + * arch/ubicom32/include/asm/auxvec.h
- + * Symbolic values for the entries in the auxiliary table
- + * put on the initial stack.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_AUXVEC_H
- +#define _ASM_UBICOM32_AUXVEC_H
- +
- +#endif /* _ASM_UBICOM32_AUXVEC_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bitops.h linux-2.6.28.10/arch/ubicom32/include/asm/bitops.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bitops.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/bitops.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,171 @@
- +/*
- + * arch/ubicom32/include/asm/bitops.h
- + * Bit manipulation definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_BITOPS_H
- +#define _ASM_UBICOM32_BITOPS_H
- +
- +/*
- + * Copyright 1992, Linus Torvalds.
- + */
- +
- +#include <linux/compiler.h>
- +#include <asm/byteorder.h> /* swab32 */
- +
- +#ifdef __KERNEL__
- +
- +#ifndef _LINUX_BITOPS_H
- +#error only <linux/bitops.h> can be included directly
- +#endif
- +
- +#include <asm-generic/bitops/ffs.h>
- +#include <asm-generic/bitops/__ffs.h>
- +
- +#include <asm-generic/bitops/sched.h>
- +#include <asm-generic/bitops/ffz.h>
- +
- +#include <asm/ubicom32-common.h>
- +
- +static inline void set_bit(int bit, volatile unsigned long *p)
- +{
- + unsigned long mask = 1UL << (bit & 31);
- +
- + p += bit >> 5;
- +
- + __atomic_lock_acquire();
- + *p |= mask;
- + __atomic_lock_release();
- +}
- +
- +static inline void clear_bit(int bit, volatile unsigned long *p)
- +{
- + unsigned long mask = 1UL << (bit & 31);
- +
- + p += bit >> 5;
- +
- + __atomic_lock_acquire();
- + *p &= ~mask;
- + __atomic_lock_release();
- +}
- +
- +/*
- + * 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 change_bit(int bit, volatile unsigned long *p)
- +{
- + unsigned long mask = 1UL << (bit & 31);
- +
- + p += bit >> 5;
- +
- + __atomic_lock_acquire();
- + *p ^= mask;
- + __atomic_lock_release();
- +}
- +
- +static inline int test_and_set_bit(int bit, volatile unsigned long *p)
- +{
- + unsigned int res;
- + unsigned long mask = 1UL << (bit & 31);
- +
- + p += bit >> 5;
- +
- + __atomic_lock_acquire();
- + res = *p;
- + *p = res | mask;
- + __atomic_lock_release();
- +
- + return res & mask;
- +}
- +
- +static inline int test_and_clear_bit(int bit, volatile unsigned long *p)
- +{
- + unsigned int res;
- + unsigned long mask = 1UL << (bit & 31);
- +
- + p += bit >> 5;
- +
- + __atomic_lock_acquire();
- + res = *p;
- + *p = res & ~mask;
- + __atomic_lock_release();
- +
- + return res & mask;
- +}
- +
- +static inline int test_and_change_bit(int bit, volatile unsigned long *p)
- +{
- + unsigned int res;
- + unsigned long mask = 1UL << (bit & 31);
- +
- + p += bit >> 5;
- +
- + __atomic_lock_acquire();
- + res = *p;
- + *p = res ^ mask;
- + __atomic_lock_release();
- +
- + return res & mask;
- +}
- +
- +#include <asm-generic/bitops/non-atomic.h>
- +
- +/*
- + * 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),(addr)) : __test_bit((nr),(addr)))
- +
- +#include <asm-generic/bitops/find.h>
- +#include <asm-generic/bitops/hweight.h>
- +#include <asm-generic/bitops/lock.h>
- +
- +#include <asm-generic/bitops/ext2-non-atomic.h>
- +#include <asm-generic/bitops/ext2-atomic.h>
- +#include <asm-generic/bitops/minix.h>
- +
- +#endif /* __KERNEL__ */
- +
- +#include <asm-generic/bitops/fls.h>
- +#include <asm-generic/bitops/fls64.h>
- +
- +#endif /* _ASM_UBICOM32_BITOPS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/board.h linux-2.6.28.10/arch/ubicom32/include/asm/board.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/board.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/board.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,34 @@
- +/*
- + * arch/ubicom32/include/asm/board.h
- + * Board init and revision definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_BOARD_H
- +#define _ASM_UBICOM32_BOARD_H
- +
- +extern const char *board_get_revision(void);
- +extern void __init board_init(void);
- +
- +#endif /* _ASM_UBICOM32_BOARD_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bootargs.h linux-2.6.28.10/arch/ubicom32/include/asm/bootargs.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bootargs.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/bootargs.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,34 @@
- +/*
- + * arch/ubicom32/include/asm/bootargs.h
- + * Kernel command line via the devtree API.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_BOOTARGS_H
- +#define _ASM_UBICOM32_BOOTARGS_H
- +
- +extern const char *bootargs_get_cmdline(void);
- +extern void __init bootargs_init(void);
- +
- +#endif /* _ASM_UBICOM32_BOOTARGS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bootinfo.h linux-2.6.28.10/arch/ubicom32/include/asm/bootinfo.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bootinfo.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/bootinfo.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,34 @@
- +/*
- + * arch/ubicom32/include/asm/bootinfo.h
- + * Definitions of firmware boot parameters passed to the kernel.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_BOOTINFO_H
- +#define _ASM_UBICOM32_BOOTINFO_H
- +
- +/* Nothing for ubicom32 */
- +
- +#endif /* _ASM_UBICOM32_BOOTINFO_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bug.h linux-2.6.28.10/arch/ubicom32/include/asm/bug.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bug.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/bug.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,53 @@
- +/*
- + * arch/ubicom32/include/asm/bug.h
- + * Generic bug.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_BUG_H
- +#define _ASM_UBICOM32_BUG_H
- +
- +#include <linux/kernel.h>
- +#include <asm/thread.h>
- +
- +#if defined(CONFIG_STOP_ON_BUG)
- +/*
- + * __BUG_ON()
- + * Stall all threads to enable debugging.
- + */
- +static inline void __BUG_ON(unsigned long c)
- +{
- + if (unlikely(c)) {
- + THREAD_STALL;
- + }
- + return;
- +}
- +
- +#define BUG_ON(c) __BUG_ON((unsigned long)(c))
- +#define HAVE_ARCH_BUG_ON
- +#endif
- +
- +#include <asm-generic/bug.h>
- +
- +#endif /* _ASM_UBICOM32_BUG_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/bugs.h linux-2.6.28.10/arch/ubicom32/include/asm/bugs.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/bugs.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/bugs.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,44 @@
- +/*
- + * arch/ubicom32/include/asm/bugs.h
- + * Definition of check_bugs() for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 1994 Linus Torvalds
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +/*
- + * This is included by init/main.c to check for architecture-dependent bugs.
- + *
- + * Needs:
- + * void check_bugs(void);
- + */
- +
- +#ifndef _ASM_UBICOM32_BUGS_H
- +#define _ASM_UBICOM32_BUGS_H
- +
- +static void check_bugs(void)
- +{
- +}
- +
- +#endif /* _ASM_UBICOM32_BUGS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/byteorder.h linux-2.6.28.10/arch/ubicom32/include/asm/byteorder.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/byteorder.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/byteorder.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,48 @@
- +/*
- + * arch/ubicom32/include/asm/byteorder.h
- + * Byte order swapping utility routines.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_BYTEORDER_H
- +#define _ASM_UBICOM32_BYTEORDER_H
- +
- +#include <linux/types.h>
- +
- +#if defined(__GNUC__) && !defined(__STRICT_ANSI__) || defined(__KERNEL__)
- +# define __BYTEORDER_HAS_U64__
- +# define __SWAB_64_THRU_32__
- +#endif
- +
- +#if defined(IP7000) || defined(IP7000_REV2)
- +
- +#define __arch__swab16 __builtin_ubicom32_swapb_2
- +#define __arch__swab32 __builtin_ubicom32_swapb_4
- +
- +#endif /* IP7000 */
- +
- +#include <linux/byteorder/big_endian.h>
- +
- +#endif /* _ASM_UBICOM32_BYTEORDER_H */
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cachectl.h linux-2.6.28.10/arch/ubicom32/include/asm/cachectl.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cachectl.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/cachectl.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,39 @@
- +/*
- + * arch/ubicom32/include/asm/cachectl.h
- + * Ubicom32 cache control definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_CACHECTL_H
- +#define _ASM_UBICOM32_CACHECTL_H
- +
- +#include <asm/ip5000.h>
- +
- +/*
- + * mem_cache_control()
- + * Special cache control operation
- + */
- +extern void mem_cache_control(unsigned long cc, unsigned long begin_addr, unsigned long end_addr, unsigned long op);
- +
- +#endif /* _ASM_UBICOM32_CACHECTL_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cacheflush.h linux-2.6.28.10/arch/ubicom32/include/asm/cacheflush.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cacheflush.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/cacheflush.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,104 @@
- +/*
- + * arch/ubicom32/include/asm/cacheflush.h
- + * Cache flushing definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_CACHEFLUSH_H
- +#define _ASM_UBICOM32_CACHEFLUSH_H
- +
- +/*
- + * (C) Copyright 2000-2004, Greg Ungerer <[email protected]>
- + */
- +#include <linux/mm.h>
- +#include <asm/cachectl.h>
- +#include <asm/ip5000.h>
- +
- +#define flush_cache_all() __flush_cache_all()
- +#define flush_cache_mm(mm) do { } while (0)
- +#define flush_cache_dup_mm(mm) do { } while (0)
- +#define flush_cache_range(vma, start, end) __flush_cache_all()
- +#define flush_cache_page(vma, vmaddr) do { } while (0)
- +#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_dcache_range(start, end) \
- +do { \
- + /* Flush the data cache and invalidate the I cache. */ \
- + local_irq_disable(); \
- + mem_cache_control(DCCR_BASE, start, end, CCR_CTRL_FLUSH_ADDR); \
- + mem_cache_control(ICCR_BASE, start, end, CCR_CTRL_INV_ADDR); \
- + local_irq_enable(); \
- +} while (0)
- +
- +#define flush_icache_range(start, end) \
- +do { \
- + /* Flush the data cache and invalidate the I cache. */ \
- + local_irq_disable(); \
- + mem_cache_control(DCCR_BASE, start, end, CCR_CTRL_FLUSH_ADDR); \
- + mem_cache_control(ICCR_BASE, start, end, CCR_CTRL_INV_ADDR); \
- + local_irq_enable(); \
- +} while (0)
- +
- +#define flush_icache_page(vma,pg) do { } while (0)
- +#define flush_icache_user_range(vma,pg,adr,len) do { } while (0)
- +#define flush_cache_vmap(start, end) do { } while (0)
- +#define flush_cache_vunmap(start, end) 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)
- +
- +/*
- + * Cache handling for IP5000
- + */
- +extern inline void mem_cache_invalidate_all(unsigned long cc)
- +{
- + asm volatile (
- + " bset "D(CCR_CTRL)"(%0), "D(CCR_CTRL)"(%0), #"D(CCR_CTRL_RESET)" \n\t"
- + " nop \n\t"
- + " bclr "D(CCR_CTRL)"(%0), "D(CCR_CTRL)"(%0), #"D(CCR_CTRL_RESET)" \n\t"
- + " pipe_flush 0 \n\t"
- + :
- + : "a"(cc)
- + : "cc"
- + );
- +}
- +
- +static inline void __flush_cache_all(void)
- +{
- + /*
- + * Flush Icache
- + */
- + mem_cache_invalidate_all(ICCR_BASE);
- +
- + /*
- + * Flush Dcache
- + */
- + mem_cache_invalidate_all(DCCR_BASE);
- +}
- +
- +#endif /* _ASM_UBICOM32_CACHEFLUSH_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cache.h linux-2.6.28.10/arch/ubicom32/include/asm/cache.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cache.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/cache.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,40 @@
- +/*
- + * arch/ubicom32/include/asm/cache.h
- + * Cache line definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_CACHE_H
- +#define _ASM_UBICOM32_CACHE_H
- +
- +/*
- + * bytes per L1 cache line
- + */
- +#define L1_CACHE_SHIFT 5
- +#define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT)
- +
- +#define __cacheline_aligned
- +#define ____cacheline_aligned
- +
- +#endif /* _ASM_UBICOM32_CACHE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/checksum.h linux-2.6.28.10/arch/ubicom32/include/asm/checksum.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/checksum.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/checksum.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,149 @@
- +/*
- + * arch/ubicom32/include/asm/checksum.h
- + * Checksum utilities for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_CHECKSUM_H
- +#define _ASM_UBICOM32_CHECKSUM_H
- +
- +#include <linux/in6.h>
- +
- +/*
- + * computes the checksum of a memory block at buff, length len,
- + * and adds in "sum" (32-bit)
- + *
- + * returns a 32-bit number suitable for feeding into itself
- + * or csum_tcpudp_magic
- + *
- + * this function must be called with even lengths, except
- + * for the last fragment, which may be odd
- + *
- + * it's best to have buff aligned on a 32-bit boundary
- + */
- +__wsum csum_partial(const void *buff, int len, __wsum sum);
- +
- +/*
- + * the same as csum_partial, but copies from src while it
- + * checksums
- + *
- + * here even more important to align src and dst on a 32-bit (or even
- + * better 64-bit) boundary
- + */
- +
- +__wsum csum_partial_copy_nocheck(const void *src, void *dst,
- + int len, __wsum 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 __wsum csum_partial_copy_from_user(const void __user *src,
- + void *dst, int len, __wsum sum, int *csum_err);
- +
- +__sum16 ip_fast_csum(const void *iph, unsigned int ihl);
- +
- +/*
- + * Fold a partial checksum
- + */
- +
- +static inline __sum16 csum_fold(__wsum sum)
- +{
- + asm volatile (
- + " lsr.4 d15, %0, #16 \n\t"
- + " bfextu %0, %0, #16 \n\t"
- + " add.4 %0, d15, %0 \n\t"
- + " lsr.4 d15, %0, #16 \n\t"
- + " bfextu %0, %0, #16 \n\t"
- + " add.4 %0, d15, %0 \n\t"
- + : "=&d" (sum)
- + : "0"(sum)
- + : "d15"
- + );
- + return (__force __sum16)~sum;
- +}
- +
- +
- +/*
- + * computes the checksum of the TCP/UDP pseudo-header
- + * returns a 16-bit checksum, already complemented
- + */
- +
- +static inline __wsum
- +csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len,
- + unsigned short proto, __wsum sum)
- +{
- + asm volatile (
- + " add.4 %0, %2, %0 \n\t"
- + " addc %0, %3, %0 \n\t"
- + " addc %0, %4, %0 \n\t"
- + " addc %0, %5, %0 \n\t"
- + " addc %0, #0, %0 \n\t"
- + : "=&d" (sum)
- + : "0"(sum), "r" (saddr), "r" (daddr), "r" (len), "r"(proto)
- + );
- + return sum;
- +}
- +
- +static inline __sum16
- +csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len,
- + unsigned short proto, __wsum sum)
- +{
- + return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
- +}
- +
- +/*
- + * this routine is used for miscellaneous IP-like checksums, mainly
- + * in icmp.c
- + */
- +extern __sum16 ip_compute_csum(const void *buff, int len);
- +
- +#define _HAVE_ARCH_IPV6_CSUM
- +
- +static __inline__ __sum16
- +csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr,
- + __u32 len, unsigned short proto, __wsum sum)
- +{
- + asm volatile (
- + " add.4 %0, 0(%2), %0 \n\t"
- + " addc %0, 4(%2), %0 \n\t"
- + " addc %0, 8(%2), %0 \n\t"
- + " addc %0, 12(%2), %0 \n\t"
- + " addc %0, 0(%3), %0 \n\t"
- + " addc %0, 4(%3), %0 \n\t"
- + " addc %0, 8(%3), %0 \n\t"
- + " addc %0, 12(%3), %0 \n\t"
- + " addc %0, %4, %0 \n\t"
- + " addc %0, #0, %0 \n\t"
- + : "=&d" (sum)
- + : "0" (sum), "a" (saddr), "a" (daddr), "d" (len + proto)
- + );
- + return csum_fold(sum);
- +}
- +
- +#endif /* _ASM_UBICOM32_CHECKSUM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cpu.h linux-2.6.28.10/arch/ubicom32/include/asm/cpu.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cpu.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/cpu.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,45 @@
- +/*
- + * arch/ubicom32/include/asm/cpu.h
- + * CPU definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2004-2005 ARM Ltd.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_CPU_H
- +#define _ASM_UBICOM32_CPU_H
- +
- +#include <linux/percpu.h>
- +
- +struct cpuinfo_ubicom32 {
- + unsigned long tid; /* Hardware thread number */
- +
- +#ifdef CONFIG_SMP
- + volatile unsigned long ipi_pending; /* Bit map of operations to execute */
- + unsigned long ipi_count; /* Number of IPI(s) taken on this cpu */
- +#endif
- +};
- +
- +DECLARE_PER_CPU(struct cpuinfo_ubicom32, cpu_data);
- +
- +#endif /* _ASM_UBICOM32_CPU_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/cputime.h linux-2.6.28.10/arch/ubicom32/include/asm/cputime.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/cputime.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/cputime.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/cputime.h
- + * Generic cputime.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_CPUTIME_H
- +#define _ASM_UBICOM32_CPUTIME_H
- +
- +#include <asm-generic/cputime.h>
- +
- +#endif /* _ASM_UBICOM32_CPUTIME_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/current.h linux-2.6.28.10/arch/ubicom32/include/asm/current.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/current.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/current.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,44 @@
- +/*
- + * arch/ubicom32/include/asm/current.h
- + * Definition of get_current() for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * (C) Copyright 2000, Lineo, David McCullough <[email protected]>
- + * (C) Copyright 2002, Greg Ungerer ([email protected])
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_CURRENT_H
- +#define _ASM_UBICOM32_CURRENT_H
- +
- +#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 /* _ASM_UBICOM32_CURRENT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/delay.h linux-2.6.28.10/arch/ubicom32/include/asm/delay.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/delay.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/delay.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,75 @@
- +/*
- + * arch/ubicom32/include/asm/delay.h
- + * Definition of delay routines for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_DELAY_H
- +#define _ASM_UBICOM32_DELAY_H
- +
- +#include <asm/param.h>
- +#include <asm/ip5000.h>
- +
- +static inline void __delay(unsigned long loops)
- +{
- + if (loops == 0) {
- + return;
- + }
- +
- + asm volatile (
- + "1: add.4 %0, #-1, %0 \n\t"
- + " jmpne.t 1b \n\t"
- + : "+d" (loops)
- + );
- +}
- +
- +/*
- + * Ubicom32 processor uses fixed 12MHz external OSC.
- + * So we use that as reference to count 12 cycles/us
- + */
- +
- +extern unsigned long loops_per_jiffy;
- +
- +static inline void _udelay(unsigned long usecs)
- +{
- +#if defined(CONFIG_UBICOM32_V4) || defined(CONFIG_UBICOM32_V3)
- + asm volatile (
- + " add.4 d15, 0(%0), %1 \n\t"
- + " sub.4 #0, 0(%0), d15 \n\t"
- + " jmpmi.w.f .-4 \n\t"
- + :
- + : "a"(TIMER_BASE + TIMER_MPTVAL), "d"(usecs * (12000000/1000000))
- + : "d15"
- + );
- +#else
- + BUG();
- +#endif
- +}
- +
- +/*
- + * Moved the udelay() function into library code, no longer inlined.
- + */
- +extern void udelay(unsigned long usecs);
- +
- +#endif /* _ASM_UBICOM32_DELAY_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/device.h linux-2.6.28.10/arch/ubicom32/include/asm/device.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/device.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/device.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,35 @@
- +/*
- + * arch/ubicom32/include/asm/device.h
- + * Generic device.h for Ubicom32 architecture.
- + *
- + * Used for arch specific extensions to struct device
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_DEVICE_H
- +#define _ASM_UBICOM32_DEVICE_H
- +
- +#include <asm-generic/device.h>
- +
- +#endif /* _ASM_UBICOM32_DEVICE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/devtree.h linux-2.6.28.10/arch/ubicom32/include/asm/devtree.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/devtree.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/devtree.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,52 @@
- +/*
- + * arch/ubicom32/include/asm/devtree.h
- + * Device Tree Header File (Shared between ultra and the Host OS)
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_DEVTREE_H
- +#define _ASM_UBICOM32_DEVTREE_H
- +
- +#define DEVTREE_MAX_NAME 32
- +#define DEVTREE_IRQ_NONE 0xff
- +#define DEVTREE_IRQ_DONTCARE 0xff
- +#define DEVTREE_NODE_MAGIC 0x10203040
- +
- +struct devtree_node {
- + struct devtree_node *next;
- + unsigned char sendirq;
- + unsigned char recvirq;
- + char name[DEVTREE_MAX_NAME];
- + unsigned int magic;
- +};
- +
- +extern struct devtree_node *devtree;
- +extern struct devtree_node *devtree_find_by_irq(uint8_t sendirq, uint8_t recvirq);
- +extern struct devtree_node *devtree_find_node(const char *str);
- +extern struct devtree_node *devtree_find_next(struct devtree_node **cur);
- +extern int devtree_irq(struct devtree_node *dn, unsigned char *sendirq, unsigned char *recvirq);
- +extern void devtree_print(void);
- +
- +#endif /* _ASM_UBICOM32_DEVTREE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/div64.h linux-2.6.28.10/arch/ubicom32/include/asm/div64.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/div64.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/div64.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/div64.h
- + * Generic div64.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_DIV64_H
- +#define _ASM_UBICOM32_DIV64_H
- +
- +#include <asm-generic/div64.h>
- +
- +#endif /* _ASM_UBICOM32_DIV64_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/dma.h linux-2.6.28.10/arch/ubicom32/include/asm/dma.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/dma.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/dma.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,34 @@
- +/*
- + * arch/ubicom32/include/asm/dma.h
- + * DMA definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_DMA_H
- +#define _ASM_UBICOM32_DMA_H
- +
- +/* Nothing so far */
- +#define MAX_DMA_ADDRESS 0x00 /* This is quite suspicious */
- +
- +#endif /* _ASM_UBICOM32_DMA_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/dma-mapping.h linux-2.6.28.10/arch/ubicom32/include/asm/dma-mapping.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/dma-mapping.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/dma-mapping.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,34 @@
- +/*
- + * arch/ubicom32/include/asm/dma-mapping.h
- + * Generic dma-mapping.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_DMA_MAPPING_H
- +#define _ASM_UBICOM32_DMA_MAPPING_H
- +
- +#include <linux/scatterlist.h>
- +#include <asm-generic/dma-mapping.h>
- +
- +#endif /* _ASM_UBICOM32_DMA_MAPPING_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/elf.h linux-2.6.28.10/arch/ubicom32/include/asm/elf.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/elf.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/elf.h 2009-08-18 22:35:42.571202890 +0300
- @@ -0,0 +1,167 @@
- +/*
- + * arch/ubicom32/include/asm/elf.h
- + * Definitions for elf executable format for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_ELF_H
- +#define _ASM_UBICOM32_ELF_H
- +
- +/*
- + * ELF register definitions..
- + */
- +
- +#include <asm/ptrace.h>
- +#include <asm/user.h>
- +
- +/*
- + * Processor specific flags for the ELF header e_flags field.
- + */
- +#define EF_UBICOM32_V3 0x00000001 /* -fmarch=ubicom32v3 */
- +#define EF_UBICOM32_V4 0x00000002 /* -fmarch=ubicom32v4 */
- +#define EF_UBICOM32_PIC 0x80000000 /* -fpic */
- +#define EF_UBICOM32_FDPIC 0x40000000 /* -mfdpic */
- +
- +/*
- + * Ubicom32 ELF relocation types
- + */
- +#define R_UBICOM32_NONE 0
- +#define R_UBICOM32_16 1
- +#define R_UBICOM32_32 2
- +#define R_UBICOM32_LO16 3
- +#define R_UBICOM32_HI16 4
- +#define R_UBICOM32_21_PCREL 5
- +#define R_UBICOM32_24_PCREL 6
- +#define R_UBICOM32_HI24 7
- +#define R_UBICOM32_LO7_S 8
- +#define R_UBICOM32_LO7_2_S 9
- +#define R_UBICOM32_LO7_4_S 10
- +#define R_UBICOM32_LO7_D 11
- +#define R_UBICOM32_LO7_2_D 12
- +#define R_UBICOM32_LO7_4_D 13
- +#define R_UBICOM32_32_HARVARD 14
- +#define R_UBICOM32_LO7_CALLI 15
- +#define R_UBICOM32_LO16_CALLI 16
- +#define R_UBICOM32_GOT_HI24 17
- +#define R_UBICOM32_GOT_LO7_S 18
- +#define R_UBICOM32_GOT_LO7_2_S 19
- +#define R_UBICOM32_GOT_LO7_4_S 20
- +#define R_UBICOM32_GOT_LO7_D 21
- +#define R_UBICOM32_GOT_LO7_2_D 22
- +#define R_UBICOM32_GOT_LO7_4_D 23
- +#define R_UBICOM32_FUNCDESC_GOT_HI24 24
- +#define R_UBICOM32_FUNCDESC_GOT_LO7_S 25
- +#define R_UBICOM32_FUNCDESC_GOT_LO7_2_S 26
- +#define R_UBICOM32_FUNCDESC_GOT_LO7_4_S 27
- +#define R_UBICOM32_FUNCDESC_GOT_LO7_D 28
- +#define R_UBICOM32_FUNCDESC_GOT_LO7_2_D 29
- +#define R_UBICOM32_FUNCDESC_GOT_LO7_4_D 30
- +#define R_UBICOM32_GOT_LO7_CALLI 31
- +#define R_UBICOM32_FUNCDESC_GOT_LO7_CALLI 32
- +#define R_UBICOM32_FUNCDESC_VALUE 33
- +#define R_UBICOM32_FUNCDESC 34
- +#define R_UBICOM32_GOTOFFSET_LO 35
- +#define R_UBICOM32_GOTOFFSET_HI 36
- +#define R_UBICOM32_FUNCDESC_GOTOFFSET_LO 37
- +#define R_UBICOM32_FUNCDESC_GOTOFFSET_HI 38
- +#define R_UBICOM32_GNU_VTINHERIT 200
- +#define R_UBICOM32_GNU_VTENTRY 201
- +
- +typedef unsigned long elf_greg_t;
- +
- +#define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t))
- +typedef elf_greg_t elf_gregset_t[ELF_NGREG];
- +
- +typedef struct user_ubicom32fp_struct 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_UBICOM32)
- +
- +#define elf_check_fdpic(x) ((x)->e_flags & EF_UBICOM32_FDPIC)
- +
- +#define elf_check_const_displacement(x) ((x)->e_flags & EF_UBICOM32_PIC)
- +
- +/*
- + * These are used to set parameters in the core dumps.
- + */
- +#define ELF_CLASS ELFCLASS32
- +#define ELF_DATA ELFDATA2MSB
- +#define ELF_ARCH EM_UBICOM32
- +
- +/* For SVR4/m68k the function pointer to be registered with `atexit' is
- + passed in %a1. Although my copy of the ABI has no such statement, it
- + is actually used on ASV. */
- +#define ELF_PLAT_INIT(_r, load_addr) _r->a1 = 0
- +
- +#define ELF_FDPIC_PLAT_INIT(_regs, _exec_map_addr, _interp_map_addr, \
- + _dynamic_addr) \
- + do { \
- + _regs->dn[1] = _exec_map_addr; \
- + _regs->dn[2] = _interp_map_addr; \
- + _regs->dn[3] = _dynamic_addr; \
- + _regs->an[1] = 0; /* dl_fini will be set by ldso */ \
- + } while (0)
- +
- +#define USE_ELF_CORE_DUMP
- +#define ELF_EXEC_PAGESIZE 4096
- +
- +#ifdef __KERNEL__
- +#ifdef CONFIG_UBICOM32_V4
- +#define ELF_FDPIC_CORE_EFLAGS (EF_UBICOM32_FDPIC | EF_UBICOM32_V4)
- +#elif defined CONFIG_UBICOM32_V3
- +#define ELF_FDPIC_CORE_EFLAGS (EF_UBICOM32_FDPIC | EF_UBICOM32_V3)
- +#else
- +#error Unknown/Unsupported ubicom32 architecture.
- +#endif
- +#endif
- +
- +/* 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
- +
- +/*
- + * For Ubicom32, the elf_gregset_t and struct pt_regs are the same size
- + * data structure so a copy is performed instead of providing the
- + * ELF_CORE_COPY_REGS macro.
- + */
- +
- +/* 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)
- +
- +#define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX)
- +
- +#endif /* _ASM_UBICOM32_ELF_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/emergency-restart.h linux-2.6.28.10/arch/ubicom32/include/asm/emergency-restart.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/emergency-restart.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/emergency-restart.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/emergency-restart.h
- + * Generic emergency-restart.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_EMERGENCY_RESTART_H
- +#define _ASM_UBICOM32_EMERGENCY_RESTART_H
- +
- +#include <asm-generic/emergency-restart.h>
- +
- +#endif /* _ASM_UBICOM32_EMERGENCY_RESTART_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/entry.h linux-2.6.28.10/arch/ubicom32/include/asm/entry.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/entry.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/entry.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,34 @@
- +/*
- + * arch/ubicom32/include/asm/entry.h
- + * Entry register/stack definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_ENTRY_H
- +#define _ASM_UBICOM32_ENTRY_H
- +
- +#include <asm/setup.h>
- +#include <asm/page.h>
- +
- +#endif /* _ASM_UBICOM32_ENTRY_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/errno.h linux-2.6.28.10/arch/ubicom32/include/asm/errno.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/errno.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/errno.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/errno.h
- + * Generic errno.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_ERRNO_H
- +#define _ASM_UBICOM32_ERRNO_H
- +
- +#include <asm-generic/errno.h>
- +
- +#endif /* _ASM_UBICOM32_ERRNO_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/fb.h linux-2.6.28.10/arch/ubicom32/include/asm/fb.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/fb.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/fb.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,39 @@
- +/*
- + * arch/ubicom32/include/asm/fb.h
- + * Definition of fb_is_primary_device() for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_FB_H
- +#define _ASM_UBICOM32_FB_H
- +#include <linux/fb.h>
- +
- +#define fb_pgprotect(...) do {} while (0)
- +
- +static inline int fb_is_primary_device(struct fb_info *info)
- +{
- + return 0;
- +}
- +
- +#endif /* _ASM_UBICOM32_FB_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/fcntl.h linux-2.6.28.10/arch/ubicom32/include/asm/fcntl.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/fcntl.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/fcntl.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,38 @@
- +/*
- + * arch/ubicom32/include/asm/fcntl.h
- + * File control bit definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_FCNTL_H
- +#define _ASM_UBICOM32_FCNTL_H
- +
- +#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
- +
- +#include <asm-generic/fcntl.h>
- +
- +#endif /* _ASM_UBICOM32_FCNTL_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/flat.h linux-2.6.28.10/arch/ubicom32/include/asm/flat.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/flat.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/flat.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,73 @@
- +/*
- + * arch/ubicom32/include/asm/flat.h
- + * Definitions to support flat-format executables.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_FLAT_H
- +#define _ASM_UBICOM32_FLAT_H
- +
- +#define ARCH_FLAT_ALIGN 0x80
- +#define ARCH_FLAT_ALIGN_TEXT 1
- +
- +#define R_UBICOM32_32 2
- +#define R_UBICOM32_HI24 7
- +#define R_UBICOM32_LO7_S 8
- +#define R_UBICOM32_LO7_2_S 9
- +#define R_UBICOM32_LO7_4_S 10
- +#define R_UBICOM32_LO7_D 11
- +#define R_UBICOM32_LO7_2_D 12
- +#define R_UBICOM32_LO7_4_D 13
- +#define R_UBICOM32_LO7_CALLI 15
- +#define R_UBICOM32_LO16_CALLI 16
- +
- +extern void ubicom32_flat_put_addr_at_rp(unsigned long *rp, u32_t val, u32_t rval, unsigned long *p);
- +extern unsigned long ubicom32_flat_get_addr_from_rp(unsigned long *rp, u32_t relval, u32_t flags, unsigned long *p);
- +
- +#define flat_stack_align(sp) /* nothing needed */
- +#define flat_argvp_envp_on_stack() 1
- +#define flat_old_ram_flag(flags) (flags)
- +#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
- +#define flat_get_addr_from_rp(rp, relval, flags, p) (ubicom32_flat_get_addr_from_rp(rp, relval,flags, p))
- +#define flat_put_addr_at_rp(rp, val, relval) do {ubicom32_flat_put_addr_at_rp(rp, val, relval, &persistent);} while(0)
- +#define flat_get_relocate_addr(rel) ((persistent) ? (persistent & 0x07ffffff) : (rel & 0x07ffffff))
- +
- +static inline int flat_set_persistent(unsigned int relval, unsigned long *p)
- +{
- + if (*p) {
- + return 0;
- + } else {
- + if ((relval >> 27) != R_UBICOM32_32) {
- + /*
- + * Something other than UBICOM32_32. The next entry has the relocation.
- + */
- + *p = relval;
- + return 1;
- + }
- + }
- + return 0;
- +}
- +
- +#endif /* _ASM_UBICOM32_FLAT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/fpu.h linux-2.6.28.10/arch/ubicom32/include/asm/fpu.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/fpu.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/fpu.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,37 @@
- +/*
- + * arch/ubicom32/include/asm/fpu.h
- + * Floating point state definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_FPU_H
- +#define _ASM_UBICOM32_FPU_H
- +
- +/*
- + * MAX floating point unit state size (FSAVE/FRESTORE)
- + */
- +/* No FP unit present then... */
- +#define FPSTATESIZE (2) /* dummy size */
- +
- +#endif /* _ASM_UBICOM32_FPU_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/futex.h linux-2.6.28.10/arch/ubicom32/include/asm/futex.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/futex.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/futex.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/futex.h
- + * Generic futex.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_FUTEX_H
- +#define _ASM_UBICOM32_FUTEX_H
- +
- +#include <asm-generic/futex.h>
- +
- +#endif /* _ASM_UBICOM32_FUTEX_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/gpio.h linux-2.6.28.10/arch/ubicom32/include/asm/gpio.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/gpio.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/gpio.h 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,451 @@
- +/*
- + * arch/ubicom32/include/asm/gpio.h
- + * Definitions for GPIO operations on Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_GPIO_H
- +#define _ASM_UBICOM32_GPIO_H
- +
- +#include <linux/compiler.h>
- +#include <asm/irq.h>
- +
- +#include <asm/ip5000.h>
- +
- +#define ARCH_NR_GPIOS 512
- +#define MAX_UBICOM_ONCHIP_GPIO (9 * 32)
- +
- +/*
- + * Macros for manipulating GPIO numbers
- + */
- +#define gpio_bit(gn) (1 << (gn & 0x1f))
- +#define gpio_bank(gn) (gn >> 5)
- +
- +#define gpio_pin_index(gn) (gn & 0x1f)
- +#define gpio_port_index(gn) (gn >> 5)
- +
- +#define GPIO_RA_0 ((32 * 0) + 0)
- +#define GPIO_RA_1 ((32 * 0) + 1)
- +#define GPIO_RA_2 ((32 * 0) + 2)
- +#define GPIO_RA_3 ((32 * 0) + 3)
- +#define GPIO_RA_4 ((32 * 0) + 4)
- +#define GPIO_RA_5 ((32 * 0) + 5)
- +#define GPIO_RA_6 ((32 * 0) + 6)
- +#define GPIO_RA_7 ((32 * 0) + 7)
- +
- +#define GPIO_RB_0 ((32 * 1) + 0)
- +#define GPIO_RB_1 ((32 * 1) + 1)
- +#define GPIO_RB_2 ((32 * 1) + 2)
- +#define GPIO_RB_3 ((32 * 1) + 3)
- +#define GPIO_RB_4 ((32 * 1) + 4)
- +#define GPIO_RB_5 ((32 * 1) + 5)
- +#define GPIO_RB_6 ((32 * 1) + 6)
- +#define GPIO_RB_7 ((32 * 1) + 7)
- +#define GPIO_RB_8 ((32 * 1) + 8)
- +#define GPIO_RB_9 ((32 * 1) + 9)
- +#define GPIO_RB_10 ((32 * 1) + 10)
- +#define GPIO_RB_11 ((32 * 1) + 11)
- +#define GPIO_RB_12 ((32 * 1) + 12)
- +#define GPIO_RB_13 ((32 * 1) + 13)
- +#define GPIO_RB_14 ((32 * 1) + 14)
- +#define GPIO_RB_15 ((32 * 1) + 15)
- +#define GPIO_RB_16 ((32 * 1) + 16)
- +#define GPIO_RB_17 ((32 * 1) + 17)
- +#define GPIO_RB_18 ((32 * 1) + 18)
- +#define GPIO_RB_19 ((32 * 1) + 19)
- +
- +#define GPIO_RC_0 ((32 * 2) + 0)
- +#define GPIO_RC_1 ((32 * 2) + 1)
- +#define GPIO_RC_2 ((32 * 2) + 2)
- +#define GPIO_RC_3 ((32 * 2) + 3)
- +#define GPIO_RC_4 ((32 * 2) + 4)
- +#define GPIO_RC_5 ((32 * 2) + 5)
- +#define GPIO_RC_6 ((32 * 2) + 6)
- +#define GPIO_RC_7 ((32 * 2) + 7)
- +#define GPIO_RC_8 ((32 * 2) + 8)
- +#define GPIO_RC_9 ((32 * 2) + 9)
- +#define GPIO_RC_10 ((32 * 2) + 10)
- +#define GPIO_RC_11 ((32 * 2) + 11)
- +#define GPIO_RC_12 ((32 * 2) + 12)
- +#define GPIO_RC_13 ((32 * 2) + 13)
- +#define GPIO_RC_14 ((32 * 2) + 14)
- +#define GPIO_RC_15 ((32 * 2) + 15)
- +#define GPIO_RC_16 ((32 * 2) + 16)
- +#define GPIO_RC_17 ((32 * 2) + 17)
- +#define GPIO_RC_18 ((32 * 2) + 18)
- +#define GPIO_RC_19 ((32 * 2) + 19)
- +#define GPIO_RC_20 ((32 * 2) + 20)
- +#define GPIO_RC_21 ((32 * 2) + 21)
- +#define GPIO_RC_22 ((32 * 2) + 22)
- +#define GPIO_RC_23 ((32 * 2) + 23)
- +#define GPIO_RC_24 ((32 * 2) + 24)
- +#define GPIO_RC_25 ((32 * 2) + 25)
- +#define GPIO_RC_26 ((32 * 2) + 26)
- +#define GPIO_RC_27 ((32 * 2) + 27)
- +#define GPIO_RC_28 ((32 * 2) + 28)
- +#define GPIO_RC_29 ((32 * 2) + 29)
- +#define GPIO_RC_30 ((32 * 2) + 30)
- +#define GPIO_RC_31 ((32 * 2) + 31)
- +
- +#define GPIO_RD_0 ((32 * 3) + 0)
- +#define GPIO_RD_1 ((32 * 3) + 1)
- +#define GPIO_RD_2 ((32 * 3) + 2)
- +#define GPIO_RD_3 ((32 * 3) + 3)
- +#define GPIO_RD_4 ((32 * 3) + 4)
- +#define GPIO_RD_5 ((32 * 3) + 5)
- +#define GPIO_RD_6 ((32 * 3) + 6)
- +#define GPIO_RD_7 ((32 * 3) + 7)
- +#define GPIO_RD_8 ((32 * 3) + 8)
- +#define GPIO_RD_9 ((32 * 3) + 9)
- +#define GPIO_RD_10 ((32 * 3) + 10)
- +#define GPIO_RD_11 ((32 * 3) + 11)
- +
- +#define GPIO_RE_0 ((32 * 4) + 0)
- +#define GPIO_RE_1 ((32 * 4) + 1)
- +#define GPIO_RE_2 ((32 * 4) + 2)
- +#define GPIO_RE_3 ((32 * 4) + 3)
- +#define GPIO_RE_4 ((32 * 4) + 4)
- +#define GPIO_RE_5 ((32 * 4) + 5)
- +#define GPIO_RE_6 ((32 * 4) + 6)
- +#define GPIO_RE_7 ((32 * 4) + 7)
- +
- +#define GPIO_RF_0 ((32 * 5) + 0)
- +#define GPIO_RF_1 ((32 * 5) + 1)
- +#define GPIO_RF_2 ((32 * 5) + 2)
- +#define GPIO_RF_3 ((32 * 5) + 3)
- +#define GPIO_RF_4 ((32 * 5) + 4)
- +#define GPIO_RF_5 ((32 * 5) + 5)
- +#define GPIO_RF_6 ((32 * 5) + 6)
- +#define GPIO_RF_7 ((32 * 5) + 7)
- +#define GPIO_RF_8 ((32 * 5) + 8)
- +#define GPIO_RF_9 ((32 * 5) + 9)
- +#define GPIO_RF_10 ((32 * 5) + 10)
- +#define GPIO_RF_11 ((32 * 5) + 11)
- +#define GPIO_RF_12 ((32 * 5) + 12)
- +#define GPIO_RF_13 ((32 * 5) + 13)
- +#define GPIO_RF_14 ((32 * 5) + 14)
- +#define GPIO_RF_15 ((32 * 5) + 15)
- +
- +#define GPIO_RG_0 ((32 * 6) + 0)
- +#define GPIO_RG_1 ((32 * 6) + 1)
- +#define GPIO_RG_2 ((32 * 6) + 2)
- +#define GPIO_RG_3 ((32 * 6) + 3)
- +#define GPIO_RG_4 ((32 * 6) + 4)
- +#define GPIO_RG_5 ((32 * 6) + 5)
- +#define GPIO_RG_6 ((32 * 6) + 6)
- +#define GPIO_RG_7 ((32 * 6) + 7)
- +#define GPIO_RG_8 ((32 * 6) + 8)
- +#define GPIO_RG_9 ((32 * 6) + 9)
- +#define GPIO_RG_10 ((32 * 6) + 10)
- +#define GPIO_RG_11 ((32 * 6) + 11)
- +#define GPIO_RG_12 ((32 * 6) + 12)
- +#define GPIO_RG_13 ((32 * 6) + 13)
- +#define GPIO_RG_14 ((32 * 6) + 14)
- +#define GPIO_RG_15 ((32 * 6) + 15)
- +#define GPIO_RG_16 ((32 * 6) + 16)
- +#define GPIO_RG_17 ((32 * 6) + 17)
- +#define GPIO_RG_18 ((32 * 6) + 18)
- +#define GPIO_RG_19 ((32 * 6) + 19)
- +#define GPIO_RG_20 ((32 * 6) + 20)
- +#define GPIO_RG_21 ((32 * 6) + 21)
- +#define GPIO_RG_22 ((32 * 6) + 22)
- +#define GPIO_RG_23 ((32 * 6) + 23)
- +#define GPIO_RG_24 ((32 * 6) + 24)
- +#define GPIO_RG_25 ((32 * 6) + 25)
- +#define GPIO_RG_26 ((32 * 6) + 26)
- +#define GPIO_RG_27 ((32 * 6) + 27)
- +#define GPIO_RG_28 ((32 * 6) + 28)
- +#define GPIO_RG_29 ((32 * 6) + 29)
- +#define GPIO_RG_30 ((32 * 6) + 30)
- +#define GPIO_RG_31 ((32 * 6) + 31)
- +
- +#define GPIO_RH_0 ((32 * 7) + 0)
- +#define GPIO_RH_1 ((32 * 7) + 1)
- +#define GPIO_RH_2 ((32 * 7) + 2)
- +#define GPIO_RH_3 ((32 * 7) + 3)
- +#define GPIO_RH_4 ((32 * 7) + 4)
- +#define GPIO_RH_5 ((32 * 7) + 5)
- +#define GPIO_RH_6 ((32 * 7) + 6)
- +#define GPIO_RH_7 ((32 * 7) + 7)
- +#define GPIO_RH_8 ((32 * 7) + 8)
- +#define GPIO_RH_9 ((32 * 7) + 9)
- +
- +#define GPIO_RI_0 ((32 * 8) + 0)
- +#define GPIO_RI_1 ((32 * 8) + 1)
- +#define GPIO_RI_2 ((32 * 8) + 2)
- +#define GPIO_RI_3 ((32 * 8) + 3)
- +#define GPIO_RI_4 ((32 * 8) + 4)
- +#define GPIO_RI_5 ((32 * 8) + 5)
- +#define GPIO_RI_6 ((32 * 8) + 6)
- +#define GPIO_RI_7 ((32 * 8) + 7)
- +#define GPIO_RI_8 ((32 * 8) + 8)
- +#define GPIO_RI_9 ((32 * 8) + 9)
- +#define GPIO_RI_10 ((32 * 8) + 10)
- +#define GPIO_RI_11 ((32 * 8) + 11)
- +#define GPIO_RI_12 ((32 * 8) + 12)
- +#define GPIO_RI_13 ((32 * 8) + 13)
- +
- +/*
- + * The following section defines extra GPIO available to some boards.
- + * These GPIO are generally external to the processor (i.e. SPI/I2C
- + * expander chips).
- + *
- + * Note that these defines show all possible GPIO available, however,
- + * depending on the actual board configuration, some GPIO are not
- + * available for use.
- + */
- +#ifdef CONFIG_IP7500MEDIA
- +/*
- + * U15
- + */
- +#define IP7500MEDIA_U15_BASE (32 * 10)
- +#define IP7500MEDIA_IO0 (IP7500MEDIA_U15_BASE + 0)
- +#define IP7500MEDIA_IO1 (IP7500MEDIA_U15_BASE + 1)
- +#define IP7500MEDIA_IO2 (IP7500MEDIA_U15_BASE + 2)
- +#define IP7500MEDIA_IO3 (IP7500MEDIA_U15_BASE + 3)
- +#define IP7500MEDIA_IO4 (IP7500MEDIA_U15_BASE + 4)
- +#define IP7500MEDIA_IO5 (IP7500MEDIA_U15_BASE + 5)
- +#define IP7500MEDIA_IO6 (IP7500MEDIA_U15_BASE + 6)
- +#define IP7500MEDIA_IO7 (IP7500MEDIA_U15_BASE + 7)
- +
- +/*
- + * U16
- + */
- +#define IP7500MEDIA_U16_BASE (32 * 11)
- +#define IP7500MEDIA_IO8 (IP7500MEDIA_U16_BASE + 0)
- +#define IP7500MEDIA_IO9 (IP7500MEDIA_U16_BASE + 1)
- +#define IP7500MEDIA_IO10 (IP7500MEDIA_U16_BASE + 2)
- +#define IP7500MEDIA_IO11 (IP7500MEDIA_U16_BASE + 3)
- +#define IP7500MEDIA_IO12 (IP7500MEDIA_U16_BASE + 4)
- +#define IP7500MEDIA_IO13 (IP7500MEDIA_U16_BASE + 5)
- +#define IP7500MEDIA_IO14 (IP7500MEDIA_U16_BASE + 6)
- +#define IP7500MEDIA_IO15 (IP7500MEDIA_U16_BASE + 7)
- +
- +/*
- + * U17
- + */
- +#define IP7500MEDIA_U17_BASE (32 * 12)
- +#define IP7500MEDIA_IO16 (IP7500MEDIA_U17_BASE + 0)
- +#define IP7500MEDIA_IO17 (IP7500MEDIA_U17_BASE + 1)
- +#define IP7500MEDIA_IO18 (IP7500MEDIA_U17_BASE + 2)
- +#define IP7500MEDIA_IO19 (IP7500MEDIA_U17_BASE + 3)
- +#define IP7500MEDIA_IO20 (IP7500MEDIA_U17_BASE + 4)
- +#define IP7500MEDIA_IO21 (IP7500MEDIA_U17_BASE + 5)
- +#define IP7500MEDIA_IO22 (IP7500MEDIA_U17_BASE + 6)
- +#define IP7500MEDIA_IO23 (IP7500MEDIA_U17_BASE + 7)
- +
- +/*
- + * U18
- + */
- +#define IP7500MEDIA_U18_BASE (32 * 13)
- +#define IP7500MEDIA_IO24 (IP7500MEDIA_U18_BASE + 0)
- +#define IP7500MEDIA_IO25 (IP7500MEDIA_U18_BASE + 1)
- +#define IP7500MEDIA_IO26 (IP7500MEDIA_U18_BASE + 2)
- +#define IP7500MEDIA_IO27 (IP7500MEDIA_U18_BASE + 3)
- +#define IP7500MEDIA_IO28 (IP7500MEDIA_U18_BASE + 4)
- +#define IP7500MEDIA_IO29 (IP7500MEDIA_U18_BASE + 5)
- +#define IP7500MEDIA_IO30 (IP7500MEDIA_U18_BASE + 6)
- +#define IP7500MEDIA_IO31 (IP7500MEDIA_U18_BASE + 7)
- +#endif
- +
- +#ifdef CONFIG_IP7145DPF
- +/*
- + * U48
- + */
- +#define IP7145DPF_U48_BASE (32 * 10)
- +#define IP7145DPF_IO0 (IP7145DPF_U48_BASE + 0)
- +#define IP7145DPF_IO1 (IP7145DPF_U48_BASE + 1)
- +#define IP7145DPF_IO2 (IP7145DPF_U48_BASE + 2)
- +#define IP7145DPF_IO3 (IP7145DPF_U48_BASE + 3)
- +#define IP7145DPF_IO4 (IP7145DPF_U48_BASE + 4)
- +#define IP7145DPF_IO5 (IP7145DPF_U48_BASE + 5)
- +#define IP7145DPF_IO6 (IP7145DPF_U48_BASE + 6)
- +#define IP7145DPF_IO7 (IP7145DPF_U48_BASE + 7)
- +
- +/*
- + * U72
- + */
- +#define IP7145DPF_U72_BASE (32 * 11)
- +#define IP7145DPF_IOB0 (IP7145DPF_U72_BASE + 0)
- +#define IP7145DPF_IOB1 (IP7145DPF_U72_BASE + 1)
- +#define IP7145DPF_IOB2 (IP7145DPF_U72_BASE + 2)
- +#define IP7145DPF_IOB3 (IP7145DPF_U72_BASE + 3)
- +#define IP7145DPF_IOB4 (IP7145DPF_U72_BASE + 4)
- +#define IP7145DPF_IOB5 (IP7145DPF_U72_BASE + 5)
- +#define IP7145DPF_IOB6 (IP7145DPF_U72_BASE + 6)
- +#define IP7145DPF_IOB7 (IP7145DPF_U72_BASE + 7)
- +#endif
- +
- +#include <asm-generic/gpio.h>
- +
- +/*
- + * The following macros bypass gpiolib to generate direct references
- + * to the port registers. These assume, minimally, that either
- + * gpio_direction_input() or gpio_direction_output() have already been
- + * called to setup the pin direction and to enable the pin function to
- + * be gpio. These macros generate the hardware port address based on
- + * the assumption that all ports are 32 bits wide (even though we know
- + * they are not). This is so we can efficiently turn pin numbers into
- + * port addresses without a lookup.
- + *
- + * These operations must be done in one instruction to prevent clobbering
- + * other thread's accesses to the same port.
- + */
- +#define UBICOM32_GPIO_ENABLE(pin) \
- + do { \
- + asm volatile ("or.4 (%[port]), (%[port]), %[mask]\n\t" \
- + : \
- + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_mask), \
- + [mask] "d" (gpio_bit(pin)) \
- + : "cc", "memory" \
- + ); \
- + } while (0);
- +
- +#define UBICOM32_GPIO_DISABLE(pin) \
- + do { \
- + asm volatile ("and.4 (%[port]), (%[port]), %[mask]\n\t" \
- + : \
- + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_mask), \
- + [mask] "d" (~gpio_bit(pin)) \
- + : "cc", "memory" \
- + ); \
- + } while (0);
- +
- +#define UBICOM32_GPIO_SET_PIN_INPUT(pin) \
- + do { \
- + asm volatile ("and.4 (%[port]), (%[port]), %[mask]\n\t" \
- + : \
- + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_ctl), \
- + [mask] "d" (~gpio_bit(pin)) \
- + : "cc", "memory" \
- + ); \
- + } while (0);
- +
- +#define UBICOM32_GPIO_SET_PIN_OUTPUT(pin) \
- + do { \
- + asm volatile ("or.4 (%[port]), (%[port]), %[mask]\n\t" \
- + : \
- + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_ctl), \
- + [mask] "d" (gpio_bit(pin)) \
- + : "cc", "memory" \
- + ); \
- + } while (0);
- +
- +#define UBICOM32_GPIO_SET_PIN_TOGGLE(pin) \
- + do { \
- + asm volatile ("xor.4 (%[port]), (%[port]), %[mask]\n\t" \
- + : \
- + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_out), \
- + [mask] "d" (gpio_bit(pin)) \
- + : "cc", "memory" \
- + ); \
- + } while (0);
- +
- +#define UBICOM32_GPIO_SET_PIN_HIGH(pin) \
- + do { \
- + asm volatile ("or.4 (%[port]), (%[port]), %[mask]\n\t" \
- + : \
- + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_out), \
- + [mask] "d" (gpio_bit(pin)) \
- + : "cc", "memory" \
- + ); \
- + } while (0);
- +
- +#define UBICOM32_GPIO_SET_PIN_LOW(pin) \
- + do { \
- + asm volatile ("and.4 (%[port]), (%[port]), %[mask]\n\t" \
- + : \
- + : [port] "a" (&UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_out), \
- + [mask] "d" (~gpio_bit(pin)) \
- + : "cc", "memory" \
- + ); \
- + } while (0);
- +
- +#define UBICOM32_GPIO_SET_PIN(pin, val) \
- + if ( val ) { \
- + UBICOM32_GPIO_SET_PIN_HIGH(pin); \
- + } else { \
- + UBICOM32_GPIO_SET_PIN_LOW(pin); \
- + }
- +
- +#define UBICOM32_GPIO_GET_PIN(pin) \
- + (0 != (UBICOM32_IO_PORT(IO_BASE + (gpio_bank(pin) << 12))->gpio_in \
- + & gpio_bit(pin)))
- +
- +
- +static inline int gpio_get_value(unsigned gpio)
- +{
- + if (gpio <= MAX_UBICOM_ONCHIP_GPIO)
- + return UBICOM32_GPIO_GET_PIN(gpio);
- + else
- + return __gpio_get_value(gpio);
- +}
- +
- +static inline void gpio_set_value(unsigned gpio, int value)
- +{
- + if (gpio <= MAX_UBICOM_ONCHIP_GPIO)
- + {
- + UBICOM32_GPIO_SET_PIN(gpio, value);
- + }
- + else
- + {
- + __gpio_set_value(gpio, value);
- + }
- +}
- +
- +static inline int gpio_cansleep(unsigned gpio)
- +{
- + return __gpio_cansleep(gpio);
- +}
- +
- +static inline int gpio_to_irq(unsigned gpio)
- +{
- +#if defined(IP5000) || defined(IP5000_REV2)
- + if ((gpio >= GPIO_RA_4) && (gpio <= GPIO_RA_6))
- + return 25;
- + else
- + return -ENXIO;
- +
- +#elif defined(IP7000) || defined(IP7000_REV2)
- + if ((gpio >= GPIO_RA_4) && (gpio <= GPIO_RA_6))
- + return 44 + (gpio - GPIO_RA_4);
- + else
- + return -ENXIO;
- +
- +#else
- + return -ENXIO;
- +
- +#endif
- +}
- +
- +static inline int irq_to_gpio(unsigned gpio)
- +{
- + return -ENXIO;
- +}
- +
- +extern struct ubicom32_io_port *ubi_gpio_get_port(unsigned gpio);
- +
- +extern int __init ubi_gpio_init(void);
- +
- +#endif /* _ASM_UBICOM32_GPIO_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/hardirq.h linux-2.6.28.10/arch/ubicom32/include/asm/hardirq.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/hardirq.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/hardirq.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,55 @@
- +/*
- + * arch/ubicom32/include/asm/hardirq.h
- + * Definition of ack_bad_irq() for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 1997, 98, 99, 2000, 01, 05 Ralf Baechle ([email protected])
- + * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
- + * Copyright (C) 2001 MIPS Technologies, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_HARDIRQ_H
- +#define _ASM_UBICOM32_HARDIRQ_H
- +
- +#include <linux/threads.h>
- +#include <linux/irq.h>
- +
- +/*
- + * The hardirq mask has to be large enough to have space
- + * for potentially all IRQ sources in the system nesting
- + * on a single CPU. For Ubicom32, we have 64 IRQ sources.
- + */
- +#define HARDIRQ_BITS 6
- +#if (1 << HARDIRQ_BITS) < NR_IRQS
- +# error HARDIRQ_BITS is too low!
- +#endif
- +
- +typedef struct {
- + unsigned int __softirq_pending;
- +} ____cacheline_aligned irq_cpustat_t;
- +
- +#include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */
- +
- +extern void ack_bad_irq(unsigned int irq);
- +
- +#endif /* _ASM_UBICOM32_HARDIRQ_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/hw_irq.h linux-2.6.28.10/arch/ubicom32/include/asm/hw_irq.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/hw_irq.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/hw_irq.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,31 @@
- +/*
- + * arch/ubicom32/include/asm/hw_irq.h
- + * Ubicom32 architecture APIC support.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_HW_IRQ_H
- +#define _ASM_UBICOM32_HW_IRQ_H
- +
- +#endif /* _ASM_UBICOM32_HW_IRQ_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctl.h linux-2.6.28.10/arch/ubicom32/include/asm/ioctl.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctl.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ioctl.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/ioctl.h
- + * Generic ioctl.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_IOCTL_H
- +#define _ASM_UBICOM32_IOCTL_H
- +
- +#include <asm-generic/ioctl.h>
- +
- +#endif /* _ASM_UBICOM32_IOCTL_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctls.h linux-2.6.28.10/arch/ubicom32/include/asm/ioctls.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ioctls.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ioctls.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,111 @@
- +/*
- + * arch/ubicom32/include/asm/ioctls.h
- + * Definitions of ioctls for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_IOCTLS_H
- +#define _ASM_UBICOM32_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 TIOCSBRK 0x5427 /* BSD compatibility */
- +#define TIOCCBRK 0x5428 /* BSD compatibility */
- +#define TIOCGSID 0x5429 /* Return the session ID of FD */
- +#define TCGETS2 _IOR('T',0x2A, struct termios2)
- +#define TCSETS2 _IOW('T',0x2B, struct termios2)
- +#define TCSETSW2 _IOW('T',0x2C, struct termios2)
- +#define TCSETSF2 _IOW('T',0x2D, struct termios2)
- +#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 /* _ASM_UBICOM32_IOCTLS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/io.h linux-2.6.28.10/arch/ubicom32/include/asm/io.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/io.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/io.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,313 @@
- +/*
- + * arch/ubicom32/include/asm/io.h
- + * I/O memory accessor functions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_IO_H
- +#define _ASM_UBICOM32_IO_H
- +
- +#ifdef __KERNEL__
- +#include <linux/string.h>
- +#include <linux/compiler.h>
- +
- +static inline unsigned short _swapw(volatile unsigned short v)
- +{
- + return ((v << 8) | (v >> 8));
- +}
- +
- +static inline unsigned int _swapl(volatile unsigned long v)
- +{
- + return ((v << 24) | ((v & 0xff00) << 8) | ((v & 0xff0000) >> 8) | (v >> 24));
- +}
- +
- +#ifndef CONFIG_PCI
- +#define readb(addr) \
- + ({ unsigned char __v = (*(volatile unsigned char *) (addr)); __v; })
- +#define readw(addr) \
- + ({ unsigned short __v = (*(volatile unsigned short *) (addr)); __v; })
- +#define readl(addr) \
- + ({ unsigned int __v = (*(volatile unsigned int *) (addr)); __v; })
- +
- +#define writeb(b,addr) (void)((*(volatile unsigned char *) (addr)) = (b))
- +#define writew(b,addr) (void)((*(volatile unsigned short *) (addr)) = (b))
- +#define writel(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
- +#else /*CONFIG_PCI */
- +
- +#define PCI_CPU_REG_BASE (0x00000000UL) /* taking lower 2GB space */
- +#define PCI_DEV_REG_BASE (0x80000000UL)
- +
- +#if PCI_CPU_REG_BASE > PCI_DEV_REG_BASE
- +#define IS_PCI_ADDRESS(x) (((unsigned int)(x)&(PCI_CPU_REG_BASE)) == 0)
- +#else
- +#define IS_PCI_ADDRESS(x) ((unsigned int)(x)&(PCI_DEV_REG_BASE))
- +#endif
- +
- +extern unsigned int ubi32_pci_read_u32(const volatile void __iomem *addr);
- +extern unsigned short ubi32_pci_read_u16(const volatile void __iomem *addr);
- +extern unsigned char ubi32_pci_read_u8(const volatile void __iomem *addr);
- +extern void ubi32_pci_write_u32(unsigned int val, const volatile void __iomem *addr);
- +extern void ubi32_pci_write_u16(unsigned short val, const volatile void __iomem *addr);
- +extern void ubi32_pci_write_u8(unsigned char val, const volatile void __iomem *addr);
- +
- +static inline unsigned char readb(const volatile void __iomem *addr)
- +{
- + if (IS_PCI_ADDRESS(addr))
- + return ubi32_pci_read_u8(addr);
- + else
- + return (unsigned char)(*(volatile unsigned char *)addr);
- +}
- +static inline unsigned short readw(const volatile void __iomem *addr)
- +{
- + if (IS_PCI_ADDRESS(addr))
- + return ubi32_pci_read_u16(addr);
- + else
- + return (unsigned short)(*(volatile unsigned short *)addr);
- +}
- +
- +static inline unsigned int readl(const volatile void __iomem *addr)
- +{
- + if (IS_PCI_ADDRESS(addr))
- + return ubi32_pci_read_u32(addr);
- + else
- + return (unsigned int)(*(volatile unsigned int *)addr);
- +}
- +
- +static inline void writel(unsigned int val, volatile void __iomem *addr)
- +{
- + if (IS_PCI_ADDRESS(addr))
- + ubi32_pci_write_u32(val, addr);
- + else
- + *(volatile unsigned int *)addr = val;
- +}
- +
- +static inline void writew(unsigned short val, volatile void __iomem *addr)
- +{
- + if (IS_PCI_ADDRESS(addr))
- + ubi32_pci_write_u16(val, addr);
- + else
- + *(volatile unsigned short *)addr = val;
- +}
- +
- +static inline void writeb(unsigned char val, volatile void __iomem *addr)
- +{
- + if (IS_PCI_ADDRESS(addr))
- + ubi32_pci_write_u8(val, addr);
- + else
- + *(volatile unsigned char *)addr = val;
- +}
- +#endif
- +
- +#define readb_relaxed(addr) readb(addr)
- +#define readw_relaxed(addr) readw(addr)
- +#define readl_relaxed(addr) readl(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
- +
- +static inline void io_outsb(unsigned int addr, const void *buf, int len)
- +{
- + volatile unsigned char *ap = (volatile unsigned char *) addr;
- + unsigned char *bp = (unsigned char *) buf;
- + while (len--)
- + *ap = *bp++;
- +}
- +
- +static inline void io_outsw(unsigned int addr, const void *buf, int len)
- +{
- + volatile unsigned short *ap = (volatile unsigned short *) addr;
- + unsigned short *bp = (unsigned short *) buf;
- + while (len--)
- + *ap = _swapw(*bp++);
- +}
- +
- +static inline void io_outsl(unsigned int addr, const void *buf, int len)
- +{
- + volatile unsigned int *ap = (volatile unsigned int *) addr;
- + unsigned int *bp = (unsigned int *) buf;
- + while (len--)
- + *ap = _swapl(*bp++);
- +}
- +
- +static inline void io_insb(unsigned int addr, void *buf, int len)
- +{
- + volatile unsigned char *ap = (volatile unsigned char *) addr;
- + unsigned char *bp = (unsigned char *) buf;
- + while (len--)
- + *bp++ = *ap;
- +}
- +
- +static inline void io_insw(unsigned int addr, void *buf, int len)
- +{
- + volatile unsigned short *ap = (volatile unsigned short *) addr;
- + unsigned short *bp = (unsigned short *) buf;
- + while (len--)
- + *bp++ = _swapw(*ap);
- +}
- +
- +static inline void io_insl(unsigned int addr, void *buf, int len)
- +{
- + volatile unsigned int *ap = (volatile unsigned int *) addr;
- + unsigned int *bp = (unsigned int *) buf;
- + while (len--)
- + *bp++ = _swapl(*ap);
- +}
- +
- +#define mmiowb()
- +
- +/*
- + * make the short names macros so specific devices
- + * can override them as required
- + */
- +#ifndef CONFIG_PCI
- +#define memset_io(a,b,c) memset((void *)(a),(b),(c))
- +#define memcpy_fromio(a,b,c) memcpy((a),(void *)(b),(c))
- +#define memcpy_toio(a,b,c) memcpy((void *)(a),(b),(c))
- +#else
- +extern void memcpy_fromio(void *to, const volatile void __iomem *from, unsigned len);
- +extern void memcpy_toio(volatile void __iomem *to, const void *from, unsigned len);
- +extern void memset_io(volatile void __iomem *addr, int val, size_t count);
- +#endif
- +
- +#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)
- +
- +#define outsb(a,b,l) io_outsb(a,b,l)
- +#define outsw(a,b,l) io_outsw(a,b,l)
- +#define outsl(a,b,l) io_outsl(a,b,l)
- +
- +#define insb(a,b,l) io_insb(a,b,l)
- +#define insw(a,b,l) io_insw(a,b,l)
- +#define insl(a,b,l) io_insl(a,b,l)
- +
- +#ifndef CONFIG_PCI
- +#define ioread8_rep(a,d,c) insb(a,d,c)
- +#define ioread16_rep(a,d,c) insw(a,d,c)
- +#define ioread32_rep(a,d,c) insl(a,d,c)
- +#define iowrite8_rep(a,s,c) outsb(a,s,c)
- +#define iowrite16_rep(a,s,c) outsw(a,s,c)
- +#define iowrite32_rep(a,s,c) outsl(a,s,c)
- +#else
- +extern void ioread8_rep(void __iomem *port, void *buf, unsigned long count);
- +extern void ioread16_rep(void __iomem *port, void *buf, unsigned long count);
- +extern void ioread32_rep(void __iomem *port, void *buf, unsigned long count);
- +extern void iowrite8_rep(void __iomem *port, const void *buf, unsigned long count);
- +extern void iowrite16_rep(void __iomem *port, const void *buf, unsigned long count);
- +extern void iowrite32_rep(void __iomem *port, const void *buf, unsigned long count);
- +#endif
- +
- +
- +#ifndef CONFIG_PCI
- +#define ioread8(X) readb(X)
- +#define ioread16(X) readw(X)
- +#define ioread32(X) readl(X)
- +#define iowrite8(val,X) writeb(val,X)
- +#define iowrite16(val,X) writew(val,X)
- +#define iowrite32(val,X) writel(val,X)
- +#else /*CONFIG_PCI */
- +extern unsigned char ioread8(void __iomem *addr);
- +extern unsigned short ioread16(void __iomem *addr);
- +extern unsigned int ioread32(void __iomem *addr);
- +extern void iowrite8(unsigned char val, void __iomem *addr);
- +extern void iowrite16(unsigned short val, void __iomem *addr);
- +extern void iowrite32(unsigned int val, void __iomem *addr);
- +#endif /* CONFIG_PCI */
- +
- +#define IO_SPACE_LIMIT 0xffff
- +
- +/* 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);
- +
- +static inline void *ioremap(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
- +}
- +static inline void *ioremap_nocache(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_NOCACHE_SER);
- +}
- +static inline void *ioremap_writethrough(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_WRITETHROUGH);
- +}
- +static inline void *ioremap_fullcache(unsigned long physaddr, unsigned long size)
- +{
- + return __ioremap(physaddr, size, IOMAP_FULL_CACHING);
- +}
- +
- +extern void iounmap(void *addr);
- +
- +#define ioport_map(port, nr) ((void __iomem*)(port))
- +#define ioport_unmap(addr)
- +
- +
- +/* Pages to physical address... */
- +#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
- +#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
- +
- +/*
- + * Macros used for converting between virtual and physical mappings.
- + */
- +#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
- +
- +/*
- + * Convert a physical pointer to a virtual kernel pointer for /dev/mem
- + * access
- + */
- +#define xlate_dev_mem_ptr(p) __va(p)
- +
- +/*
- + * Convert a virtual cached pointer to an uncached pointer
- + */
- +#define xlate_dev_kmem_ptr(p) p
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _ASM_UBICOM32_IO_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/ip5000-asm.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000-asm.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ip5000-asm.h 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,156 @@
- +/*
- + * arch/ubicom32/include/asm/ip5000-asm.h
- + * Instruction macros for the IP5000.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_IP5000_ASM_H
- +#define _ASM_UBICOM32_IP5000_ASM_H
- +
- +#if !defined(__LINKER__)
- +
- +#if defined(__ASSEMBLY__)
- +.macro cycles quant
- +.if (\quant) == 1
- + nop
- +.else
- +.if (((\quant) + 3) / 8) > 0
- +.rept (((\quant) + 3) / 8)
- + jmpt.f .+4
- +.endr
- +.endif
- +.if ((((\quant) + 3) % 8) / 4) > 0
- + jmpt.t .+4
- +.endif
- +.endif
- +.endm
- +#else
- +/*
- + * Same macro as above just in C inline asm
- + */
- +asm (" \n\
- +.macro cycles quant \n\
- +.if (\\quant) == 1 \n\
- + nop \n\
- +.else \n\
- +.if (((\\quant) + 3) / 8) > 0 \n\
- +.rept (((\\quant) + 3) / 8) \n\
- + jmpt.f .+4 \n\
- +.endr \n\
- +.endif \n\
- +.if ((((\\quant) + 3) % 8) / 4) > 0 \n\
- + jmpt.t .+4 \n\
- +.endif \n\
- +.endif \n\
- +.endm \n\
- +");
- +#endif
- +
- +
- +#if defined(__ASSEMBLY__)
- +.macro pipe_flush cyc
- + cycles 11 - (\cyc)
- +.endm
- +#else
- +/*
- + * Same macro as above just in C inline asm
- + */
- +asm (" \n\
- +.macro pipe_flush cyc \n\
- + cycles 11 - (\\cyc) \n\
- +.endm \n\
- +");
- +
- +#endif
- +
- +#if defined(__ASSEMBLY__)
- +.macro setcsr_flush cyc
- + cycles 5 - (\cyc)
- +.endm
- +#else
- +/*
- + * Same macro as above just in C inline asm
- + */
- +asm (" \n\
- +.macro setcsr_flush cyc \n\
- + cycles 5 - (\\cyc) \n\
- +.endm \n\
- +");
- +#endif
- +
- +/*
- + * Macros for prefetch (using miss-aligned memory write)
- + */
- +#if defined(__ASSEMBLY__)
- +
- +.macro pre_fetch_macro thread_num, Ascratch, Aaddress length
- + bclr MT_TRAP_EN, MT_TRAP_EN, #(\thread_num)
- + bset \Ascratch, \Aaddress, #0 ; force a miss-aligned address
- + jmpt.t .+4 ; delay for both address setup and trap disable
- + move.4 (\Ascratch), #0
- + .if (\length > 32)
- + move.4 32(\Ascratch), #0
- + .endif
- + .if (\length > 64)
- + move.4 64(\Ascratch), #0
- + .endif
- + .if (\length > 96)
- + move.4 96(\Ascratch), #0
- + .endif
- + .if (\length > 128)
- + invalid_instruction ; maximum pre-fetch size is 4 cache lines
- + .endif
- + bset MT_TRAP_EN, MT_TRAP_EN, #(\thread_num)
- +.endm
- +
- +#else
- +/*
- + * Same macro as above just in C inline asm
- + */
- +asm (" \n\
- +.macro pre_fetch_macro thread_num, Ascratch, Aaddress length \n\
- + bclr MT_TRAP_EN, MT_TRAP_EN, #(\thread_num) \n\
- + bset \\Ascratch, \\Aaddress, #0 ; force a miss-aligned address \n\
- + jmpt.t .+4 ; delay for both address setup and trap disable \n\
- + move.4 (\\Ascratch), #0 \n\
- + .if (\\length > 32) \n\
- + move.4 32(\\Ascratch), #0 \n\
- + .endif \n\
- + .if (\\length > 64) \n\
- + move.4 64(\\Ascratch), #0 \n\
- + .endif \n\
- + .if (\\length > 96) \n\
- + move.4 96(\\Ascratch), #0 \n\
- + .endif \n\
- + .if (\\length > 128) \n\
- + invalid_instruction ; maximum pre-fetch size is 4 cache lines \n\
- + .endif \n\
- + bset MT_TRAP_EN, MT_TRAP_EN, #(\\thread_num) \n\
- +.endm \n\
- +");
- +#endif
- +
- +#endif /* !defined(__LINKER__) */
- +#endif /* defined _ASM_UBICOM32_IP5000_ASM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000.h linux-2.6.28.10/arch/ubicom32/include/asm/ip5000.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ip5000.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ip5000.h 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,860 @@
- +/*
- + * arch/ubicom32/include/asm/ip5000.h
- + * Specific details for the Ubicom IP5000 processor.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_IP5000_H
- +#define _ASM_UBICOM32_IP5000_H
- +
- +/*
- + * Inline assembly define
- + */
- +#define S(arg) #arg
- +#define D(arg) S(arg)
- +
- +/*
- + * Assembler include file
- + */
- +#include <asm/ip5000-asm.h>
- +
- +/*
- + * Timing
- + */
- +#define JMPT_PENALTY 3
- +#define JMPF_PENALTY 7
- +#define RET_PENALTY 7
- +
- +/*
- + * Threads
- + */
- +#if defined(IP5000) || defined(IP5000_REV2)
- +#define THREAD_COUNT 10
- +#elif defined(IP7000) || defined(IP7000_REV2)
- +#define THREAD_COUNT 12
- +#else
- +#error "Unknown IP5K silicon"
- +#endif
- +
- +/*
- + * Arch
- + */
- +#if defined(IP5000) || defined(IP5000_REV2)
- +#define UBICOM32_ARCH_VERSION 3
- +#elif defined(IP7000) || defined(IP7000_REV2)
- +#define UBICOM32_ARCH_VERSION 4
- +#else
- +#error "Unknown IP5K silicon"
- +#endif
- +
- +/*
- + * Memory Size
- + */
- +#define OCM_SECTOR_SIZE 0x00008000 /* 32K */
- +
- +#if defined(IP5000) || defined(IP5000_REV2)
- +#define OCMSIZE 0x00030000 /* 192K on-chip RAM for both program and data */
- +#elif defined(IP7000) || defined(IP7000_REV2)
- +#define OCMSIZE 0x0003C000 /* 240K on-chip RAM for both program and data */
- +#else
- +#error "Unknown IP5K silicon"
- +#endif
- +
- +#define OCMSTART 0x3ffc0000 /* alias from 0x03000000 for easy jump to/from SDRAM */
- +#define OCMEND (OCMSTART + OCMSIZE)
- +#define SDRAMSTART 0x40000000
- +#define FLASHSTART 0x60000000
- +
- +/*
- + * Registers
- + */
- +#define ROSR_INT (1 << 0)
- +
- +/* Interrupts */
- +#define INT_CHIP(reg, bit) (((reg) << 5) | (bit))
- +#define INT_REG(interrupt) (((interrupt) >> 5) * 4)
- +#define INT_SET(interrupt) 0x0114 + INT_REG(interrupt)
- +#define INT_CLR(interrupt) 0x0124 + INT_REG(interrupt)
- +#define INT_STAT(interrupt) 0x0104 + INT_REG(interrupt)
- +#define INT_MASK(interrupt) 0x00C0 + INT_REG(interrupt)
- +#define INT_BIT(interrupt) ((interrupt) & 0x1F)
- +#define INT_BIT_MASK(interrupt) (1 << INT_BIT(interrupt))
- +
- +/*
- + * The LOCK_INT and THREAD_INT are used to wake up corresponding thread. They are sharing
- + * the same set of SW interrupt resource.
- + *
- + * LOCK_INT(n): One SW INT per NRT thread that can participate lock operation.
- + * The threads that can participate lock are application threads and DSR thread.
- + * (Lock locks - numbers are hard-coded in lock.h)
- + * THREAD_INT(n): One SW INT per HRT thread for wake up trigger.
- + */
- +#define LOCK_INT(thread) INT_CHIP(0, (thread))
- +#define THREAD_INT(thread) INT_CHIP(0, (thread))
- +
- +/*
- + * The SYSTEM_INT and DSR_INT are sharing the same set of SW interrupt resource.
- + *
- + * SYSTEM_INT(n): One SW INT per NRT threads (application threads) as system queue interrupt,
- + * and for DSR as self-trigger interrupt.
- + * (The application threads include at least thread 0)
- + * DSR_INT(n): One SW INT per HRT thread to request DSR service.
- + */
- +#define SYSTEM_INT(thread) INT_CHIP(0, THREAD_COUNT + (thread))
- +#define DSR_INT(thread) INT_CHIP(0, THREAD_COUNT + (thread))
- +
- +/* GLOBAL_CTRL */
- +#define GLOBAL_CTRL_TRAP_RST_EN (1 << 9)
- +#define GLOBAL_CTRL_AERROR_RST_EN (1 << 8)
- +#define GLOBAL_CTRL_MT_MIN_DELAY(x) ((x) << 3)
- +#define GLOBAL_CTRL_HRT_BANK_SELECT (1 << 2)
- +#define GLOBAL_CTRL_INT_EN (1 << 0)
- +
- +/*
- + * HRT Tables
- + */
- +#define HRT_TABLE0_BASE 0x0800
- +#define HRT_TABLE1_BASE 0x0900
- +#define HRT_TABLE_SIZE 64
- +
- +/*
- + * Break Point Trap Register
- + */
- +#define ASYNCERROR_INT INT_CHIP(0, 31)
- +#define BREAKPOINT_INT INT_CHIP(1, 31)
- +
- +/*
- + * Port interrupts
- + * The non-existing FIFO INTs are mapped to INT2 for the ports.
- + */
- +#define IO_PORT_PTR_TO_NUM(port) (((port) & 0x0000ffff) >> 12)
- +#define RX_FIFO_INT(port) \
- + ((IO_PORT_PTR_TO_NUM(port) == 0) ? INT_CHIP(0, 25) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 1) ? INT_CHIP(0, 26) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 2) ? INT_CHIP(0, 29) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 3) ? INT_CHIP(1, 24) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 4) ? INT_CHIP(1, 27) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 5) ? INT_CHIP(1, 16) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 6) ? INT_CHIP(1, 19) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 7) ? INT_CHIP(1, 20) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 8) ? INT_CHIP(1, 21) : \
- + INT_CHIP(1, 15))))))))))
- +#define TX_FIFO_INT(port) \
- + ((IO_PORT_PTR_TO_NUM(port) == 0) ? INT_CHIP(0, 24) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 1) ? INT_CHIP(0, 27) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 2) ? INT_CHIP(0, 29) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 3) ? INT_CHIP(1, 25) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 4) ? INT_CHIP(1, 28) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 5) ? INT_CHIP(1, 17) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 6) ? INT_CHIP(1, 19) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 7) ? INT_CHIP(1, 20) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 8) ? INT_CHIP(1, 22) : \
- + INT_CHIP(1, 15))))))))))
- +#define PORT_OTHER_INT(port) \
- + ((IO_PORT_PTR_TO_NUM(port) == 0) ? INT_CHIP(0, 25) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 1) ? INT_CHIP(0, 28) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 2) ? INT_CHIP(0, 29) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 3) ? INT_CHIP(1, 26) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 4) ? INT_CHIP(1, 29) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 5) ? INT_CHIP(1, 18) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 6) ? INT_CHIP(1, 19) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 7) ? INT_CHIP(1, 20) : \
- + ((IO_PORT_PTR_TO_NUM(port) == 8) ? INT_CHIP(1, 23) : \
- + INT_CHIP(1, 15))))))))))
- +
- +/*
- + * On Chip Peripherals Base.
- + */
- +#define OCP_BASE 0x01000000
- +#define OCP_GENERAL 0x000
- +#define OCP_TIMERS 0x100
- +#define OCP_TRNG 0x200 /* True Random Number Generator Control Reigsters */
- +#define OCP_DEBUG 0x300
- +#define OCP_SECURITY 0x400
- +#define OCP_ICCR 0x500 /* I-Cache Control Registers */
- +#define OCP_DCCR 0x600 /* D-Cache Control Registers */
- +#define OCP_OCMC 0x700 /* On Chip Memory Control Registers */
- +#define OCP_STATISTICS 0x800 /* Statistics Counters */
- +#define OCP_MTEST 0x900 /* Memory Test Registers */
- +#define OCP_MCFG 0xa00 /* Memory Configuration Registers -- IP7000 only */
- +#define OCP_DEBUG_INST 0x000 /* Up to 16M */
- +
- +/*
- + * General Configuration Registers (PLL)
- + */
- +#define GENERAL_CFG_BASE (OCP_BASE + OCP_GENERAL)
- +#define GEN_CLK_CORE_CFG 0x00
- +#define GEN_CLK_IO_CFG 0x04
- +#define GEN_CLK_DDR_CFG 0x08
- +#define GEN_CLK_DDRDS_CFG 0x0c
- +#define GEN_CLK_SLIP_CLR 0x10
- +#define GEN_CLK_SLIP_START 0x14
- +#define GEN_CLK_SERDES_SEL 0x18 /* IP7000 only */
- +#define GEN_CLK_DDR_CFG2 0x1c /* IP7000 only */
- +#define GEN_DDR_CAL_CTRL 0x30 /* IP5000 only */
- +#define GEN_DDR_CAL_STAT 0x34 /* IP5000 only */
- +#define GEN_USB_DFT_CTRL 0x38 /* IP5000 only */
- +#define GEN_USB_DFT_STAT 0x3c /* IP5000 only */
- +#define GEN_USB_PHY_CFG 0x40 /* IP7000 only */
- +#define GEN_USB_PHY_TEST 0x44 /* IP7000 only */
- +#define GEN_USB_PHY_STAT 0x48 /* IP7000 only */
- +#define GEN_SW_RESET 0x80
- +#define GEN_RESET_REASON 0x84
- +#define GEN_BOND_CFG 0x88
- +#define GEN_IO_PU_CFG 0x8c
- +#define GEN_MEM_RM_CFG 0x90
- +#define GEN_IO_CONFIG 0x94
- +
- +#define GEN_CLK_PLL_SECURITY_BIT_NO 31
- +#define GEN_CLK_PLL_SECURITY (1 << GEN_CLK_PLL_SECURITY_BIT_NO)
- +#define GEN_CLK_PLL_ENSAT (1 << 30)
- +#define GEN_CLK_PLL_FASTEN (1 << 29)
- +#define GEN_CLK_PLL_NR(v) (((v) - 1) << 23)
- +#define GEN_CLK_PLL_NF(v) (((v) - 1) << 11)
- +#define GEN_CLK_PLL_OD(v) (((v) - 1) << 8)
- +#define GEN_CLK_PLL_RESET (1 << 7)
- +#define GEN_CLK_PLL_BYPASS (1 << 6)
- +#define GEN_CLK_PLL_POWERDOWN (1 << 5)
- +#define GEN_CLK_PLL_SELECT (1 << 4)
- +
- +#define GEN_GET_CLK_PLL_NR(v) ((((v) >> 23) & 0x003f) + 1)
- +#define GEN_GET_CLK_PLL_NF(v) ((((v) >> 11) & 0x0fff) + 1)
- +#define GEN_GET_CLK_PLL_OD(v) ((((v) >> 8) & 0x7) + 1)
- +
- +
- +#define RESET_FLAG_DST_MEM_ERROR (1 << 18)
- +#define RESET_FLAG_SRC1_MEM_ERROR (1 << 17)
- +#define RESET_FLAG_WRITE_ADDR (1 << 16)
- +#define RESET_FLAG_DST_SYNC_ERROR (1 << 15)
- +#define RESET_FLAG_SRC1_SYNC_ERROR (1 << 14)
- +#define RESET_FLAG_DST_ALGN_ERROR (1 << 13)
- +#define RESET_FLAG_SRC1_ALGN_ERROR (1 << 12)
- +#define RESET_FLAG_DST_ADDR_ERROR (1 << 11)
- +#define RESET_FLAG_SRC1_ADDR_ERROR (1 << 10)
- +#define RESET_FLAG_ILLEGAL_INST (1 << 9)
- +#define RESET_FLAG_INST_SYNC_ERROR (1 << 8)
- +#define RESET_FLAG_INST_ADDR_ERROR (1 << 7)
- +#define RESET_FLAG_DATA_PORT_ERROR (1 << 6)
- +#define RESET_FLAG_INST_PORT_ERROR (1 << 5)
- +#define RESET_FLAG_SW_RESET (1 << 4)
- +#define RESET_FLAG_DEBUG (1 << 3)
- +#define RESET_FLAG_WATCHDOG (1 << 2)
- +#define RESET_FLAG_POWER_ON (1 << 1)
- +#define RESET_FLAG_EXTERNAL (1 << 0)
- +
- +/*
- + * Timer block
- + */
- +#define TIMER_BASE (OCP_BASE + OCP_TIMERS)
- +#define TIMER_MPTVAL 0x00
- +#define TIMER_RTCOM 0x04
- +#define TIMER_TKEY 0x08
- +#define TIMER_WDCOM 0x0c
- +#define TIMER_WDCFG 0x10
- +#define TIMER_SYSVAL 0x14
- +#define TIMER_SYSCOM(tmr) (0x18 + (tmr) * 4)
- +#define TIMER_TRN_CFG 0x100
- +#define TIMER_TRN 0x104
- +
- +#define TIMER_COUNT 10
- +#define TIMER_INT(tmr) INT_CHIP(1, (tmr))
- +#define TIMER_TKEYVAL 0xa1b2c3d4
- +#define TIMER_WATCHDOG_DISABLE 0x4d3c2b1a
- +#define TIMER_TRN_CFG_ENABLE_OSC 0x00000007
- +
- +#ifndef __ASSEMBLY__
- +/*
- + * ubicom32_io_timer
- + */
- +struct ubicom32_io_timer {
- + volatile u32_t mptval;
- + volatile u32_t rtcom;
- + volatile u32_t tkey;
- + volatile u32_t wdcom;
- + volatile u32_t wdcfg;
- + volatile u32_t sysval;
- + volatile u32_t syscom[TIMER_COUNT];
- + volatile u32_t reserved[64 - 6 - TIMER_COUNT]; // skip all the way to OCP-TRNG section
- + volatile u32_t rsgcfg;
- + volatile u32_t trn;
- +};
- +
- +#define UBICOM32_IO_TIMER ((struct ubicom32_io_timer *)TIMER_BASE)
- +#endif
- +
- +#define UBICOM32_VECTOR_TO_TIMER_INDEX(vector) (vector - TIMER_INT(0))
- +
- +/*
- + * OCP-Debug Module (Mailbox)
- + */
- +#define ISD_MAILBOX_BASE (OCP_BASE + OCP_DEBUG)
- +#define ISD_MAILBOX_IN 0x00
- +#define ISD_MAILBOX_OUT 0x04
- +#define ISD_MAILBOX_STATUS 0x08
- +
- +#define ISD_MAILBOX_INT INT_CHIP(1, 30)
- +
- +#define ISD_MAILBOX_STATUS_IN_FULL (1 << 31)
- +#define ISD_MAILBOX_STATUS_IN_EMPTY (1 << 30)
- +#define ISD_MAILBOX_STATUS_OUT_FULL (1 << 29)
- +#define ISD_MAILBOX_STATUS_OUT_EMPTY (1 << 28)
- +
- +/*
- + * OCP-Security
- + */
- +#define SECURITY_BASE (OCP_BASE + OCP_SECURITY)
- +#define SECURITY_BASE_EFFECTIVE_ADDRESS (SECURITY_BASE >> 7) // To load the base address in a single instruction
- +#define SECURITY_CTRL 0x00
- +#define SECURITY_CTRL_BYTE_OFFSET(x) ((x) << 16)
- +#define SECURITY_CTRL_KEY_SIZE(x) ((x) << 8)
- +#define SECURITY_CTRL_HASH_ALG_NONE (0 << 4)
- +#define SECURITY_CTRL_HASH_ALG_MD5 (1 << 4)
- +#define SECURITY_CTRL_HASH_ALG_SHA1 (2 << 4)
- +#define SECURITY_CTRL_CBC (1 << 3)
- +#define SECURITY_CTRL_CIPHER_ALG_AES (0 << 1)
- +#define SECURITY_CTRL_CIPHER_ALG_NONE (1 << 1)
- +#define SECURITY_CTRL_CIPHER_ALG_DES (2 << 1)
- +#define SECURITY_CTRL_CIPHER_ALG_3DES (3 << 1)
- +#define SECURITY_CTRL_ENCIPHER (1 << 0)
- +#define SECURITY_CTRL_DECIPHER (0 << 0)
- +#define SECURITY_STAT 0x04
- +#define SECURITY_STAT_BUSY (1 << 0)
- +#define SECURITY_KEY_VALUE(x) (0x10 + (x) * 4)
- +#define SECURITY_KEY_IN(x) (0x30 + (x) * 4)
- +#define SECURITY_KEY_OUT(x) (0x50 + (x) * 4)
- +#define SECURITY_KEY_HASH(x) (0x70 + (x) * 4)
- +
- +/*
- + * OCP-ICCR
- + */
- +#define ICCR_BASE (OCP_BASE + OCP_ICCR)
- +#define ICACHE_TOTAL_SIZE 16384 /* in bytes */
- +
- +/*
- + * OCP-DCCR
- + */
- +#define DCCR_BASE (OCP_BASE + OCP_DCCR)
- +#if defined(IP5000) || defined(IP5000_REV2)
- +#define DCACHE_TOTAL_SIZE 8192 /* in bytes */
- +#elif defined(IP7000) || defined(IP7000_REV2)
- +#define DCACHE_TOTAL_SIZE 16384 /* in bytes */
- +#endif
- +
- +#if defined(IP5000) || defined(IP5000_REV2) || defined(IP7000) || defined(IP7000_REV2)
- +#define DCACHE_WRITE_QUEUE_LENGTH 6
- +#else
- +#error "Unknown IP5K silicon"
- +#endif
- +
- +#define CACHE_LINE_SIZE 32 /* in bytes */
- +
- +#define CCR_ADDR 0x00
- +#define CCR_RDD 0x04
- +#define CCR_WRD 0x08
- +#define CCR_STAT 0x0c
- +#define CCR_CTRL 0x10
- +
- +#define CCR_STAT_MCBE 0
- +#define CCR_STAT_WIDEL 1 /* D-cache only */
- +
- +#define CCR_CTRL_DONE 0
- +#define CCR_CTRL_RESET 2
- +#define CCR_CTRL_VALID 3
- +#define CCR_CTRL_RD_DATA (1 << 4)
- +#define CCR_CTRL_RD_TAG (2 << 4)
- +#define CCR_CTRL_WR_DATA (3 << 4)
- +#define CCR_CTRL_WR_TAG (4 << 4)
- +#define CCR_CTRL_INV_INDEX (5 << 4)
- +#define CCR_CTRL_INV_ADDR (6 << 4)
- +#define CCR_CTRL_FLUSH_INDEX (7 << 4) /* D-cache only */
- +#define CCR_CTRL_FLUSH_INV_INDEX (8 << 4) /* D-cache only */
- +#define CCR_CTRL_FLUSH_ADDR (9 << 4) /* D-cache only */
- +#define CCR_CTRL_FLUSH_INV_ADDR (10 << 4) /* D-cache only */
- +
- +/*
- + * OCP-OCMC
- + */
- +#define OCMC_BASE (OCP_BASE + OCP_OCMC)
- +#define OCMC_BANK_MASK 0x00
- +#define OCMC_BIST_CNTL 0x04 /* IP5000 only */
- +#define OCMC_BIST_STAT 0x08 /* IP5000 only */
- +
- +#define OCMC_BANK_PROG(n) ((1<<(n))-1)
- +
- +#define OCMC_BIST_WRCK (1 << 7)
- +#define OCMC_BIST_RESET (1 << 5)
- +#define OCMC_BIST_SMART (1 << 4)
- +#define OCMC_BIST_RUN (1 << 3)
- +#define OCMC_BIST_REPAIR (1 << 2)
- +
- +#define OCMC_BIST_READY (1 << 3)
- +#define OCMC_BIST_FAIL (1 << 2)
- +
- +/*
- + * OCP-STATISTICS
- + */
- +#define STATISTICS_BASE (OCP_BASE + OCP_STATISTICS)
- +#define STAT_COUNTER_CTRL(n) ((n)*8)
- +#define STAT_COUNTER(n) ((n)*8 + 4)
- +
- +#define STAT_EVENT_MP_INST 0
- +#define STAT_EVENT_OCM_ACCESS 4
- +#define STAT_EVENT_OCM_REQ 5
- +#define STAT_EVENT_IC_REQ_INVAL 13
- +#define STAT_EVENT_IC_MISS_INVAL 14
- +#define STAT_EVENT_IC_REQ_INVAL_NACK 15
- +#define STAT_EVENT_IC_REQ_VAL 16
- +#define STAT_EVENT_IC_MISS_VAL 17
- +#define STAT_EVENT_IC_REQ_VAL_NACK 18
- +#define STAT_EVENT_IC_MISS_Q 19
- +#define STAT_EVENT_DC_RD_REQ 20
- +#define STAT_EVENT_DC_RD_MISS 21
- +#define STAT_EVENT_DC_WR_REQ 22
- +#define STAT_EVENT_DC_WR_MISS 23
- +#define STAT_EVENT_DC_MISS_Q 24
- +#define STAT_EVENT_DC_WB_FULL 25
- +#define STAT_EVENT_DC_REQ_NACK 26
- +#define STAT_EVENT_DC_CORE_REQ 27
- +#define STAT_EVENT_DC_MISS 28
- +#define STAT_EVENT_DC_EVICT 29
- +#define STAT_EVENT_TRUE 30
- +#define STAT_EVENT_FALSE 31
- +
- +/*
- + * OCP_MTEST
- + */
- +#define MTEST_BASE (OCP_BASE + OCP_MTEST)
- +#define MTEST_ADDR 0x00
- +#define MTEST_WR 0x04
- +#define MTEST_RD 0x08
- +#define MTEST_CTRL 0x0c
- +
- +/*
- + * OCP_MCFG (IP7000 only)
- + */
- +#define MCFG_BASE (OCP_BASE + OCP_MCFG)
- +#define MCFG_CTRL 0x00
- +#define MCFG_WCFG 0x04
- +#define MCFG_RCFG 0x08
- +
- +/*
- + * Port registers
- + */
- +#define IO_BASE 0x02000000
- +#define RA (IO_BASE + 0x00000000)
- +#define RB (IO_BASE + 0x00001000)
- +#define RC (IO_BASE + 0x00002000)
- +#define RD (IO_BASE + 0x00003000)
- +#define RE (IO_BASE + 0x00004000)
- +#define RF (IO_BASE + 0x00005000)
- +#define RG (IO_BASE + 0x00006000)
- +#define RH (IO_BASE + 0x00007000)
- +#define RI (IO_BASE + 0x00008000)
- +#define RJ (IO_BASE + 0x00009000)
- +#define RLATCH (IO_BASE + 0x00ff0000) // For latched output only
- +#define IO_PORT_BR_OFFSET 0x00000800
- +
- +/*
- + * General I/O Register Map (per port)
- + */
- +#define IO_FUNC 0x00
- +#define IO_GPIO_CTL 0x04
- +#define IO_GPIO_OUT 0x08
- +#define IO_GPIO_IN 0x0C
- +#define IO_INT_STATUS 0x10
- +#define IO_INT_MASK 0x14
- +#define IO_INT_SET 0x18
- +#define IO_INT_CLR 0x1C
- +#define IO_TX_FIFO 0x20
- +#define IO_TX_FIFO_HI 0x24
- +#define IO_RX_FIFO 0x28
- +#define IO_RX_FIFO_HI 0x2c
- +#define IO_CTL0 0x30
- +#define IO_CTL1 0x34
- +#define IO_CTL2 0x38
- +#define IO_STATUS0 0x3c
- +#define IO_STATUS1 0x40
- +#define IO_STATUS2 0x44
- +#define IO_FIFO_WATER 0x48
- +#define IO_FIFO_LEVEL 0x4c
- +#define IO_GPIO_MASK 0x50
- +
- +#define IO_FUNC_FUNCTION_RESET(func) ((1 << ((func) - 1)) << 4) /* Function 0 doesn't need reset */
- +#define IO_FUNC_RX_FIFO (1 << 3)
- +#define IO_FUNC_SELECT(func) ((func) << 0)
- +
- +/*
- + * External interrupt pins.
- + */
- +#define EXT_INT_IO_BIT(pin) ((pin) + 5) // Interrupt pin number -> I/O INT bit
- +#define EXT_INT_RISING_EDGE(pin) (0x2 << (2*(pin) + 7))
- +#define EXT_INT_FALLING_EDGE(pin) (0x1 << (2*(pin) + 7))
- +
- +/*
- + * Flash
- + */
- +#define IO_XFL_BASE RA
- +
- +#define IO_XFL_INT_START (1 << 16)
- +#define IO_XFL_INT_ERR (1 << 8)
- +#define IO_XFL_INT_DONE (1 << 0)
- +
- +#define IO_XFL_CTL0_MASK (0xffe07fff)
- +#define IO_XFL_CTL0_RD_CMD(cmd) (((cmd) & 0xff) << 24)
- +#define IO_XFL_CTL0_RD_DUMMY(n) (((n) & 0x7) << 21)
- +#define IO_XFL_CTL0_CLK_WIDTH(core_cycles) ((((core_cycles) + 1) & 0x7e) << 8) /* must be even number */
- +#define IO_XFL_CTL0_CE_WAIT(spi_cycles) (((spi_cycles) & 0x3f) << 2)
- +#define IO_XFL_CTL0_MCB_LOCK (1 << 1)
- +#define IO_XFL_CTL0_ENABLE (1 << 0)
- +#define IO_XFL_CTL0_FAST_VALUE(div, wait) (IO_XFL_CTL0_RD_CMD(0xb) | IO_XFL_CTL0_RD_DUMMY(1) | IO_XFL_CTL0_CLK_WIDTH(div) | IO_XFL_CTL0_CE_WAIT(wait) | IO_XFL_CTL0_ENABLE)
- +#define IO_XFL_CTL0_VALUE(div, wait) (IO_XFL_CTL0_RD_CMD(3) | IO_XFL_CTL0_CLK_WIDTH(div) | IO_XFL_CTL0_CE_WAIT(wait) | IO_XFL_CTL0_ENABLE)
- +
- +#define IO_XFL_CTL1_MASK (0xc0003fff)
- +#define IO_XFL_CTL1_FC_INST(inst) (((inst) & 0x3) << 30)
- +#define IO_XFL_CTL1_FC_DATA(n) (((n) & 0x3ff) << 4)
- +#define IO_XFL_CTL1_FC_DUMMY(n) (((n) & 0x7) << 1)
- +#define IO_XFL_CTL1_FC_ADDR (1 << 0)
- +
- +#define IO_XFL_CTL2_FC_CMD(cmd) (((cmd) & 0xff) << 24)
- +#define IO_XFL_CTL2_FC_ADDR(addr) ((addr) & 0x00ffffff) /* Only up to 24 bits */
- +
- +#define IO_XFL_STATUS0_MCB_ACTIVE (1 << 0)
- +#define IO_XFL_STATUS0_IOPCS_ACTIVE (1 << 1)
- +
- +/*
- + * SDRAM
- + */
- +#define IO_SDRAM_DATA_BASE RG
- +#define IO_SDRAM_CNTL_BASE RH
- +
- +#define IO_SDRAM_CTRL0_EN_REF (1 << 0)
- +
- +/*
- + * Port function code (common fucntion codes for all I/O ports)
- + */
- +#define IO_PORTX_FUNC_GPIO 0x00
- +#define IO_PORTX_FUNC_XFL 0x01
- +#define IO_PORTX_FUNC_PCI 0x01
- +#define IO_PORTX_FUNC_SERDES 0x01
- +#define IO_PORTX_FUNC_GMII 0x01
- +#define IO_PORTX_FUNC_DDR 0x01
- +#define IO_PORTX_FUNC_PCIX 0x01
- +#define IO_PORTX_FUNC_USB2_0 0x01
- +#define IO_PORTX_FUNC_GPIO_INT_CLK 0x02
- +#define IO_PORTX_FUNC_PLIO 0x02
- +#define IO_PORTX_FUNC_GPIO_INT 0x03
- +#define IO_PORTX_FUNC_MII 0x03
- +
- +/*
- + * Port 0
- + */
- +#define IO_PORT0_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT0_FUNC_XFL_INT_CLK IO_PORTX_FUNC_XFL // Default mode after reset
- +#define IO_PORT0_FUNC_GPIO_INT_CLK IO_PORTX_FUNC_GPIO_INT_CLK
- +#define IO_PORT0_FUNC_GPIO_INT IO_PORTX_FUNC_GPIO_INT
- +
- +/*
- + * Port 1
- + */
- +#define IO_PORT1_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT1_FUNC_PCI IO_PORTX_FUNC_PCI // PCI control
- +#define IO_PORT1_FUNC_MII IO_PORTX_FUNC_MII // port 4 MII extension
- +
- +/*
- + * Port 2
- + */
- +#define IO_PORT2_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT2_FUNC_PCI IO_PORTX_FUNC_PCI // PCI data I/O
- +#define IO_PORT2_FUNC_PLIO IO_PORTX_FUNC_PLIO // Extended LM
- +
- +/*
- + * Port 3
- + */
- +#define IO_PORT3_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT3_FUNC_SERDES IO_PORTX_FUNC_SERDES
- +#define IO_PORT3_FUNC_PLIO IO_PORTX_FUNC_PLIO
- +
- +/*
- + * Port 4
- + */
- +#define IO_PORT4_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT4_FUNC_SERDES IO_PORTX_FUNC_SERDES
- +#define IO_PORT4_FUNC_PLIO IO_PORTX_FUNC_PLIO // Extended LM
- +#define IO_PORT4_FUNC_MII IO_PORTX_FUNC_MII
- +
- +/*
- + * Port 5
- + */
- +#define IO_PORT5_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT5_FUNC_GMII IO_PORTX_FUNC_GMII
- +
- +/*
- + * Port 6
- + */
- +#define IO_PORT6_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT6_FUNC_DDR IO_PORTX_FUNC_DDR
- +
- +/*
- + * Port 7
- + */
- +#define IO_PORT7_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT7_FUNC_DDR IO_PORTX_FUNC_DDR
- +
- +/*
- + * Port 8
- + */
- +#define IO_PORT8_FUNC_GPIO IO_PORTX_FUNC_GPIO
- +#define IO_PORT8_FUNC_PCIX IO_PORTX_FUNC_PCIX
- +#define IO_PORT8_FUNC_PLIO IO_PORTX_FUNC_PLIO // Extended LM
- +#define IO_PORT8_FUNC_MII IO_PORTX_FUNC_MII // port 4 MII extension
- +
- +/*
- + * Port 9
- + */
- +#define IO_PORT9_FUNC_USB2_0 IO_PORTX_FUNC_USB2_0
- +
- +/*
- + * FIFO
- + */
- +#define IO_PORTX_INT_FIFO_TX_RESET (1 << 31)
- +#define IO_PORTX_INT_FIFO_RX_RESET (1 << 30)
- +#define IO_PORTX_INT_FIFO_TX_UF (1 << 15)
- +#define IO_PORTX_INT_FIFO_TX_WM (1 << 14)
- +#define IO_PORTX_INT_FIFO_RX_OF (1 << 13)
- +#define IO_PORTX_INT_FIFO_RX_WM (1 << 12)
- +
- +#define IO_PORTX_FUNC_FIFO_TX_WM(n) ((n) << 16)
- +#define IO_PORTX_FUNC_FIFO_RX_WM(n) ((n) << 0)
- +
- +/*
- + * MII
- + */
- +#define IO_PORTX_INT_MII_TX_ERR_SEND (1 << 18)
- +#define IO_PORTX_INT_MII_TX_HALT (1 << 17)
- +#define IO_PORTX_INT_MII_TX_START (1 << 16)
- +#define IO_PORTX_INT_MII_THRESHOLD (1 << 8)
- +#define IO_PORTX_INT_MII_RX_EOP (1 << 7)
- +#define IO_PORTX_INT_MII_RX_SFD (1 << 6)
- +#define IO_PORTX_INT_MII_RX_ERR (1 << 5)
- +#define IO_PORTX_INT_MII_TX_EOP (1 << 4)
- +#define IO_PORTX_INT_MII_COL (1 << 3)
- +#define IO_PORTX_INT_MII_CRS (1 << 2)
- +#define IO_PORTX_INT_MII_ODD_NIB_ERR (1 << 1)
- +#define IO_PORTX_INT_MII_FALSE_CARRIER (1 << 0)
- +
- +/*
- + * SerDes
- + */
- +#define IO_PORTX_INT_SERDES_TXBUF_VALID (1 << 16)
- +#define IO_PORTX_INT_SERDES_RXERR (1 << 7)
- +#define IO_PORTX_INT_SERDES_RXEOP (1 << 6)
- +#define IO_PORTX_INT_SERDES_SYND (1 << 5)
- +#define IO_PORTX_INT_SERDES_TXBE (1 << 4)
- +#define IO_PORTX_INT_SERDES_TXEOP (1 << 3)
- +#define IO_PORTX_INT_SERDES_SXLP (1 << 2)
- +#define IO_PORTX_INT_SERDES_RXBF (1 << 1)
- +#define IO_PORTX_INT_SERDES_RXCRS (1 << 0)
- +
- +#ifndef __ASSEMBLY__
- +struct ubicom32_io_port {
- + volatile u32_t function;
- + volatile u32_t gpio_ctl;
- + volatile u32_t gpio_out;
- + volatile u32_t gpio_in;
- + volatile u32_t int_status;
- + volatile u32_t int_mask;
- + volatile u32_t int_set;
- + volatile u32_t int_clr;
- + volatile u32_t tx_fifo;
- + volatile u32_t tx_fifo_hi;
- + volatile u32_t rx_fifo;
- + volatile u32_t rx_fifo_hi;
- + volatile u32_t ctl0;
- + volatile u32_t ctl1;
- + volatile u32_t ctl2;
- + volatile u32_t status0;
- + volatile u32_t status1;
- + volatile u32_t status2;
- + volatile u32_t fifo_watermark;
- + volatile u32_t fifo_level;
- + volatile u32_t gpio_mask;
- +};
- +
- +#define UBICOM32_IO_PORT(port) ((struct ubicom32_io_port *)((port)))
- +#endif
- +
- +#ifndef __ASSEMBLY__
- +/*
- + * ubicom32_set_interrupt()
- + */
- +extern inline void ubicom32_set_interrupt(u8_t interrupt)
- +{
- + u32_t ibit = INT_BIT_MASK(interrupt);
- +
- + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
- + asm volatile (
- + "move.4 "D(INT_SET(INT_CHIP(0, 0)))", %0\n\t"
- + :
- + : "r" (ibit)
- + );
- +
- + return;
- + }
- +
- + asm volatile (
- + "move.4 "D(INT_SET(INT_CHIP(1, 0)))", %0\n\t"
- + :
- + : "r" (ibit)
- + );
- +}
- +
- +/*
- + * ubicom32_clear_interrupt()
- + */
- +extern inline void ubicom32_clear_interrupt(u8_t interrupt)
- +{
- + u32_t ibit = INT_BIT_MASK(interrupt);
- +
- + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
- + asm volatile (
- + "move.4 "D(INT_CLR(INT_CHIP(0, 0)))", %0\n\t"
- + :
- + : "r" (ibit)
- + );
- +
- + return;
- + }
- +
- + asm volatile (
- + "move.4 "D(INT_CLR(INT_CHIP(1, 0)))", %0\n\t"
- + :
- + : "r" (ibit)
- + );
- +}
- +
- +/*
- + * ubicom32_enable_interrupt()
- + */
- +extern inline void ubicom32_enable_interrupt(u8_t interrupt)
- +{
- + u32_t ibit = INT_BIT_MASK(interrupt);
- +
- + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
- + asm volatile (
- + "or.4 "D(INT_MASK(INT_CHIP(0, 0)))", "D(INT_MASK(INT_CHIP(0, 0)))", %0\n\t"
- + :
- + : "d" (ibit)
- + );
- +
- + return;
- + }
- +
- + asm volatile (
- + "or.4 "D(INT_MASK(INT_CHIP(1, 0)))", "D(INT_MASK(INT_CHIP(1, 0)))", %0\n\t"
- + :
- + : "d" (ibit)
- + );
- +}
- +
- +/*
- + * ubicom32_disable_interrupt()
- + */
- +extern inline void ubicom32_disable_interrupt(u8_t interrupt)
- +{
- + u32_t ibit = ~INT_BIT_MASK(interrupt);
- +
- + if (INT_REG(interrupt) == INT_REG(INT_CHIP(0, 0))) {
- + asm volatile (
- + "and.4 "D(INT_MASK(INT_CHIP(0, 0)))", "D(INT_MASK(INT_CHIP(0, 0)))", %0\n\t"
- + :
- + : "d" (ibit)
- + );
- +
- + return;
- + }
- +
- + asm volatile (
- + "and.4 "D(INT_MASK(INT_CHIP(1, 0)))", "D(INT_MASK(INT_CHIP(1, 0)))", %0\n\t"
- + :
- + : "d" (ibit)
- + );
- +}
- +
- +/*
- + * ubicom32_enable_global_interrupts()
- + */
- +extern inline void ubicom32_enable_global_interrupts(void)
- +{
- + asm volatile(
- + "bset GLOBAL_CTRL, GLOBAL_CTRL, #%bit("D(GLOBAL_CTRL_INT_EN)")"
- + );
- +}
- +
- +/*
- + * ubicom32_disable_global_interrupts()
- + */
- +extern inline void ubicom32_disable_global_interrupts(void)
- +{
- + asm volatile(
- + "bclr GLOBAL_CTRL, GLOBAL_CTRL, #%bit("D(GLOBAL_CTRL_INT_EN)")"
- + );
- +}
- +
- +/*
- + * ubicom32_get_reset_reason()
- + */
- +extern inline u32_t ubicom32_get_reset_reason(void)
- +{
- + return *(u32_t *)(GENERAL_CFG_BASE + GEN_RESET_REASON);
- +}
- +
- +/*
- + * ubicom32_read_reg()
- + */
- +extern inline u32_t ubicom32_read_reg(volatile void *reg)
- +{
- + u32_t v;
- + asm volatile (
- + "move.4 %[dest], %[src] \n\t"
- + : [dest] "=r" (v)
- + : [src] "m" (*(u32_t *)reg)
- + );
- + return v;
- +}
- +
- +/*
- + * ubicom32_write_reg()
- + */
- +extern inline void ubicom32_write_reg(volatile void *reg, u32_t v)
- +{
- + asm volatile (
- + "move.4 %[dest], %[src] \n\t"
- + :
- + : [src] "r" (v), [dest] "m" (*(u32_t *)reg)
- + );
- +}
- +
- +#endif /* __ASSEMBLY__ */
- +#endif /* _ASM_UBICOM32_IP5000_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ipcbuf.h linux-2.6.28.10/arch/ubicom32/include/asm/ipcbuf.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ipcbuf.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ipcbuf.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,55 @@
- +/*
- + * arch/ubicom32/include/asm/ipcbuf.h
- + * Definition of ipc64_perm struct for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_IPCBUF_H
- +#define _ASM_UBICOM32_IPCBUF_H
- +
- +/*
- + * The user_ipc_perm structure for m68k 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
- + */
- +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 /* _ASM_UBICOM32_IPCBUF_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/irqflags.h linux-2.6.28.10/arch/ubicom32/include/asm/irqflags.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/irqflags.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/irqflags.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,94 @@
- +/*
- + * arch/ubicom32/include/asm/irqflags.h
- + * Raw implementation of local IRQ functions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_IRQFLAGS_H
- +#define _ASM_UBICOM32_IRQFLAGS_H
- +
- +#include <linux/thread_info.h>
- +#include <asm/ubicom32-common.h>
- +#include <asm/smp.h>
- +#include <asm/ldsr.h>
- +
- +#if defined(CONFIG_PREEMPT)
- +#error Not supported by Ubicom32 irq handling, yet!
- +#endif
- +
- +/*
- + * raw_local_irq_enable()
- + * Enable interrupts for this thread.
- + */
- +static inline void raw_local_irq_enable(void)
- +{
- + ldsr_local_irq_enable();
- +}
- +
- +/*
- + * raw_local_irq_disable()
- + * Disable interrupts for this thread.
- + */
- +static inline void raw_local_irq_disable(void)
- +{
- + ldsr_local_irq_disable();
- +}
- +
- +/*
- + * raw_local_save_flags()
- + * Get the current IRQ state.
- + */
- +#define raw_local_save_flags(flags) \
- +do { \
- + (flags) = ldsr_local_irq_is_disabled(); \
- +} while (0)
- +
- +/*
- + * raw_local_irq_save()
- + * Save the current interrupt state and disable interrupts.
- + */
- +#define raw_local_irq_save(flags) \
- +do { \
- + (flags) = ldsr_local_irq_save(); \
- +} while (0)
- +
- +/*
- + * raw_local_irq_restore()
- + * Restore the IRQ state back to flags.
- + */
- +static inline void raw_local_irq_restore(unsigned long flags)
- +{
- + ldsr_local_irq_restore(flags);
- +}
- +
- +/*
- + * raw_irqs_disabled_flags()
- + * Return true if the flags indicate that IRQ(s) are disabled.
- + */
- +static inline int raw_irqs_disabled_flags(unsigned long flags)
- +{
- + return (flags);
- +}
- +
- +#endif /* _ASM_UBICOM32_IRQFLAGS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/irq.h linux-2.6.28.10/arch/ubicom32/include/asm/irq.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/irq.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/irq.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,45 @@
- +/*
- + * arch/ubicom32/include/asm/irq.h
- + * IRQ definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_IRQ_H
- +#define _ASM_UBICOM32_IRQ_H
- +
- +#include <asm/irqflags.h>
- +
- +/*
- + * We setup the IRQS to cover the full range of interrupt registers in
- + * processor.
- + */
- +#define NR_IRQS 64
- +
- +#define irq_canonicalize(irq) (irq)
- +
- +extern int irq_soft_alloc(unsigned int *soft);
- +extern void ack_bad_irq(unsigned int irq);
- +extern void do_IRQ(int irq, struct pt_regs *fp);
- +
- +#endif /* _ASM_UBICOM32_IRQ_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/irq_regs.h linux-2.6.28.10/arch/ubicom32/include/asm/irq_regs.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/irq_regs.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/irq_regs.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/irq_regs.h
- + * Generic irq_regs.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_IRQ_REGS_H
- +#define _ASM_UBICOM32_IRQ_REGS_H
- +
- +#include <asm-generic/irq_regs.h>
- +
- +#endif /* _ASM_UBICOM32_IRQ_REGS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/Kbuild linux-2.6.28.10/arch/ubicom32/include/asm/Kbuild
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/Kbuild 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/Kbuild 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1 @@
- +include include/asm-generic/Kbuild.asm
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/kdebug.h linux-2.6.28.10/arch/ubicom32/include/asm/kdebug.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/kdebug.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/kdebug.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/kdebug.h
- + * Generic kdebug.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_KDEBUG_H
- +#define _ASM_UBICOM32_KDEBUG_H
- +
- +#include <asm-generic/kdebug.h>
- +
- +#endif /* _ASM_UBICOM32_KDEBUG_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/kmap_types.h linux-2.6.28.10/arch/ubicom32/include/asm/kmap_types.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/kmap_types.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/kmap_types.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,48 @@
- +/*
- + * arch/ubicom32/include/asm/kmap_types.h
- + * Definition of km_type's for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_KMAP_TYPES_H
- +#define _ASM_UBICOM32_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 /* _ASM_UBICOM32_KMAP_TYPES_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ldsr.h linux-2.6.28.10/arch/ubicom32/include/asm/ldsr.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ldsr.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ldsr.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,186 @@
- +/*
- + * arch/ubicom32/include/asm/ldsr.h
- + * Ubicom32 LDSR interface definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_LDSR_H
- +#define _ASM_UBICOM32_LDSR_H
- +
- +#include <asm/ubicom32-common.h>
- +#include <asm/types.h>
- +#include <asm/thread.h>
- +
- +extern unsigned int ldsr_soft_irq_mask;
- +
- +/*
- + * ldsr_local_irq_is_disabled()
- + * Test if interrupts are disabled for this thread?
- + */
- +static inline int ldsr_local_irq_is_disabled(void)
- +{
- + int ret;
- + thread_t self = thread_get_self();
- + unsigned int mask = (1 << self);
- +
- + asm volatile (
- + " and.4 %0, scratchpad1, %1 \n\t"
- + : "=r" (ret)
- + : "d" (mask)
- + : "cc"
- + );
- +
- + /*
- + * We return a simple 1 == disabled, 0 == enabled
- + * losing which tid this is for, because Linux
- + * can restore interrupts on a different thread.
- + */
- + return ret >> self;
- +}
- +
- +/*
- + * ldsr_local_irq_save()
- + * Get the current interrupt state and disable interrupts.
- + */
- +static inline unsigned int ldsr_local_irq_save(void)
- +{
- + int ret;
- + thread_t self = thread_get_self();
- + unsigned int mask = (1 << self);
- +
- + /*
- + * Ensure the compiler can not optimize out the code
- + * (volatile) and that it does not "cache" values around
- + * the interrupt state change (memory). This ensures
- + * that interrupt changes are treated as a critical
- + * section.
- + */
- + asm volatile (
- + " and.4 %0, scratchpad1, %1 \n\t"
- + " or.4 scratchpad1, scratchpad1, %1 \n\t"
- + : "=&r" (ret)
- + : "d" (mask)
- + : "cc", "memory"
- + );
- +
- + /*
- + * We return a simple 1 == disabled, 0 == enabled
- + * losing which tid this is for, because Linux
- + * can restore interrupts on a different thread.
- + */
- + return ret >> self;
- +}
- +
- +/*
- + * ldsr_local_irq_restore()
- + * Restore this cpu's interrupt enable/disable state.
- + *
- + * Note: flags is either 0 or 1.
- + */
- +static inline void ldsr_local_irq_restore(unsigned int flags)
- +{
- + unsigned int temp;
- + thread_t self = thread_get_self();
- + unsigned int mask = (1 << self);
- + flags = (flags << self);
- +
- + /*
- + * Ensure the compiler can not optimize out the code
- + * (volatile) and that it does not "cache" values around
- + * the interrupt state change (memory). This ensures
- + * that interrupt changes are treated as a critical
- + * section.
- + *
- + * Atomic change to our bit in scratchpad1 without
- + * causing any temporary glitch in the value and
- + * without effecting other values. Also this uses
- + * no branches so no penalties.
- + */
- + asm volatile (
- + " xor.4 %0, scratchpad1, %1 \n\t"
- + " and.4 %0, %2, %0 \n\t"
- + " xor.4 scratchpad1, scratchpad1, %0 \n\t"
- + " move.4 int_set0, %3 \n\t"
- + : "=&d"(temp)
- + : "d"(flags), "r"(mask), "r"(ldsr_soft_irq_mask)
- + : "cc", "memory"
- + );
- +}
- +
- +/*
- + * ldsr_local_irq_disable_interrupt()
- + * Disable ints for this thread.
- + */
- +static inline void ldsr_local_irq_disable(void)
- +{
- + unsigned int mask = (1 << thread_get_self());
- +
- + /*
- + * Ensure the compiler can not optimize out the code
- + * (volatile) and that it does not "cache" values around
- + * the interrupt state change (memory). This ensures
- + * that interrupt changes are treated as a critical
- + * section.
- + */
- + asm volatile (
- + " or.4 scratchpad1, scratchpad1, %0 \n\t"
- + :
- + : "d" (mask)
- + : "cc", "memory"
- + );
- +}
- +
- +/*
- + * ldsr_local_irq_enable_interrupt
- + * Enable ints for this thread.
- + */
- +static inline void ldsr_local_irq_enable(void)
- +{
- + unsigned int mask = (1 << thread_get_self());
- +
- + /*
- + * Ensure the compiler can not optimize out the code
- + * (volatile) and that it does not "cache" values around
- + * the interrupt state change (memory). This ensures
- + * that interrupt changes are treated as a critical
- + * section.
- + */
- + asm volatile (
- + " and.4 scratchpad1, scratchpad1, %0 \n\t"
- + " move.4 int_set0, %1 \n\t"
- + :
- + : "d" (~mask), "r" (ldsr_soft_irq_mask)
- + : "cc", "memory"
- + );
- +}
- +
- +extern void ldsr_init(void);
- +extern void ldsr_set_trap_irq(unsigned int irq);
- +extern void ldsr_mask_vector(unsigned int vector);
- +extern void ldsr_unmask_vector(unsigned int vector);
- +extern void ldsr_enable_vector(unsigned int vector);
- +extern void ldsr_disable_vector(unsigned int vector);
- +extern thread_t ldsr_get_threadid(void);
- +
- +#endif /* _ASM_UBICOM32_LDSR_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/linkage.h linux-2.6.28.10/arch/ubicom32/include/asm/linkage.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/linkage.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/linkage.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,34 @@
- +/*
- + * arch/ubicom32/include/asm/linkage.h
- + * Definition of Ubicom32 architecture specific linkage types.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_LINKAGE_H
- +#define _ASM_UBICOM32_LINKAGE_H
- +
- +#define __ocm_text __section(.ocm_text)
- +#define __ocm_data __section(.ocm_data)
- +
- +#endif /* _ASM_UBICOM32_LINKAGE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/local.h linux-2.6.28.10/arch/ubicom32/include/asm/local.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/local.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/local.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/local.h
- + * Generic local.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_LOCAL_H
- +#define _ASM_UBICOM32_LOCAL_H
- +
- +#include <asm-generic/local.h>
- +
- +#endif /* _ASM_UBICOM32_LOCAL_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/machdep.h linux-2.6.28.10/arch/ubicom32/include/asm/machdep.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/machdep.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/machdep.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,43 @@
- +/*
- + * arch/ubicom32/include/asm/machdep.h
- + * Machine dependent utility routines.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_MACHDEP_H
- +#define _ASM_UBICOM32_MACHDEP_H
- +
- +#include <linux/interrupt.h>
- +
- +/* Hardware clock functions */
- +extern unsigned long hw_timer_offset(void);
- +
- +/* machine dependent power off functions */
- +extern void (*mach_reset)(void);
- +extern void (*mach_halt)(void);
- +extern void (*mach_power_off)(void);
- +
- +extern void config_BSP(char *command, int len);
- +
- +#endif /* _ASM_UBICOM32_MACHDEP_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mc146818rtc.h linux-2.6.28.10/arch/ubicom32/include/asm/mc146818rtc.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mc146818rtc.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/mc146818rtc.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,36 @@
- +/*
- + * arch/ubicom32/include/asm/mc146818rtc.h
- + * Generic mc146818rtc.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +/*
- + * Machine dependent access functions for RTC registers.
- + */
- +#ifndef _ASM_UBICOM32_MC146818RTC_H
- +#define _ASM_UBICOM32_MC146818RTC_H
- +
- +/* empty include file to satisfy the include in genrtc.c/ide-geometry.c */
- +
- +#endif /* _ASM_UBICOM32_MC146818RTC_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mman.h linux-2.6.28.10/arch/ubicom32/include/asm/mman.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mman.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/mman.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,44 @@
- +/*
- + * arch/ubicom32/include/asm/mman.h
- + * Memory mapping definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_MMAN_H
- +#define _ASM_UBICOM32_MMAN_H
- +
- +#include <asm-generic/mman.h>
- +
- +#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 MCL_CURRENT 1 /* lock all current mappings */
- +#define MCL_FUTURE 2 /* lock all future mappings */
- +
- +#endif /* _ASM_UBICOM32_MMAN_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu_context.h linux-2.6.28.10/arch/ubicom32/include/asm/mmu_context.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu_context.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/mmu_context.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,60 @@
- +/*
- + * arch/ubicom32/include/asm/mmu_context.h
- + * MMU context definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2004, Microtronix Datacom Ltd., All rights reserved.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_MMU_CONTEXT_H
- +#define _ASM_UBICOM32_MMU_CONTEXT_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 /* _ASM_UBICOM32_MMU_CONTEXT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu.h linux-2.6.28.10/arch/ubicom32/include/asm/mmu.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mmu.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/mmu.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,41 @@
- +/*
- + * arch/ubicom32/include/asm/mmu.h
- + * Definition of mm_context_t struct for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2002, David McCullough <[email protected]>
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_MMU_H
- +#define _ASM_UBICOM32_MMU_H
- +
- +typedef struct {
- + struct vm_list_struct *vmlist;
- + unsigned long end_brk;
- +#ifdef CONFIG_BINFMT_ELF_FDPIC
- + unsigned long exec_fdpic_loadmap;
- + unsigned long interp_fdpic_loadmap;
- +#endif
- +} mm_context_t;
- +
- +#endif /* _ASM_UBICOM32_MMU_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/module.h linux-2.6.28.10/arch/ubicom32/include/asm/module.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/module.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/module.h 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,44 @@
- +/*
- + * arch/ubicom32/include/asm/module.h
- + * Ubicom32 architecture specific module definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_MODULE_H
- +#define _ASM_UBICOM32_MODULE_H
- +
- +struct mod_arch_specific {
- + void *ocm_inst;
- + int ocm_inst_size;
- +};
- +
- +#define Elf_Shdr Elf32_Shdr
- +#define Elf_Sym Elf32_Sym
- +#define Elf_Ehdr Elf32_Ehdr
- +
- +#define ARCH_PROC_MODULES_EXTRA(m,mod) \
- + seq_printf(m, " OCM(%d bytes @ 0x%p)", \
- + (mod)->arch.ocm_inst_size, (mod)->arch.ocm_inst)
- +
- +#endif /* _ASM_UBICOM32_MODULE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/msgbuf.h linux-2.6.28.10/arch/ubicom32/include/asm/msgbuf.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/msgbuf.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/msgbuf.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,58 @@
- +/*
- + * arch/ubicom32/include/asm/msgbuf.h
- + * Definition of msqid64_ds struct for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_MSGBUF_H
- +#define _ASM_UBICOM32_MSGBUF_H
- +
- +/*
- + * The msqid64_ds structure for ubicom32 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 /* _ASM_UBICOM32_MSGBUF_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/mutex.h linux-2.6.28.10/arch/ubicom32/include/asm/mutex.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/mutex.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/mutex.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,41 @@
- +/*
- + * arch/ubicom32/include/asm/mutex.h
- + * Generic mutex.h for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +/*
- + * Pull in the generic implementation for the mutex fastpath.
- + *
- + * TODO: implement optimized primitives instead, or leave the generic
- + * implementation in place, or pick the atomic_xchg() based generic
- + * implementation. (see asm-generic/mutex-xchg.h for details)
- + */
- +
- +#ifndef _ASM_UBICOM32_MUTEX_H
- +#define _ASM_UBICOM32_MUTEX_H
- +
- +#include <asm-generic/mutex-dec.h>
- +
- +#endif /* _ASM_UBICOM32_MUTEX_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/namei.h linux-2.6.28.10/arch/ubicom32/include/asm/namei.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/namei.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/namei.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,38 @@
- +/*
- + * arch/ubicom32/include/asm/namei.h
- + * Definition of __emul_prefix() for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_NAMEI_H
- +#define _ASM_UBICOM32_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 /* _ASM_UBICOM32_NAMEI_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm-alloc.h linux-2.6.28.10/arch/ubicom32/include/asm/ocm-alloc.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm-alloc.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ocm-alloc.h 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,36 @@
- +/*
- + * arch/ubicom32/include/asm/ocm-alloc.h
- + * Ubicom32 architecture specific ocm definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_OCM_ALLOC_H
- +#define _ASM_UBICOM32_OCM_ALLOC_H
- +
- +
- +extern void *ocm_inst_alloc(size_t size, pid_t pid);
- +extern int ocm_free(const void *ptr);
- +extern int ocm_inst_free(const void *ptr);
- +
- +#endif /* _ASM_UBICOM32_OCM_ALLOC_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_size.h linux-2.6.28.10/arch/ubicom32/include/asm/ocm_size.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_size.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ocm_size.h 2009-08-06 11:15:34.000000000 +0300
- @@ -0,0 +1,2 @@
- +#define APP_OCM_CODE_SIZE (0x3ffc2e00-0x3ffc0000)
- +#define APP_OCM_DATA_SIZE (0x3ffd3500-0x3ffc8000)
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_text.lds.inc linux-2.6.28.10/arch/ubicom32/include/asm/ocm_text.lds.inc
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ocm_text.lds.inc 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ocm_text.lds.inc 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,175 @@
- +/*
- + * arch/ubicom32/include/asm/ocm_text.lds.inc
- + * <TODO: Replace with short file description>
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +*(.text.do_csum)
- +*(.text.tcp_packet)
- +*(.text.ipt_do_table)
- +*(.text.nf_conntrack_in)
- +*(.text.ip_forward)
- +*(.text.dev_queue_xmit)
- +*(.text.netif_receive_skb)
- +*(.text.ip_route_input)
- +*(.text.ip_finish_output)
- +*(.text.nf_iterate)
- +*(.text.__hash_conntrack)
- +*(.text.memset)
- +*(.text.memcpy)
- +*(.text.ip_rcv)
- +*(.text.__nf_conntrack_find)
- +*(.text.dev_hard_start_xmit)
- +*(.text.vlan_dev_hard_start_xmit)
- +*(.text.vlan_dev_hard_header)
- +*(.text.__nf_ct_refresh_acct)
- +*(.text.tcp_error)
- +*(.text.pfifo_fast_enqueue)
- +*(.text.ipv4_confirm)
- +*(.text.ip_output)
- +*(.text.neigh_connected_output)
- +*(.text.nf_hook_slow)
- +*(.text.nf_nat_packet)
- +*(.text.local_bh_enable)
- +*(.text.pfifo_fast_dequeue)
- +*(.text.ubi32_eth_receive)
- +*(.text.nf_nat_fn)
- +*(.text.skb_checksum)
- +*(.text.memmove)
- +*(.text.ubi32_eth_tx_done)
- +*(.text.eth_header)
- +*(.text.skb_release_data)
- +*(.text.nf_conntrack_find_get)
- +*(.text.process_backlog)
- +*(.text.vlan_skb_recv)
- +*(.text.ip_rcv_finish)
- +*(.text.__qdisc_run)
- +*(.text.skb_push)
- +*(.text.eth_type_trans)
- +*(.text.__alloc_skb)
- +*(.text.netif_rx)
- +*(.text.nf_ip_checksum)
- +*(.text.__skb_checksum_complete_head)
- +*(.text.ipv4_conntrack_defrag)
- +*(.text.tcp_pkt_to_tuple)
- +*(.text.kfree)
- +*(.text.tcp_manip_pkt)
- +*(.text.skb_put)
- +*(.text.nf_ct_get_tuple)
- +*(.text.__kmalloc)
- +*(.text.ubi32_eth_start_xmit)
- +*(.text.free_block)
- +*(.text.ipt_hook)
- +*(.text.kmem_cache_free)
- +*(.text.skb_pull_rcsum)
- +*(.text.cache_alloc_refill)
- +*(.text.skb_release_head_state)
- +*(.text.manip_pkt)
- +*(.text.ip_sabotage_in)
- +*(.text.ip_forward_finish)
- +*(.text.kmem_cache_alloc)
- +*(.text.local_bh_disable)
- +*(.text.ipv4_pkt_to_tuple)
- +*(.text.inet_proto_csum_replace4)
- +*(.text.__nf_ct_l4proto_find)
- +*(.text.csum_partial)
- +*(.text.neigh_resolve_output)
- +*(.text.__kfree_skb)
- +*(.text.kfree_skb)
- +*(.text.__find_vlan_dev)
- +*(.text.ldsr_ctxsw_thread)
- +*(.text.__do_IRQ)
- +*(.text.skb_pull)
- +*(.text.ipv4_invert_tuple)
- +*(.text.nf_ct_invert_tuplepr)
- +*(.text.skb_make_writable)
- +*(.text.ipv4_get_l4proto)
- +*(.text.handle_IRQ_event)
- +*(.text.net_rx_action)
- +*(.text.__do_softirq)
- +*(.text.nf_nat_in)
- +*(.text.note_interrupt)
- +*(.text.ipv4_conntrack_in)
- +*(.text.dst_release)
- +*(.text.tasklet_action)
- +*(.text.nf_nat_out)
- +*(.text.nf_ct_invert_tuple)
- +*(.text.do_IRQ)
- +*(.text.__tasklet_schedule)
- +*(.text.__skb_checksum_complete)
- +*(.text.ubi32_eth_interrupt)
- +*(.text.dev_kfree_skb_any)
- +*(.text.ret_from_interrupt_to_kernel)
- +*(.text.preemptive_context_save)
- +*(.text.irq_ack_vector)
- +*(.text.update_wall_time)
- +*(.text.ldsr_thread)
- +*(.text.irq_exit)
- +*(.text.ubi32_eth_do_tasklet)
- +*(.text.__napi_schedule)
- +*(.text.idle_cpu)
- +*(.text.run_timer_softirq)
- +*(.text.ldsr_mask_vector)
- +*(.text.irq_enter)
- +*(.text.ldsr_get_lsb)
- +*(.text.ldsr_unmask_vector)
- +*(.text.ip_fast_csum)
- +*(.text.hrtimer_run_queues)
- +*(.text.tcp_invert_tuple)
- +*(.text.T___705)
- +*(.text.run_posix_cpu_timers)
- +*(.text.free_hot_cold_page)
- +*(.text.lock_timer_base)
- +*(.text.calc_delta_mine)
- +*(.text.slab_destroy)
- +*(.text.rcu_pending)
- +*(.text.scheduler_tick)
- +*(.text.hrtimer_run_pending)
- +*(.text.do_softirq)
- +*(.text.del_timer)
- +*(.text.irq_end_vector)
- +*(.text.pci_read_u32)
- +*(.text.udivmodsi4)
- +*(.text.memcmp)
- +*(.text.memset)
- +*(.text.__slab_alloc)
- +*(.text.br_handle_frame)
- +*(.text.br_fdb_update)
- +*(.text.__br_fdb_get)
- +*(.text.br_forward)
- +*(.text.br_handle_frame_finish)
- +*(.text.pci_write_u32)
- +*(.text.kmem_freepages)
- +*(.text.br_dev_queue_push_xmit)
- +*(.text.ioread32)
- +*(.text.next_zones_zonelist)
- +*(.text.ubi32_pci_read_u32)
- +*(.text.zone_watermark_ok)
- +*(.text.__rmqueue_smallest)
- +*(.text.ubi32_eth_napi_poll)
- +*(.text.ubi32_pci_write_u32)
- +*(.text.ubi32_pci_read_u32)
- +*(.text._local_bh_enable)
- +*(.text._local_bh_disable)
- +*(.text.get_slab)
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/page.h linux-2.6.28.10/arch/ubicom32/include/asm/page.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/page.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/page.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,106 @@
- +/*
- + * arch/ubicom32/include/asm/page.h
- + * Memory page related operations and definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_PAGE_H
- +#define _ASM_UBICOM32_PAGE_H
- +
- +/* PAGE_SHIFT determines the page size */
- +
- +#define PAGE_SHIFT 12
- +#define PAGE_SIZE (1 << PAGE_SHIFT)
- +#define PAGE_MASK (~(PAGE_SIZE-1))
- +
- +#include <asm/setup.h>
- +
- +#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)
- +
- +#define __alloc_zeroed_user_highpage(movableflags, vma, vaddr) \
- + alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr)
- +#define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE
- +
- +/*
- + * 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;
- +typedef struct page *pgtable_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) } )
- +
- +extern unsigned long memory_start;
- +extern unsigned long memory_end;
- +
- +#endif /* !__ASSEMBLY__ */
- +
- +#include <asm/page_offset.h>
- +
- +#define PAGE_OFFSET (PAGE_OFFSET_RAW)
- +
- +#ifndef __ASSEMBLY__
- +
- +#define __pa(vaddr) virt_to_phys((void *)(vaddr))
- +#define __va(paddr) phys_to_virt((unsigned long)(paddr))
- +
- +#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 pfn_to_page(pfn) virt_to_page(pfn_to_virt(pfn))
- +#define page_to_pfn(page) virt_to_pfn(page_to_virt(page))
- +#define pfn_valid(pfn) ((pfn) < max_mapnr)
- +
- +#define virt_addr_valid(kaddr) (((void *)(kaddr) >= (void *)PAGE_OFFSET) && \
- + ((void *)(kaddr) < (void *)memory_end))
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#ifdef __KERNEL__
- +#include <asm-generic/page.h>
- +#endif
- +
- +#endif /* _ASM_UBICOM32_PAGE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/page_offset.h linux-2.6.28.10/arch/ubicom32/include/asm/page_offset.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/page_offset.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/page_offset.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,35 @@
- +/*
- + * arch/ubicom32/include/asm/page_offset.h
- + * Definition of PAGE_OFFSET_RAW for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_PAGE_OFFSET_H
- +#define _ASM_UBICOM32_PAGE_OFFSET_H
- +
- +/* This handles the memory map.. */
- +#define PAGE_OFFSET_RAW 0x3ffc0000
- +
- +#endif /* _ASM_UBICOM32_PAGE_OFFSET_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/param.h linux-2.6.28.10/arch/ubicom32/include/asm/param.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/param.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/param.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,49 @@
- +/*
- + * arch/ubicom32/include/asm/param.h
- + * Definition of miscellaneous constants, including HZ.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_PARAM_H
- +#define _ASM_UBICOM32_PARAM_H
- +
- +#ifdef __KERNEL__
- +#define HZ CONFIG_HZ
- +#define USER_HZ HZ
- +#define CLOCKS_PER_SEC (USER_HZ)
- +#endif
- +
- +#ifndef HZ
- +#define HZ 100
- +#endif
- +
- +#define EXEC_PAGESIZE 4096
- +
- +#ifndef NOGROUP
- +#define NOGROUP (-1)
- +#endif
- +
- +#define MAXHOSTNAMELEN 64 /* max length of hostname */
- +
- +#endif /* _ASM_UBICOM32_PARAM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/pci.h linux-2.6.28.10/arch/ubicom32/include/asm/pci.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/pci.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/pci.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,210 @@
- +/*
- + * arch/ubicom32/include/asm/pci.h
- + * Definitions of PCI operations for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_PCI_H
- +#define _ASM_UBICOM32_PCI_H
- +
- +#include <asm/io.h>
- +
- +/* 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)
- +
- +
- +
- +/*
- + * Perform a master read/write to the PCI bus.
- + * These functions return a PCI_RESP_xxx code.
- + */
- +extern u8 pci_read_u32(u8 pci_cmd, u32 address, u32 *data);
- +extern u8 pci_write_u32(u8 pci_cmd, u32 address, u32 data);
- +extern u8 pci_read_u16(u8 pci_cmd, u32 address, u16 *data);
- +extern u8 pci_write_u16(u8 pci_cmd, u32 address, u16 data);
- +extern u8 pci_read_u8(u8 pci_cmd, u32 address, u8 *data);
- +extern u8 pci_write_u8(u8 pci_cmd, u32 address, u8 data);
- +
- +
- +#define PCIBIOS_MIN_IO 0x100
- +#define PCIBIOS_MIN_MEM 0x10000000
- +
- +#define pcibios_assign_all_busses() 0
- +#define pcibios_scan_all_fns(a, b) 0
- +extern void pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region,
- + struct resource *res);
- +
- +extern void pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res,
- + struct pci_bus_region *region);
- +
- +struct pci_sys_data;
- +struct pci_bus;
- +
- +struct hw_pci {
- + struct list_head buses;
- + int nr_controllers;
- + int (*setup)(int nr, struct pci_sys_data *);
- + struct pci_bus *(*scan)(int nr, struct pci_sys_data *);
- + void (*preinit)(void);
- + void (*postinit)(void);
- + u8 (*swizzle)(struct pci_dev *dev, u8 *pin);
- + int (*map_irq)(struct pci_dev *dev, u8 slot, u8 pin);
- +};
- +
- +/*
- + * Per-controller structure
- + */
- +struct pci_sys_data {
- + struct list_head node;
- + int busnr; /* primary bus number */
- + u64 mem_offset; /* bus->cpu memory mapping offset */
- + unsigned long io_offset; /* bus->cpu IO mapping offset */
- + struct pci_bus *bus; /* PCI bus */
- + struct resource *resource[3]; /* Primary PCI bus resources */
- + /* Bridge swizzling */
- + u8 (*swizzle)(struct pci_dev *, u8 *);
- + /* IRQ mapping */
- + int (*map_irq)(struct pci_dev *, u8, u8);
- + struct hw_pci *hw;
- +};
- +
- +static inline struct resource *
- +pcibios_select_root(struct pci_dev *pdev, struct resource *res)
- +{
- + struct resource *root = NULL;
- +
- + if (res->flags & IORESOURCE_IO)
- + root = &ioport_resource;
- + if (res->flags & IORESOURCE_MEM)
- + root = &iomem_resource;
- +
- + return root;
- +}
- +
- +static inline void pcibios_set_master(struct pci_dev *dev)
- +{
- + /* No special bus mastering setup handling */
- +}
- +#define HAVE_ARCH_PCI_SET_DMA_MAX_SEGMENT_SIZE 1
- +#define HAVE_ARCH_PCI_SET_DMA_SEGMENT_BOUNDARY 1
- +
- +#ifdef CONFIG_PCI
- +static inline void * pci_alloc_consistent(struct pci_dev *hwdev, size_t size,
- + dma_addr_t *dma_handle)
- +{
- + void *vaddr = kmalloc(size, GFP_KERNEL);
- + if(vaddr != NULL) {
- + *dma_handle = virt_to_phys(vaddr);
- + }
- + return vaddr;
- +}
- +
- +static inline int pci_dma_supported(struct pci_dev *hwdev, dma_addr_t mask)
- +{
- + return 1;
- +}
- +
- +static inline void pci_free_consistent(struct pci_dev *hwdev, size_t size,
- + void *cpu_addr, dma_addr_t dma_handle)
- +{
- + kfree(cpu_addr);
- + return;
- +}
- +
- +static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
- + size_t size, int direction)
- +{
- + return virt_to_phys(ptr);
- +}
- +
- +static inline void pci_unmap_single(struct pci_dev *hwdev, dma_addr_t dma_addr,
- + size_t size, int direction)
- +{
- + return;
- +}
- +
- +static inline dma_addr_t
- +pci_map_page(struct pci_dev *hwdev, struct page *page,
- + unsigned long offset, size_t size, int direction)
- +{
- + return pci_map_single(hwdev, page_address(page) + offset, size, (int)direction);
- +}
- +
- +static inline void
- +pci_unmap_page(struct pci_dev *hwdev, dma_addr_t dma_address,
- + size_t size, int direction)
- +{
- + pci_unmap_single(hwdev, dma_address, size, direction);
- +}
- +
- +static inline int
- +pci_map_sg(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nents, int direction)
- +{
- + return nents;
- +}
- +
- +static inline void
- +pci_unmap_sg(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nents, int direction)
- +{
- +}
- +
- +static inline void
- +pci_dma_sync_sg_for_cpu(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nelems, int direction)
- +{
- +}
- +
- +static inline void
- +pci_dma_sync_sg_for_device(struct pci_dev *hwdev, struct scatterlist *sg,
- + int nelems, int direction)
- +{
- +}
- +
- +static inline void
- +pci_dma_sync_single_for_cpu(struct pci_dev *hwdev, dma_addr_t dma_handle,
- + size_t size, int direction)
- +{
- +}
- +
- +static inline void
- +pci_dma_sync_single_for_device(struct pci_dev *hwdev, dma_addr_t dma_handle,
- + size_t size, int direction)
- +{
- +}
- +
- +static inline int
- +pci_dma_mapping_error(struct pci_dev *hwdev, dma_addr_t dma_addr)
- +{
- + return dma_addr == 0;
- +}
- +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
- +
- +#endif /* _ASM_UBICOM32_PCI_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/percpu.h linux-2.6.28.10/arch/ubicom32/include/asm/percpu.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/percpu.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/percpu.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/percpu.h
- + * Generic percpu.h for the Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_PERCPU_H
- +#define _ASM_UBICOM32_PERCPU_H
- +
- +#include <asm-generic/percpu.h>
- +
- +#endif /* _ASM_UBICOM32_PERCPU_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/pgalloc.h linux-2.6.28.10/arch/ubicom32/include/asm/pgalloc.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/pgalloc.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/pgalloc.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,36 @@
- +/*
- + * arch/ubicom32/include/asm/pgalloc.h
- + * Page table allocation definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_PGALLOC_H
- +#define _ASM_UBICOM32_PGALLOC_H
- +
- +#include <linux/mm.h>
- +#include <asm/setup.h>
- +
- +#define check_pgt_cache() do { } while (0)
- +
- +#endif /* _ASM_UBICOM32_PGALLOC_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/pgtable.h linux-2.6.28.10/arch/ubicom32/include/asm/pgtable.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/pgtable.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/pgtable.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,124 @@
- +/*
- + * arch/ubicom32/include/asm/pgtable.h
- + * Ubicom32 pseudo page table definitions and operations.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + * and various works, Alpha, ix86, M68K, Sparc, ...et al
- + */
- +#ifndef _ASM_UBICOM32_PGTABLE_H
- +#define _ASM_UBICOM32_PGTABLE_H
- +
- +#include <asm-generic/4level-fixup.h>
- +
- +//vic - this bit copied from m68knommu version
- +#include <asm/setup.h>
- +#include <asm/io.h>
- +#include <linux/sched.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 })
- +
- +/*
- + * pgprot_noncached() is only for infiniband pci support, and a real
- + * implementation for RAM would be more complicated.
- + */
- +#define pgprot_noncached(prot) (prot)
- +
- +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_pfn_range(vma, vaddr, pfn, size, prot) \
- + remap_pfn_range(vma, vaddr, pfn, 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
- +
- +#define arch_enter_lazy_mmu_mode() do {} while (0)
- +#define arch_leave_lazy_mmu_mode() do {} while (0)
- +#define arch_flush_lazy_mmu_mode() do {} while (0)
- +#define arch_enter_lazy_cpu_mode() do {} while (0)
- +#define arch_leave_lazy_cpu_mode() do {} while (0)
- +#define arch_flush_lazy_cpu_mode() do {} while (0)
- +
- +#endif /* _ASM_UBICOM32_PGTABLE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/poll.h linux-2.6.28.10/arch/ubicom32/include/asm/poll.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/poll.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/poll.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,36 @@
- +/*
- + * arch/ubicom32/include/asm/poll.h
- + * Ubicom32 specific poll() related flags definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_POLL_H
- +#define _ASM_UBICOM32_POLL_H
- +
- +#define POLLWRNORM POLLOUT
- +#define POLLWRBAND 0x0100
- +
- +#include <asm-generic/poll.h>
- +
- +#endif /* _ASM_UBICOM32_POLL_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/posix_types.h linux-2.6.28.10/arch/ubicom32/include/asm/posix_types.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/posix_types.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/posix_types.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,93 @@
- +/*
- + * arch/ubicom32/include/asm/posix_types.h
- + * Ubicom32 architecture posix types.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef __ARCH_UBICOM32_POSIX_TYPES_H
- +#define __ARCH_UBICOM32_POSIX_TYPES_H
- +
- +/*
- + * 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
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/processor.h linux-2.6.28.10/arch/ubicom32/include/asm/processor.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/processor.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/processor.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,163 @@
- +/*
- + * arch/ubicom32/include/asm/processor.h
- + * Thread related definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 1995 Hamish Macdonald
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_PROCESSOR_H
- +#define _ASM_UBICOM32_PROCESSOR_H
- +
- +/*
- + * Default implementation of macro that returns current
- + * instruction pointer ("program counter").
- + */
- +#define current_text_addr() ({ __label__ _l; _l: &&_l;})
- +
- +#include <linux/compiler.h>
- +#include <linux/threads.h>
- +#include <asm/types.h>
- +#include <asm/segment.h>
- +#include <asm/fpu.h>
- +#include <asm/ptrace.h>
- +#include <asm/current.h>
- +#include <asm/thread_info.h>
- +
- +#if defined(CONFIG_UBICOM32_V3)
- + #define CPU "IP5K"
- +#endif
- +#if defined(CONFIG_UBICOM32_V4)
- + #define CPU "IP7K"
- +#endif
- +#ifndef CPU
- + #define CPU "UNKNOWN"
- +#endif
- +
- +/*
- + * User space process size: 1st byte beyond user address space.
- + */
- +extern unsigned long memory_end;
- +#define TASK_SIZE (memory_end)
- +
- +/*
- + * 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
- +
- +/*
- + * This is the structure where we are going to save callee-saved registers.
- + * A5 is the return address, A7 is the stack pointer, A6 is the frame
- + * pointer. This is the frame that is created because of switch_to. This
- + * is not the frame due to interrupt preemption or because of syscall entry.
- + */
- +
- +struct thread_struct {
- + unsigned long d10; /* D10 */
- + unsigned long d11; /* D11 */
- + unsigned long d12; /* D12 */
- + unsigned long d13; /* D13 */
- + unsigned long a1; /* A1 */
- + unsigned long a2; /* A2 */
- + unsigned long a5; /* A5 return address. */
- + unsigned long a6; /* A6 */
- + unsigned long sp; /* A7 kernel stack pointer. */
- +};
- +
- +#define INIT_THREAD { \
- + 0, 0, 0, 0, 0, 0, 0, 0, \
- + sizeof(init_stack) + (unsigned long) init_stack - 8, \
- +}
- +
- +/*
- + * Do necessary setup to start up a newly executed thread.
- + *
- + * pass the data segment into user programs if it exists,
- + * it can't hurt anything as far as I can tell
- + */
- +/*
- + * Do necessary setup to start up a newly executed thread.
- + */
- +#define start_thread(regs, new_pc, new_sp) \
- + do { \
- + regs->pc = new_pc & ~3; \
- + regs->an[5] = new_pc & ~3; \
- + regs->an[7] = new_sp; \
- + regs->nesting_level = -1; \
- + regs->frame_type = UBICOM32_FRAME_TYPE_NEW_THREAD; \
- + regs->thread_type = NORMAL_THREAD; \
- + } while(0)
- +
- +/* Forward declaration, a strange C thing */
- +struct task_struct;
- +
- +/* Free all resources held by a thread. */
- +static inline void release_thread(struct task_struct *dead_task)
- +{
- +}
- +
- +/* 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);
- +
- +/*
- + * Free current thread data structures etc..
- + */
- +static inline void exit_thread(void)
- +{
- +}
- +
- +unsigned long thread_saved_pc(struct task_struct *tsk);
- +unsigned long get_wchan(struct task_struct *p);
- +
- +#define KSTK_EIP(tsk) (tsk->thread.a5)
- +#define KSTK_ESP(tsk) (tsk->thread.sp)
- +
- +#define cpu_relax() barrier()
- +
- +extern void processor_init(void);
- +extern unsigned int processor_timers(void);
- +extern unsigned int processor_threads(void);
- +extern unsigned int processor_frequency(void);
- +extern int processor_interrupts(unsigned int *int0, unsigned int *int1);
- +extern int processor_ocm(void **socm, void **eocm);
- +extern int processor_dram(void **sdram, void **edram);
- +
- +#define THREAD_SIZE_LONGS (THREAD_SIZE/sizeof(unsigned long))
- +#define KSTK_TOP(info) \
- +({ \
- + unsigned long *__ptr = (unsigned long *)(info); \
- + (unsigned long)(&__ptr[THREAD_SIZE_LONGS]); \
- +})
- +
- +#define task_pt_regs(task) \
- +({ \
- + struct pt_regs *__regs__; \
- + __regs__ = (struct pt_regs *)(KSTK_TOP(task_stack_page(task))-8); \
- + __regs__ - 1; \
- +})
- +
- +#endif /* _ASM_UBICOM32_PROCESSOR_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ptrace.h linux-2.6.28.10/arch/ubicom32/include/asm/ptrace.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ptrace.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ptrace.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,177 @@
- +/*
- + * arch/ubicom32/include/asm/ptrace.h
- + * Ubicom32 architecture ptrace support.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_PTRACE_H
- +#define _ASM_UBICOM32_PTRACE_H
- +
- +#ifndef __ASSEMBLY__
- +
- +/*
- + * We use hard coded constants because this is shared with user
- + * space and the values are NOT allowed to change. Only fields
- + * that are intended to be exposed get values.
- + */
- +#define PT_D0 0
- +#define PT_D1 4
- +#define PT_D2 8
- +#define PT_D3 12
- +#define PT_D4 16
- +#define PT_D5 20
- +#define PT_D6 24
- +#define PT_D7 28
- +#define PT_D8 32
- +#define PT_D9 36
- +#define PT_D10 40
- +#define PT_D11 44
- +#define PT_D12 48
- +#define PT_D13 52
- +#define PT_D14 56
- +#define PT_D15 60
- +#define PT_A0 64
- +#define PT_A1 68
- +#define PT_A2 72
- +#define PT_A3 76
- +#define PT_A4 80
- +#define PT_A5 84
- +#define PT_A6 88
- +#define PT_A7 92
- +#define PT_SP 92
- +#define PT_ACC0HI 96
- +#define PT_ACC0LO 100
- +#define PT_MAC_RC16 104
- +#define PT_ACC1HI 108
- +#define PT_ACC1LO 112
- +#define PT_SOURCE3 116
- +#define PT_INST_CNT 120
- +#define PT_CSR 124
- +#define PT_DUMMY_UNUSED 128
- +#define PT_INT_MASK0 132
- +#define PT_INT_MASK1 136
- +#define PT_TRAP_CAUSE 140
- +#define PT_PC 144
- +#define PT_ORIGINAL_D0 148
- +#define PT_FRAME_TYPE 152
- +
- +/*
- + * The following 'registers' are not registers at all but are used
- + * locate the relocated sections.
- + */
- +#define PT_TEXT_ADDR 200
- +#define PT_TEXT_END_ADDR 204
- +#define PT_DATA_ADDR 208
- +#define PT_EXEC_FDPIC_LOADMAP 212
- +#define PT_INTERP_FDPIC_LOADMAP 216
- +
- +/*
- + * This struct defines the way the registers are stored on the
- + * stack during a system call.
- + */
- +enum thread_type {
- + NORMAL_THREAD,
- + KERNEL_THREAD,
- +};
- +
- +#define UBICOM32_FRAME_TYPE_SYSCALL -1 /* System call frame */
- +#define UBICOM32_FRAME_TYPE_INVALID 0 /* Invalid frame, no longer in use */
- +#define UBICOM32_FRAME_TYPE_INTERRUPT 1 /* Interrupt frame */
- +#define UBICOM32_FRAME_TYPE_TRAP 2 /* Trap frame */
- +#define UBICOM32_FRAME_TYPE_SIGTRAMP 3 /* Signal trampoline frame. */
- +#define UBICOM32_FRAME_TYPE_NEW_THREAD 4 /* New Thread. */
- +
- +struct pt_regs {
- + /*
- + * Data Registers
- + */
- + unsigned long dn[16];
- +
- + /*
- + * Address Registers
- + */
- + unsigned long an[8];
- +
- + /*
- + * Per thread misc registers.
- + */
- + unsigned long acc0[2];
- + unsigned long mac_rc16;
- + unsigned long acc1[2];
- + unsigned long source3;
- + unsigned long inst_cnt;
- + unsigned long csr;
- + unsigned long dummy_unused;
- + unsigned long int_mask0;
- + unsigned long int_mask1;
- + unsigned long trap_cause;
- + unsigned long pc;
- + unsigned long original_dn_0;
- +
- + /*
- + * Frame type. Syscall frames are -1. For other types look above.
- + */
- + unsigned long frame_type;
- +
- + /*
- + * These fields are not exposed to ptrace.
- + */
- + unsigned long previous_pc;
- + long nesting_level; /* When the kernel in in user space this
- + * will be -1. */
- + unsigned long thread_type; /* This indicates if this is a kernel
- + * thread. */
- +};
- +
- +/*
- + * 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 dummy;
- +};
- +
- +#ifdef __KERNEL__
- +
- +/* Arbitrarily choose the same ptrace numbers as used by the Sparc code. */
- +#define PTRACE_GETREGS 12
- +#define PTRACE_SETREGS 13
- +
- +#ifndef PS_S
- +#define PS_S (0x2000)
- +#define PS_M (0x1000)
- +#endif
- +
- +extern int __user_mode(unsigned long sp);
- +
- +#define user_mode(regs) (__user_mode((regs->an[7])))
- +#define user_stack(regs) ((regs)->an[7])
- +#define instruction_pointer(regs) ((regs)->pc)
- +#define profile_pc(regs) instruction_pointer(regs)
- +extern void show_regs(struct pt_regs *);
- +#endif /* __KERNEL__ */
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* _ASM_UBICOM32_PTRACE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/range-protect-asm.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect-asm.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/range-protect-asm.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,91 @@
- +/*
- + * arch/ubicom32/include/asm/range-protect-asm.h
- + * Assembly macros for enabling memory protection.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_RANGE_PROTECT_ASM_H
- +#define _ASM_UBICOM32_RANGE_PROTECT_ASM_H
- +
- +#if defined(__ASSEMBLY__)
- +
- +#include <asm/thread-asm.h>
- +
- +/*
- + * You should only use the enable/disable ranges when you have the atomic lock,
- + * if you do not there will be problems.
- + */
- +
- +/*
- + * enable_kernel_ranges
- + * Enable the kernel ranges (disabling protection) for thread,
- + * where thread == (1 << thread number)
- + */
- +.macro enable_kernel_ranges thread
- +#ifdef CONFIG_PROTECT_KERNEL
- + or.4 I_RANGE0_EN, I_RANGE0_EN, \thread /* Enable Range Register */
- + or.4 D_RANGE0_EN, D_RANGE0_EN, \thread
- + or.4 D_RANGE1_EN, D_RANGE1_EN, \thread
- +#endif
- +.endm
- +
- +/*
- + * enable_kernel_ranges_for_current
- + * Enable the kernel ranges (disabling protection) for this thread
- + */
- +.macro enable_kernel_ranges_for_current scratch_reg
- +#ifdef CONFIG_PROTECT_KERNEL
- + thread_get_self_mask \scratch_reg
- + enable_kernel_ranges \scratch_reg
- +#endif
- +.endm
- +
- +/*
- + * disable_kernel_ranges
- + * Disables the kernel ranges (enabling protection) for thread
- + * where thread == (1 << thread number)
- + */
- +.macro disable_kernel_ranges thread
- +#ifdef CONFIG_PROTECT_KERNEL
- + not.4 \thread, \thread
- + and.4 I_RANGE0_EN, I_RANGE0_EN, \thread /* Disable Range Register */
- + and.4 D_RANGE0_EN, D_RANGE0_EN, \thread
- + and.4 D_RANGE1_EN, D_RANGE1_EN, \thread
- +#endif
- +.endm
- +
- +/*
- + * disable_kernel_ranges_for_current
- + * Disable kernel ranges (enabling protection) for this thread
- + */
- +.macro disable_kernel_ranges_for_current scratch_reg
- +#ifdef CONFIG_PROTECT_KERNEL
- + thread_get_self_mask \scratch_reg
- + disable_kernel_ranges \scratch_reg
- +#endif
- +.endm
- +#endif
- +
- +#endif /* _ASM_UBICOM32_RANGE_PROTECT_ASM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect.h linux-2.6.28.10/arch/ubicom32/include/asm/range-protect.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/range-protect.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/range-protect.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,62 @@
- +/*
- + * arch/ubicom32/include/asm/range-protect.h
- + * Assembly macros declared in C for enabling memory protection.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_RANGE_PROTECT_H
- +#define _ASM_UBICOM32_RANGE_PROTECT_H
- +
- +#if !defined(__ASSEMBLY__)
- +#include <asm/thread.h>
- +/*
- + * The following macros should be the identical to the ones in
- + * range-protect-asm.h
- + *
- + * You should only use the enable/disable ranges when you have the atomic lock,
- + * if you do not there will be problems.
- + */
- +
- +/*
- + * enable_kernel_ranges
- + * Enable the kernel ranges (disabling protection) for thread,
- + * where thread == (1 << thread number)
- + */
- +asm (
- + ".macro enable_kernel_ranges thread \n\t"
- +#ifdef CONFIG_PROTECT_KERNEL
- + " or.4 I_RANGE0_EN, I_RANGE0_EN, \\thread \n\t" /* Enable Range Register */
- + " or.4 D_RANGE0_EN, D_RANGE0_EN, \\thread \n\t"
- + " or.4 D_RANGE1_EN, D_RANGE1_EN, \\thread \n\t"
- +#endif
- + ".endm \n\t"
- +);
- +
- +#else /* __ASSEMBLY__ */
- +
- +#include <asm/range-protect-asm.h>
- +
- +#endif
- +#endif /* _ASM_UBICOM32_RANGE_PROTECT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/resource.h linux-2.6.28.10/arch/ubicom32/include/asm/resource.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/resource.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/resource.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/resource.h
- + * Generic definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_RESOURCE_H
- +#define _ASM_UBICOM32_RESOURCE_H
- +
- +#include <asm-generic/resource.h>
- +
- +#endif /* _ASM_UBICOM32_RESOURCE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ring_tio.h linux-2.6.28.10/arch/ubicom32/include/asm/ring_tio.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ring_tio.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ring_tio.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,42 @@
- +/*
- + * arch/ubicom32/include/asm/ring_tio.h
- + * Ubicom32 architecture Ring TIO definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + */
- +#ifndef _ASM_UBICOM32_RING_TIO_H
- +#define _ASM_UBICOM32_RING_TIO_H
- +
- +#include <asm/devtree.h>
- +
- +#define RING_TIO_NODE_VERSION 2
- +
- +/*
- + * Devtree node for ring
- + */
- +struct ring_tio_node {
- + struct devtree_node dn;
- +
- + u32_t version;
- + void *regs;
- +};
- +
- +extern void ring_tio_init(const char *node_name);
- +
- +#endif /* _ASM_UBICOM32_RING_TIO_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/scatterlist.h linux-2.6.28.10/arch/ubicom32/include/asm/scatterlist.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/scatterlist.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/scatterlist.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,49 @@
- +/*
- + * arch/ubicom32/include/asm/scatterlist.h
- + * Definitions of struct scatterlist for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SCATTERLIST_H
- +#define _ASM_UBICOM32_SCATTERLIST_H
- +
- +#include <linux/mm.h>
- +#include <asm/types.h>
- +
- +struct scatterlist {
- +#ifdef CONFIG_DEBUG_SG
- + unsigned long sg_magic;
- +#endif
- + unsigned long page_link;
- + unsigned int offset;
- + dma_addr_t dma_address;
- + unsigned int length;
- +};
- +
- +#define sg_dma_address(sg) ((sg)->dma_address)
- +#define sg_dma_len(sg) ((sg)->length)
- +
- +#define ISA_DMA_THRESHOLD (0xffffffff)
- +
- +#endif /* _ASM_UBICOM32_SCATTERLIST_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sections.h linux-2.6.28.10/arch/ubicom32/include/asm/sections.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sections.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/sections.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/sections.h
- + * Generic sections.h definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SECTIONS_H
- +#define _ASM_UBICOM32_SECTIONS_H
- +
- +#include <asm-generic/sections.h>
- +
- +#endif /* _ASM_UBICOM32_SECTIONS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/segment.h linux-2.6.28.10/arch/ubicom32/include/asm/segment.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/segment.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/segment.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,78 @@
- +/*
- + * arch/ubicom32/include/asm/segment.h
- + * Memory segment definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SEGMENT_H
- +#define _ASM_UBICOM32_SEGMENT_H
- +
- +/* 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 /* _ASM_UBICOM32_SEGMENT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore.h linux-2.6.28.10/arch/ubicom32/include/asm/semaphore.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/semaphore.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,140 @@
- +/*
- + * arch/ubicom32/include/asm/semaphore.h
- + * Interrupt-safe semaphores for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * (C) Copyright 1996 Linus Torvalds
- + * m68k version by Andreas Schwab
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SEMAPHORE_H
- +#define _ASM_UBICOM32_SEMAPHORE_H
- +
- +#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 __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)
- +
- +static 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_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 */);
- +
- +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);
- +
- +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.
- + */
- +static inline void down(struct semaphore * sem)
- +{
- + might_sleep();
- +
- + if (atomic_dec_return(&sem->count) < 0)
- + __down(sem);
- +}
- +
- +static inline int down_interruptible(struct semaphore * sem)
- +{
- + int ret = 0;
- +
- +
- + might_sleep();
- +
- + if(atomic_dec_return(&sem->count) < 0)
- + ret = __down_interruptible(sem);
- + return ret;
- +}
- +
- +static inline int down_trylock(struct semaphore * sem)
- +{
- + int ret = 0;
- +
- + if (atomic_dec_return (&sem->count) < 0)
- + ret = __down_trylock(sem);
- + return ret;
- +}
- +
- +/*
- + * 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().
- + */
- +static inline void up(struct semaphore * sem)
- +{
- + if (atomic_inc_return(&sem->count) <= 0)
- + __up(sem);
- +}
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* _ASM_UBICOM32_SEMAPHORE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore-helper.h linux-2.6.28.10/arch/ubicom32/include/asm/semaphore-helper.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/semaphore-helper.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/semaphore-helper.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,109 @@
- +/*
- + * arch/ubicom32/include/asm/semaphore-helper.h
- + * Semaphore related definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SEMAPHORE_HELPER_H
- +#define _ASM_UBICOM32_SEMAPHORE_HELPER_H
- +
- +/*
- + * SMP- and interrupt-safe semaphores helper functions.
- + *
- + * (C) Copyright 1996 Linus Torvalds
- + *
- + * m68k version by Andreas Schwab
- + */
- +
- +
- +/*
- + * 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 /* _ASM_UBICOM32_SEMAPHORE_HELPER_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sembuf.h linux-2.6.28.10/arch/ubicom32/include/asm/sembuf.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sembuf.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/sembuf.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,52 @@
- +/*
- + * arch/ubicom32/include/asm/sembuf.h
- + * The semid64_ds structure for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SEMBUF_H
- +#define _ASM_UBICOM32_SEMBUF_H
- +
- +/*
- + * The semid64_ds structure for ubicom32 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 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 /* _ASM_UBICOM32_SEMBUF_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/setup.h linux-2.6.28.10/arch/ubicom32/include/asm/setup.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/setup.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/setup.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,35 @@
- +/*
- + * arch/ubicom32/include/asm/setup.h
- + * Kernel command line length definition.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2004, Microtronix Datacom Ltd., All rights reserved.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_SETUP_H
- +#define _ASM_UBICOM32_SETUP_H
- +
- +#define COMMAND_LINE_SIZE 512
- +
- +#endif /* _ASM_UBICOM32_SETUP_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/shmbuf.h linux-2.6.28.10/arch/ubicom32/include/asm/shmbuf.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/shmbuf.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/shmbuf.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,69 @@
- +/*
- + * arch/ubicom32/include/asm/shmbuf.h
- + * The shmid64_ds structure for the Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SHMBUF_H
- +#define _ASM_UBICOM32_SHMBUF_H
- +
- +/*
- + * The shmid64_ds structure for m68k 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 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 /* _ASM_UBICOM32_SHMBUF_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/shmparam.h linux-2.6.28.10/arch/ubicom32/include/asm/shmparam.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/shmparam.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/shmparam.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,35 @@
- +/*
- + * arch/ubicom32/include/asm/shmparam.h
- + * Shared memory definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2004 Microtronix Datacom Ltd
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + * Alpha, ix86, M68K, Sparc, ...et al
- + */
- +#ifndef _ASM_UBICOM32_SHMPARAM_H
- +#define _ASM_UBICOM32_SHMPARAM_H
- +
- +#define SHMLBA PAGE_SIZE /* attach addr a multiple of this */
- +
- +#endif /* _ASM_UBICOM32_SHMPARAM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sigcontext.h linux-2.6.28.10/arch/ubicom32/include/asm/sigcontext.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sigcontext.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/sigcontext.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,37 @@
- +/*
- + * arch/ubicom32/include/asm/sigcontext.h
- + * Definition of sigcontext struct for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SIGCONTEXT_H
- +#define _ASM_UBICOM32_SIGCONTEXT_H
- +
- +#include <asm/ptrace.h>
- +
- +struct sigcontext {
- + struct pt_regs sc_regs;
- +};
- +
- +#endif /* _ASM_UBICOM32_SIGCONTEXT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/siginfo.h linux-2.6.28.10/arch/ubicom32/include/asm/siginfo.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/siginfo.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/siginfo.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/siginfo.h
- + * Generic siginfo.h definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SIGINFO_H
- +#define _ASM_UBICOM32_SIGINFO_H
- +
- +#include <asm-generic/siginfo.h>
- +
- +#endif /* _ASM_UBICOM32_SIGINFO_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/signal.h linux-2.6.28.10/arch/ubicom32/include/asm/signal.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/signal.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/signal.h 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,180 @@
- +/*
- + * arch/ubicom32/include/asm/signal.h
- + * Signal related definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SIGNAL_H
- +#define _ASM_UBICOM32_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;
- +
- +#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
- +
- +/*
- + * SA_FLAGS values:
- + *
- + * SA_ONSTACK indicates that a registered stack_t will be used.
- + * 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
- +#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
- +
- +/*
- + * sigaltstack controls
- + */
- +#define SS_ONSTACK 1
- +#define SS_DISABLE 2
- +
- +#define MINSIGSTKSZ 2048
- +#define SIGSTKSZ 8192
- +
- +#include <asm-generic/signal.h>
- +
- +#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 /* _ASM_UBICOM32_SIGNAL_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/smp.h linux-2.6.28.10/arch/ubicom32/include/asm/smp.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/smp.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/smp.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,83 @@
- +/*
- + * arch/ubicom32/include/asm/smp.h
- + * SMP definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SMP_H
- +#define _ASM_UBICOM32_SMP_H
- +
- +#ifndef ASSEMBLY
- +#include <linux/bitops.h>
- +#include <linux/threads.h>
- +#include <linux/cpumask.h>
- +#include <asm/ip5000.h>
- +
- +typedef unsigned long address_t;
- +extern cpumask_t cpu_online_map;
- +extern unsigned int smp_ipi_irq;
- +
- +/*
- + * This magic constant controls our willingness to transfer
- + * a process across CPUs.
- + *
- + * Such a transfer incurs cache and tlb
- + * misses. The current value is inherited from i386. Still needs
- + * to be tuned for parisc.
- + */
- +#define PROC_CHANGE_PENALTY 15 /* Schedule penalty */
- +#define NO_PROC_ID 0xFF /* No processor magic marker */
- +#define ANY_PROC_ID 0xFF /* Any processor magic marker */
- +
- +#ifdef CONFIG_SMP
- +#define raw_smp_processor_id() (current_thread_info()->cpu)
- +#endif /* CONFIG_SMP */
- +
- +static inline int __cpu_disable (void)
- +{
- + return 0;
- +}
- +
- +static inline void __cpu_die (unsigned int cpu)
- +{
- + while(1) {
- + };
- +}
- +
- +extern int __cpu_up(unsigned int cpu);
- +extern void smp_send_timer_all(void);
- +extern void smp_timer_broadcast(cpumask_t mask);
- +extern void smp_set_affinity(unsigned int irq, cpumask_t dest);
- +extern void arch_send_call_function_single_ipi(int cpu);
- +extern void arch_send_call_function_ipi(cpumask_t mask);
- +
- +/*
- + * TODO: Once these are fully tested, we should turn them into
- + * inline macros for performance.
- + */
- +extern unsigned long smp_get_affinity(unsigned int irq, int *all);
- +extern void smp_reset_ipi(unsigned long mask);
- +
- +#endif /* !ASSEMBLY */
- +#endif /* _ASM_UBICOM32_SMP_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/socket.h linux-2.6.28.10/arch/ubicom32/include/asm/socket.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/socket.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/socket.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,84 @@
- +/*
- + * arch/ubicom32/include/asm/socket.h
- + * Socket options definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SOCKET_H
- +#define _ASM_UBICOM32_SOCKET_H
- +
- +#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_SNDBUFFORCE 32
- +#define SO_RCVBUFFORCE 33
- +#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
- +#define SO_PASSSEC 34
- +#define SO_TIMESTAMPNS 35
- +#define SCM_TIMESTAMPNS SO_TIMESTAMPNS
- +
- +#define SO_MARK 36
- +
- +#endif /* _ASM_UBICOM32_SOCKET_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/sockios.h linux-2.6.28.10/arch/ubicom32/include/asm/sockios.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/sockios.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/sockios.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,40 @@
- +/*
- + * arch/ubicom32/include/asm/sockios.h
- + * Socket-level ioctl definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SOCKIOS_H
- +#define _ASM_UBICOM32_SOCKIOS_H
- +
- +/* Socket-level I/O control calls. */
- +#define FIOSETOWN 0x8901
- +#define SIOCSPGRP 0x8902
- +#define FIOGETOWN 0x8903
- +#define SIOCGPGRP 0x8904
- +#define SIOCATMARK 0x8905
- +#define SIOCGSTAMP 0x8906 /* Get stamp (timeval) */
- +#define SIOCGSTAMPNS 0x8907 /* Get stamp (timespec) */
- +
- +#endif /* _ASM_UBICOM32_SOCKIOS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock.h linux-2.6.28.10/arch/ubicom32/include/asm/spinlock.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/spinlock.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,293 @@
- +/*
- + * arch/ubicom32/include/asm/spinlock.h
- + * Spinlock related definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SPINLOCK_H
- +#define _ASM_UBICOM32_SPINLOCK_H
- +
- +#include <asm/system.h>
- +#include <asm/processor.h>
- +#include <asm/spinlock_types.h>
- +
- +/*
- + * __raw_spin_lock()
- + * Lock the lock.
- + */
- +static inline void __raw_spin_lock(raw_spinlock_t *x)
- +{
- + asm volatile (
- + "1: bset %0, %0, #0 \n\t"
- + " jmpne.f 1b \n\t"
- + : "+U4" (x->lock)
- + :
- + : "memory", "cc"
- + );
- +}
- +
- +/*
- + * __raw_spin_unlock()
- + * Unlock the lock.
- + */
- +static inline void __raw_spin_unlock(raw_spinlock_t *x)
- +{
- + asm volatile (
- + " bclr %0, %0, #0 \n\t"
- + : "+U4" (x->lock)
- + :
- + : "memory", "cc"
- + );
- +}
- +
- +/*
- + * __raw_spin_is_locked()
- + * Test if the lock is locked.
- + */
- +static inline int __raw_spin_is_locked(raw_spinlock_t *x)
- +{
- + return x->lock;
- +}
- +
- +/*
- + * __raw_spin_unlock_wait()
- + * Wait for the lock to be unlocked.
- + *
- + * Note: the caller has not guarantee that the lock will not
- + * be acquired before they get to it.
- + */
- +static inline void __raw_spin_unlock_wait(raw_spinlock_t *x)
- +{
- + do {
- + cpu_relax();
- + } while (__raw_spin_is_locked(x));
- +}
- +
- +/*
- + * __raw_spin_trylock()
- + * Try the lock, return 0 on failure, 1 on success.
- + */
- +static inline int __raw_spin_trylock(raw_spinlock_t *x)
- +{
- + int ret = 0;
- +
- + asm volatile (
- + " bset %1, %1, #0 \n\t"
- + " jmpne.f 1f \n\t"
- + " move.4 %0, #1 \n\t"
- + "1: \n\t"
- + : "+r" (ret), "+U4" (x->lock)
- + :
- + : "memory", "cc"
- + );
- +
- + return ret;
- +}
- +
- +/*
- + * __raw_spin_lock_flags()
- + * Spin waiting for the lock (enabling IRQ(s))
- + */
- +static inline void __raw_spin_lock_flags(raw_spinlock_t *x, unsigned long flags)
- +{
- + mb();
- + while (!__raw_spin_trylock(x)) {
- + /*
- + * If the flags from the IRQ are set, interrupts are disabled and we
- + * need to re-enable them.
- + */
- + if (!flags) {
- + cpu_relax();
- + } else {
- + raw_local_irq_enable();
- + cpu_relax();
- + raw_local_irq_disable();
- + }
- + }
- + mb();
- +}
- +
- +/*
- + * Read-write spinlocks, allowing multiple readers but only one writer.
- + * Linux rwlocks are unfair to writers; they can be starved for an indefinite
- + * time by readers. With care, they can also be taken in interrupt context.
- + *
- + * In Ubicom32 architecture implementation, we have a spinlock and a counter.
- + * Readers use the lock to serialise their access to the counter (which
- + * records how many readers currently hold the lock).
- + * Writers hold the spinlock, preventing any readers or other writers from
- + * grabbing the rwlock.
- + */
- +
- +/*
- + * __raw_read_lock()
- + * Increment the counter in the rwlock.
- + *
- + * Note that we have to ensure interrupts are disabled in case we're
- + * interrupted by some other code that wants to grab the same read lock
- + */
- +static inline void __raw_read_lock(raw_rwlock_t *rw)
- +{
- + unsigned long flags;
- + raw_local_irq_save(flags);
- + __raw_spin_lock_flags(&rw->lock, flags);
- + rw->counter++;
- + __raw_spin_unlock(&rw->lock);
- + raw_local_irq_restore(flags);
- +}
- +
- +/*
- + * __raw_read_unlock()
- + * Decrement the counter.
- + *
- + * Note that we have to ensure interrupts are disabled in case we're
- + * interrupted by some other code that wants to grab the same read lock
- + */
- +static inline void __raw_read_unlock(raw_rwlock_t *rw)
- +{
- + unsigned long flags;
- + raw_local_irq_save(flags);
- + __raw_spin_lock_flags(&rw->lock, flags);
- + rw->counter--;
- + __raw_spin_unlock(&rw->lock);
- + raw_local_irq_restore(flags);
- +}
- +
- +/*
- + * __raw_read_trylock()
- + * Increment the counter if we can.
- + *
- + * Note that we have to ensure interrupts are disabled in case we're
- + * interrupted by some other code that wants to grab the same read lock
- + */
- +static inline int __raw_read_trylock(raw_rwlock_t *rw)
- +{
- + unsigned long flags;
- + retry:
- + raw_local_irq_save(flags);
- + if (__raw_spin_trylock(&rw->lock)) {
- + rw->counter++;
- + __raw_spin_unlock(&rw->lock);
- + raw_local_irq_restore(flags);
- + return 1;
- + }
- +
- + raw_local_irq_restore(flags);
- +
- + /*
- + * If write-locked, we fail to acquire the lock
- + */
- + if (rw->counter < 0) {
- + return 0;
- + }
- +
- + /*
- + * Wait until we have a realistic chance at the lock
- + */
- + while (__raw_spin_is_locked(&rw->lock) && rw->counter >= 0) {
- + cpu_relax();
- + }
- +
- + goto retry;
- +}
- +
- +/*
- + * __raw_write_lock()
- + *
- + * Note that we have to ensure interrupts are disabled in case we're
- + * interrupted by some other code that wants to read_trylock() this lock
- + */
- +static inline void __raw_write_lock(raw_rwlock_t *rw)
- +{
- + unsigned long flags;
- +retry:
- + raw_local_irq_save(flags);
- + __raw_spin_lock_flags(&rw->lock, flags);
- +
- + if (rw->counter != 0) {
- + __raw_spin_unlock(&rw->lock);
- + raw_local_irq_restore(flags);
- +
- + while (rw->counter != 0)
- + cpu_relax();
- +
- + goto retry;
- + }
- +
- + rw->counter = -1; /* mark as write-locked */
- + mb();
- + raw_local_irq_restore(flags);
- +}
- +
- +static inline void __raw_write_unlock(raw_rwlock_t *rw)
- +{
- + rw->counter = 0;
- + __raw_spin_unlock(&rw->lock);
- +}
- +
- +/* Note that we have to ensure interrupts are disabled in case we're
- + * interrupted by some other code that wants to read_trylock() this lock */
- +static inline int __raw_write_trylock(raw_rwlock_t *rw)
- +{
- + unsigned long flags;
- + int result = 0;
- +
- + raw_local_irq_save(flags);
- + if (__raw_spin_trylock(&rw->lock)) {
- + if (rw->counter == 0) {
- + rw->counter = -1;
- + result = 1;
- + } else {
- + /* Read-locked. Oh well. */
- + __raw_spin_unlock(&rw->lock);
- + }
- + }
- + raw_local_irq_restore(flags);
- +
- + return result;
- +}
- +
- +/*
- + * read_can_lock - would read_trylock() succeed?
- + * @lock: the rwlock in question.
- + */
- +static inline int __raw_read_can_lock(raw_rwlock_t *rw)
- +{
- + return rw->counter >= 0;
- +}
- +
- +/*
- + * write_can_lock - would write_trylock() succeed?
- + * @lock: the rwlock in question.
- + */
- +static inline int __raw_write_can_lock(raw_rwlock_t *rw)
- +{
- + return !rw->counter;
- +}
- +
- +#define _raw_spin_relax(lock) cpu_relax()
- +#define _raw_read_relax(lock) cpu_relax()
- +#define _raw_write_relax(lock) cpu_relax()
- +
- +#endif /* _ASM_UBICOM32_SPINLOCK_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock_types.h linux-2.6.28.10/arch/ubicom32/include/asm/spinlock_types.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/spinlock_types.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/spinlock_types.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,43 @@
- +/*
- + * arch/ubicom32/include/asm/spinlock_types.h
- + * Spinlock related structure definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SPINLOCK_TYPES_H
- +#define _ASM_UBICOM32_SPINLOCK_TYPES_H
- +
- +typedef struct {
- + volatile unsigned int lock;
- +} raw_spinlock_t;
- +
- +typedef struct {
- + raw_spinlock_t lock;
- + volatile int counter;
- +} raw_rwlock_t;
- +
- +#define __RAW_SPIN_LOCK_UNLOCKED { 0 }
- +#define __RAW_RW_LOCK_UNLOCKED { __RAW_SPIN_LOCK_UNLOCKED, 0 }
- +
- +#endif /* _ASM_UBICOM32_SPINLOCK_TYPES_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/stacktrace.h linux-2.6.28.10/arch/ubicom32/include/asm/stacktrace.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/stacktrace.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/stacktrace.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,72 @@
- +/*
- + * arch/ubicom32/include/asm/stacktrace.h
- + * Stacktrace functions for the Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_STACKTRACE_H
- +#define _ASM_UBICOM32_STACKTRACE_H
- +
- +#define between(a, b, c) (( \
- + ((unsigned long) a) >= ((unsigned long) b)) && \
- + (((unsigned long)a) <= ((unsigned long)c)))
- +
- +/*
- + * These symbols are filled in by the linker.
- + */
- +extern unsigned long _stext;
- +extern unsigned long _etext;
- +
- +/* OCM text goes from __ocm_text_run_begin to __data_begin */
- +extern unsigned long __ocm_text_run_begin;
- +extern unsigned long __data_begin;
- +
- +/* Account for OCM case - see stacktrace.c maybe combine(also trap.c) */
- +/*
- + * ubicom32_is_kernel()
- + *
- + * Check to see if the given address belongs to the kernel.
- + * NOMMU does not permit any other means.
- + */
- +static inline int ubicom32_is_kernel(unsigned long addr)
- +{
- + int is_kernel = between(addr, &_stext, &_etext) || \
- + between(addr, &__ocm_text_run_begin, &__data_begin);
- +
- +#ifdef CONFIG_MODULES
- + if (!is_kernel)
- + is_kernel = is_module_address(addr);
- +#endif
- + return is_kernel;
- +}
- +
- +extern unsigned long stacktrace_iterate(
- + unsigned long **trace,
- + unsigned long stext, unsigned long etext,
- + unsigned long ocm_stext, unsigned long ocm_etext,
- + unsigned long sstack, unsigned long estack);
- +#ifdef CONFIG_STACKTRACE
- +void stacktrace_save_entries(struct task_struct *tsk, struct stack_trace *trace, unsigned long sp);
- +#endif
- +#endif /* _ASM_UBICOM32_STACKTRACE_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/statfs.h linux-2.6.28.10/arch/ubicom32/include/asm/statfs.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/statfs.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/statfs.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/statfs.h
- + * Generic statfs.h definitions
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_STATFS_H
- +#define _ASM_UBICOM32_STATFS_H
- +
- +#include <asm-generic/statfs.h>
- +
- +#endif /* _ASM_UBICOM32_STATFS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/stat.h linux-2.6.28.10/arch/ubicom32/include/asm/stat.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/stat.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/stat.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,104 @@
- +/*
- + * arch/ubicom32/include/asm/stat.h
- + * File status definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_STAT_H
- +#define _ASM_UBICOM32_STAT_H
- +
- +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[2];
- +
- +#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[2];
- +
- + long long st_size;
- + unsigned long st_blksize;
- +
- + unsigned long 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 /* _ASM_UBICOM32_STAT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/string.h linux-2.6.28.10/arch/ubicom32/include/asm/string.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/string.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/string.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,37 @@
- +/*
- + * arch/ubicom32/include/asm/string.h
- + * String operation definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_STRING_H
- +#define _ASM_UBICOM32_STRING_H
- +
- +#define __HAVE_ARCH_MEMSET
- +extern void *memset(void *b, int c, size_t len);
- +
- +#define __HAVE_ARCH_MEMCPY
- +extern void *memcpy(void *to, const void *from, size_t len);
- +
- +#endif /* _ASM_UBICOM32_STRING_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/system.h linux-2.6.28.10/arch/ubicom32/include/asm/system.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/system.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/system.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,101 @@
- +/*
- + * arch/ubicom32/include/asm/system.h
- + * Low level switching definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_SYSTEM_H
- +#define _ASM_UBICOM32_SYSTEM_H
- +
- +#include <linux/irqflags.h>
- +#include <linux/linkage.h>
- +#include <asm/segment.h>
- +#include <asm/entry.h>
- +#include <asm/ldsr.h>
- +#include <asm/irq.h>
- +#include <asm/percpu.h>
- +#include <asm/ubicom32-common.h>
- +#include <asm/processor.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.
- + */
- +asmlinkage void resume(void);
- +extern void *__switch_to(struct task_struct *prev,
- + struct thread_struct *prev_switch,
- + struct thread_struct *next_switch);
- +
- +/*
- + * We will need a per linux thread sw_ksp for the switch_to macro to
- + * track the kernel stack pointer for the current thread on that linux thread.
- + */
- +#define switch_to(prev,next,last) \
- +({ \
- + void *_last; \
- + _last = (void *) \
- + __switch_to(prev, &prev->thread, &next->thread); \
- + (last) = _last; \
- +})
- +
- +/*
- + * Force strict CPU ordering.
- + * Not really required on ubicom32...
- + */
- +#define nop() asm volatile ("nop"::)
- +#define mb() asm volatile ("" : : :"memory")
- +#define rmb() asm volatile ("" : : :"memory")
- +#define wmb() asm volatile ("" : : :"memory")
- +#define set_mb(var, value) ({ (var) = (value); wmb(); })
- +
- +#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() mb()
- +#define smp_rmb() rmb()
- +#define smp_wmb() wmb()
- +#define smp_read_barrier_depends() do { } while(0)
- +#endif
- +
- +#define read_barrier_depends() ((void)0)
- +
- +/*
- + * The following defines change how the scheduler calls the switch_to()
- + * macro.
- + *
- + * 1) The first causes the runqueue to be unlocked on entry to
- + * switch_to(). Since our ctx code does not play with the runqueue
- + * we do not need it unlocked.
- + *
- + * 2) The later turns interrupts on during a ctxsw to reduce the latency of
- + * interrupts during ctx. At this point in the port, we believe that this
- + * latency is not a problem since we have very little code to perform a ctxsw.
- + */
- +// #define __ARCH_WANT_UNLOCKED_CTXSW
- +// #define __ARCH_WANT_INTERRUPTS_ON_CTXSW
- +
- +#endif /* _ASM_UBICOM32_SYSTEM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/termbits.h linux-2.6.28.10/arch/ubicom32/include/asm/termbits.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/termbits.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/termbits.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,227 @@
- +/*
- + * arch/ubicom32/include/asm/termbits.h
- + * Terminal/serial port definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_TERMBITS_H
- +#define _ASM_UBICOM32_TERMBITS_H
- +
- +#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 */
- +};
- +
- +struct termios2 {
- + 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 */
- + speed_t c_ispeed; /* input speed */
- + speed_t c_ospeed; /* output speed */
- +};
- +
- +struct ktermios {
- + 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 */
- + speed_t c_ispeed; /* input speed */
- + speed_t c_ospeed; /* output speed */
- +};
- +
- +/* 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 BOTHER 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 */
- +#define CMSPAR 010000000000 /* mark or space (stick) parity */
- +#define CRTSCTS 020000000000 /* flow control */
- +
- +#define IBSHIFT 16 /* Shift from CBAUD to CIBAUD */
- +
- +/* 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 /* _ASM_UBICOM32_TERMBITS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/termios.h linux-2.6.28.10/arch/ubicom32/include/asm/termios.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/termios.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/termios.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,119 @@
- +/*
- + * arch/ubicom32/include/asm/termios.h
- + * Ubicom32 termio definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_TERMIOS_H
- +#define _ASM_UBICOM32_TERMIOS_H
- +
- +#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 */
- +
- +#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 termios2))
- +#define kernel_termios_to_user_termios(u, k) copy_to_user(u, k, sizeof(struct termios2))
- +#define user_termios_to_kernel_termios_1(k, u) copy_from_user(k, u, sizeof(struct termios))
- +#define kernel_termios_to_user_termios_1(u, k) copy_to_user(u, k, sizeof(struct termios))
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _ASM_UBICOM32_TERMIOS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/thread-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/thread-asm.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/thread-asm.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/thread-asm.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,49 @@
- +/*
- + * arch/ubicom32/include/asm/thread-asm.h
- + * Ubicom32 architecture specific thread definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_THREAD_ASM_H
- +#define _ASM_UBICOM32_THREAD_ASM_H
- +
- +/*
- + * thread_get_self
- + * Read and shift the current thread into reg
- + */
- +.macro thread_get_self reg
- + lsr.4 \reg, ROSR, #2
- + and.4 \reg, #31, \reg /* Mask to get thread number into register */
- +.endm
- +
- +/*
- + * thread_get_self_mask
- + * Read and shift the current thread mask into reg
- + */
- +.macro thread_get_self_mask reg
- + lsr.4 \reg, ROSR, #2
- + lsl.4 \reg, #1, \reg /* Thread bit */
- +.endm
- +
- +#endif /* _ASM_UBICOM32_THREAD_ASM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/thread.h linux-2.6.28.10/arch/ubicom32/include/asm/thread.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/thread.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/thread.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,313 @@
- +/*
- + * arch/ubicom32/include/asm/thread.h
- + * Ubicom32 architecture specific thread definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_THREAD_H
- +#define _ASM_UBICOM32_THREAD_H
- +
- +#if !defined(__ASSEMBLY__)
- +
- +#include <asm/ptrace.h>
- +#include <asm/ubicom32-common.h>
- +
- +typedef int thread_t;
- +typedef unsigned char thread_type_t;
- +typedef void (*thread_exec_fn_t)(void *arg);
- +
- +#define THREAD_NULL 0x40
- +#define THREAD_TYPE_HRT (1 << 0)
- +#define THREAD_TYPE_SPECIAL 0
- +#define THREAD_TYPE_NORMAL 0
- +#define THREAD_TYPE_BACKGROUND (1 << 1)
- +
- +/*
- + * This is the upper bound on the maximum hardware threads that one will find
- + * on a Ubicom processor. It is used to size per hardware thread data structures.
- + */
- +#define THREAD_ARCHITECTURAL_MAX 16
- +
- +/*
- + * TODO: Rename this at some point to be thread_
- + */
- +extern unsigned int sw_ksp[THREAD_ARCHITECTURAL_MAX];
- +
- +
- +/*
- + * thread_get_self()
- + */
- +static inline thread_t thread_get_self(void)
- +{
- + thread_t result;
- + asm (
- + "lsr.4 %0, ROSR, #2 \n\t"
- + : "=d" (result)
- + :
- + : "cc"
- + );
- + return result & 31;
- +}
- +
- +/*
- + * thread_suspend()
- + */
- +static inline void thread_suspend(void)
- +{
- + asm volatile (
- + "suspend\n\t"
- + :
- + :
- + );
- +}
- +
- +/*
- + * thread_resume()
- + */
- +static inline void thread_resume(thread_t thread)
- +{
- + asm volatile (
- + "move.4 MT_ACTIVE_SET, %0 \n\t"
- + "pipe_flush 0 \n\t"
- + "pipe_flush 0 \n\t"
- + :
- + : "d" (1 << thread)
- + );
- +}
- +
- +
- +
- +/*
- + * thread_enable_mask()
- + * Enable all threads in the mask.
- + *
- + * All writes to MT_EN must be protected by the MT_EN_LOCK bit
- + */
- +static inline void thread_enable_mask(unsigned int mask)
- +{
- + /*
- + * must flush the pipeline twice.
- + * first pipe_flush is to ensure write to MT_EN is completed
- + * second one is to ensure any new instructions from
- + * the targeted thread (the one being disabled), that
- + * are issued while the write to MT_EN is being executed,
- + * are completed.
- + */
- + UBICOM32_LOCK(MT_EN_LOCK_BIT);
- + asm volatile (
- + "or.4 MT_EN, MT_EN, %0 \n\t"
- + "pipe_flush 0 \n\t"
- + "pipe_flush 0 \n\t"
- + :
- + : "d" (mask)
- + : "cc"
- + );
- + UBICOM32_UNLOCK(MT_EN_LOCK_BIT);
- +}
- +
- +/*
- + * thread_enable()
- + */
- +static inline void thread_enable(thread_t thread)
- +{
- + thread_enable_mask(1 << thread);
- +}
- +
- +/*
- + * thread_disable_mask()
- + * Disable all threads in the mask.
- + *
- + * All writes to MT_EN must be protected by the MT_EN_LOCK bit
- + */
- +static inline void thread_disable_mask(unsigned int mask)
- +{
- + /*
- + * must flush the pipeline twice.
- + * first pipe_flush is to ensure write to MT_EN is completed
- + * second one is to ensure any new instructions from
- + * the targeted thread (the one being disabled), that
- + * are issued while the write to MT_EN is being executed,
- + * are completed.
- + */
- + UBICOM32_LOCK(MT_EN_LOCK_BIT);
- + asm volatile (
- + "and.4 MT_EN, MT_EN, %0 \n\t"
- + "pipe_flush 0 \n\t"
- + "pipe_flush 0 \n\t"
- + :
- + : "d" (~mask)
- + : "cc"
- + );
- + UBICOM32_UNLOCK(MT_EN_LOCK_BIT);
- +}
- +
- +/*
- + * thread_disable()
- + */
- +static inline void thread_disable(thread_t thread)
- +{
- + thread_disable_mask(1 << thread);
- +}
- +
- +/*
- + * thread_disable_others()
- + * Disable all other threads
- + */
- +static inline void thread_disable_others(void)
- +{
- + thread_t self = thread_get_self();
- + thread_disable_mask(~(1 << self));
- +}
- +
- +/*
- + * thread_is_trapped()
- + * Is the specified tid trapped?
- + */
- +static inline int thread_is_trapped(thread_t tid)
- +{
- + int thread_mask = (1 << tid);
- + int trap_thread;
- +
- + asm (
- + "move.4 %0, MT_TRAP \n\t"
- + : "=d" (trap_thread)
- + :
- + );
- + return (trap_thread & thread_mask);
- +}
- +
- +/*
- + * thread_is_enabled()
- + * Is the specified tid enabled?
- + */
- +static inline int thread_is_enabled(thread_t tid)
- +{
- + int thread_mask = (1 << tid);
- + int enabled_threads;
- +
- + asm (
- + "move.4 %0, MT_EN \n\t"
- + : "=d" (enabled_threads)
- + :
- + );
- + return (enabled_threads & thread_mask);
- +}
- +
- +/*
- + * thread_get_instruction_count()
- + */
- +static inline unsigned int thread_get_instruction_count(void)
- +{
- + unsigned int result;
- + asm (
- + "move.4 %0, INST_CNT \n\t"
- + : "=r" (result)
- + );
- + return result;
- +}
- +
- +/*
- + * thread_get_pc()
- + * pc could point to a speculative and cancelled instruction unless thread is disabled
- + */
- +static inline void *thread_get_pc(thread_t thread)
- +{
- + void *result;
- + asm (
- + "move.4 csr, %1 \n\t"
- + "setcsr_flush 0 \n\t"
- + "move.4 %0, pc \n\t"
- + "move.4 csr, #0 \n\t"
- + "setcsr_flush 0 \n\t"
- + : "=r" (result)
- + : "r" ((thread << 9) | (1 << 8))
- + );
- + return result;
- +}
- +
- +/*
- + * thread_get_trap_cause()
- + * This should be called only when the thread is not running
- + */
- +static inline unsigned int thread_get_trap_cause(thread_t thread)
- +{
- + unsigned int result;
- + asm (
- + "move.4 csr, %1 \n\t"
- + "setcsr_flush 0 \n\t"
- + "move.4 %0, trap_cause \n\t"
- + "move.4 csr, #0 \n\t"
- + "setcsr_flush 0 \n\t"
- + : "=r" (result)
- + : "r" ((thread << 9) | (1 << 8))
- + );
- + return result;
- +}
- +
- +/*
- + * THREAD_STALL macro.
- + */
- +#define THREAD_STALL \
- + asm volatile ( \
- + "move.4 mt_dbg_active_clr, #-1 \n\t" \
- + "pipe_flush 0 \n\t" \
- + : \
- + : \
- + )
- +
- +extern unsigned int thread_get_mainline(void);
- +extern void thread_set_mainline(thread_t tid);
- +extern thread_t thread_alloc(void);
- +extern thread_t thread_start(thread_t thread, thread_exec_fn_t exec, void *arg, unsigned int *sp_high, thread_type_t type);
- +
- +/*
- + * asm macros
- + */
- +asm (
- +/*
- + * thread_get_self
- + * Read and shift the current thread into reg
- + */
- +".macro thread_get_self reg \n\t"
- +" lsr.4 \\reg, ROSR, #2 \n\t"
- +" and.4 \\reg, #31, \\reg \n\t"/* Mask to get thread number into
- + * register */
- +".endm \n\t"
- +
- +/*
- + * thread_get_self_mask
- + * Read and shift the current thread mask into reg
- + */
- +".macro thread_get_self_mask reg \n\t"
- +" lsr.4 \\reg, ROSR, #2 \n\t"
- +" lsl.4 \\reg, #1, \\reg \n\t" /* Thread bit */
- +".endm \n\t"
- + );
- +
- +#else /* __ASSEMBLY__ */
- +
- +#include <asm/thread-asm.h>
- +
- +#endif /* __ASSEMBLY__ */
- +#endif /* _ASM_UBICOM32_THREAD_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/thread_info.h linux-2.6.28.10/arch/ubicom32/include/asm/thread_info.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/thread_info.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/thread_info.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,134 @@
- +/*
- + * arch/ubicom32/include/asm/thread_info.h
- + * Ubicom32 architecture low-level thread information.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Adapted from the i386 and PPC versions by Greg Ungerer ([email protected])
- + * Copyright (C) 2002 David Howells ([email protected])
- + * - Incorporating suggestions made by Linus Torvalds and Dave Miller
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_THREAD_INFO_H
- +#define _ASM_UBICOM32_THREAD_INFO_H
- +
- +#include <asm/page.h>
- +
- +/*
- + * Size of kernel stack for each process. This must be a power of 2...
- + */
- +#ifdef CONFIG_4KSTACKS
- +#define THREAD_SIZE_ORDER (0)
- +#else
- +#define THREAD_SIZE_ORDER (1)
- +#endif
- +
- +/*
- + * for asm files, THREAD_SIZE is now generated by asm-offsets.c
- + */
- +#define THREAD_SIZE (PAGE_SIZE<<THREAD_SIZE_ORDER)
- +
- +#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 */
- + int interrupt_nesting; /* Interrupt nesting level. */
- + 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, \
- + .interrupt_nesting = 0, \
- + .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 */
- +static inline struct thread_info *current_thread_info(void)
- +{
- + struct thread_info *ti;
- +
- + asm (
- + "and.4 %0, sp, %1\n\t"
- + : "=&r" (ti)
- + : "d" (~(THREAD_SIZE-1))
- + : "cc"
- + );
- +
- + return ti;
- +}
- +
- +#define STACK_WARN (THREAD_SIZE / 8)
- +
- +#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR 1
- +
- +/* thread information allocation */
- +#define alloc_thread_info(tsk) ((struct thread_info *) \
- + __get_free_pages(GFP_KERNEL, THREAD_SIZE_ORDER))
- +#define free_thread_info(ti) free_pages((unsigned long) (ti), THREAD_SIZE_ORDER)
- +#endif /* __ASSEMBLY__ */
- +
- +#define PREEMPT_ACTIVE 0x4000000
- +
- +/*
- + * thread information flag bit numbers
- + */
- +#define TIF_SYSCALL_TRACE 0 /* syscall trace active */
- +#define TIF_SIGPENDING 1 /* signal pending */
- +#define TIF_NEED_RESCHED 2 /* rescheduling necessary */
- +#define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling
- + TIF_NEED_RESCHED */
- +#define TIF_MEMDIE 4
- +
- +/* as above, but as bit values */
- +#define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE)
- +#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 */
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _ASM_UBICOM32_THREAD_INFO_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/timex.h linux-2.6.28.10/arch/ubicom32/include/asm/timex.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/timex.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/timex.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,56 @@
- +/*
- + * arch/ubicom32/include/asm/timex.h
- + * Ubicom32 architecture timex specifications.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_TIMEX_H
- +#define _ASM_UBICOM32_TIMEX_H
- +
- +#define CLOCK_TICK_RATE 266000000
- +
- +// #define ARCH_HAS_READ_CURRENT_TIMER
- +
- +typedef unsigned long cycles_t;
- +
- +static inline cycles_t get_cycles(void)
- +{
- + return 0;
- +}
- +
- +extern int timer_alloc(void);
- +extern void timer_set(int timervector, unsigned int cycles);
- +extern int timer_reset(int timervector, unsigned int cycles);
- +extern void timer_tick_init(void);
- +extern void timer_device_init(void);
- +
- +#if defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
- +extern void local_timer_interrupt(void);
- +#endif
- +
- +#if defined(CONFIG_LOCAL_TIMERS) || defined(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST)
- +extern int local_timer_setup(unsigned int cpu);
- +#endif
- +
- +#endif /* _ASM_UBICOM32_TIMEX_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/tlbflush.h linux-2.6.28.10/arch/ubicom32/include/asm/tlbflush.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/tlbflush.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/tlbflush.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,79 @@
- +/*
- + * arch/ubicom32/include/asm/tlbflush.h
- + * TLB operations for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + * Copyright (C) 2000 Lineo, David McCullough <[email protected]>
- + * Copyright (C) 2000-2002, Greg Ungerer <[email protected]>
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_TLB_FLUSH_H
- +#define _ASM_UBICOM32_TLB_FLUSH_H
- +
- +#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();
- +}
- +
- +static inline void flush_tlb_kernel_page(unsigned long addr)
- +{
- + BUG();
- +}
- +
- +#endif /* _ASM_UBICOM32_TLB_FLUSH_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/tlb.h linux-2.6.28.10/arch/ubicom32/include/asm/tlb.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/tlb.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/tlb.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,47 @@
- +/*
- + * arch/ubicom32/include/asm/tlb.h
- + * Ubicom32 architecture TLB operations.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_TLB_H
- +#define _ASM_UBICOM32_TLB_H
- +
- +/*
- + * ubicom32 doesn't need any special per-pte or
- + * per-vma handling..
- + */
- +#define tlb_start_vma(tlb, vma) do { } while (0)
- +#define tlb_end_vma(tlb, vma) do { } while (0)
- +#define __tlb_remove_tlb_entry(tlb, ptep, address) do { } while (0)
- +
- +/*
- + * .. because we flush the whole mm when it
- + * fills up.
- + */
- +#define tlb_flush(tlb)
- +
- +#include <asm-generic/tlb.h>
- +
- +#endif /* _ASM_UBICOM32_TLB_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/topology.h linux-2.6.28.10/arch/ubicom32/include/asm/topology.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/topology.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/topology.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/topology.h
- + * Generic topology.h definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_TOPOLOGY_H
- +#define _ASM_UBICOM32_TOPOLOGY_H
- +
- +#include <asm-generic/topology.h>
- +
- +#endif /* _ASM_UBICOM32_TOPOLOGY_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/traps.h linux-2.6.28.10/arch/ubicom32/include/asm/traps.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/traps.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/traps.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,55 @@
- +/*
- + * arch/ubicom32/include/asm/traps.h
- + * Trap related definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_TRAPS_H
- +#define _ASM_UBICOM32_TRAPS_H
- +
- +/*
- + * Trap causes passed from ultra to Host OS
- + */
- +#define TRAP_CAUSE_TOTAL 13
- +#define TRAP_CAUSE_DST_RANGE_ERR 12
- +#define TRAP_CAUSE_SRC1_RANGE_ERR 11
- +#define TRAP_CAUSE_I_RANGE_ERR 10
- +#define TRAP_CAUSE_DCAPT 9
- +#define TRAP_CAUSE_DST_SERROR 8
- +#define TRAP_CAUSE_SRC1_SERROR 7
- +#define TRAP_CAUSE_DST_MISALIGNED 6
- +#define TRAP_CAUSE_SRC1_MISALIGNED 5
- +#define TRAP_CAUSE_DST_DECODE_ERR 4
- +#define TRAP_CAUSE_SRC1_DECODE_ERR 3
- +#define TRAP_CAUSE_ILLEGAL_INST 2
- +#define TRAP_CAUSE_I_SERROR 1
- +#define TRAP_CAUSE_I_DECODE_ERR 0
- +
- +extern void trap_handler(int irq, struct pt_regs *regs);
- +extern void trap_init_interrupt(void);
- +extern void unaligned_emulate(unsigned int thread);
- +extern int unaligned_only(unsigned int cause);
- +
- +#endif /* _ASM_UBICOM32_TRAPS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/types.h linux-2.6.28.10/arch/ubicom32/include/asm/types.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/types.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/types.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,75 @@
- +/*
- + * arch/ubicom32/include/asm/types.h
- + * Date type definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_TYPES_H
- +#define _ASM_UBICOM32_TYPES_H
- +
- +/*
- + * 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.
- + */
- +
- +#include <asm-generic/int-ll64.h>
- +
- +#ifndef __ASSEMBLY__
- +
- +typedef unsigned short umode_t;
- +
- +#endif /* __ASSEMBLY__ */
- +
- +/*
- + * These aren't exported outside the kernel to avoid name space clashes
- + */
- +#ifdef __KERNEL__
- +
- +#define BITS_PER_LONG 32
- +
- +#ifndef __ASSEMBLY__
- +
- +/* DMA addresses are always 32-bits wide */
- +
- +typedef u32 dma_addr_t;
- +typedef u32 dma64_addr_t;
- +
- +/*
- + * XXX These are "Ubicom style" typedefs. They should be removed in all files used by linux.
- + */
- +typedef u32 u32_t;
- +typedef s32 s32_t;
- +typedef u16 u16_t;
- +typedef s16 s16_t;
- +typedef u8 u8_t;
- +typedef s8 s8_t;
- +
- +#endif /* __ASSEMBLY__ */
- +
- +#endif /* __KERNEL__ */
- +
- +#endif /* _ASM_UBICOM32_TYPES_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/uaccess.h linux-2.6.28.10/arch/ubicom32/include/asm/uaccess.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/uaccess.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/uaccess.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,347 @@
- +/*
- + * arch/ubicom32/include/asm/uaccess.h
- + * User space memory access functions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + * arch/alpha
- + */
- +#ifndef _ASM_UBICOM32_UACCESS_H
- +#define _ASM_UBICOM32_UACCESS_H
- +
- +/*
- + * User space memory access functions
- + */
- +#include <linux/sched.h>
- +#include <linux/mm.h>
- +#include <linux/string.h>
- +
- +#include <asm/segment.h>
- +
- +#define VERIFY_READ 0
- +#define VERIFY_WRITE 1
- +
- +/*
- + * 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.
- + */
- +struct exception_table_entry
- +{
- + unsigned long insn, fixup;
- +};
- +
- +/*
- + * Ubicom32 does not currently support the exception table handling.
- + */
- +extern unsigned long search_exception_table(unsigned long);
- +
- +
- +#if defined(CONFIG_ACCESS_OK_CHECKS_ENABLED)
- +extern int __access_ok(unsigned long addr, unsigned long size);
- +#else
- +static inline int __access_ok(unsigned long addr, unsigned long size)
- +{
- + return 1;
- +}
- +#endif
- +#define access_ok(type, addr, size) \
- + likely(__access_ok((unsigned long)(addr), (size)))
- +
- +/*
- + * The following functions do not exist. They keep callers
- + * of put_user and get_user from passing unsupported argument
- + * types. They result in a link time error.
- + */
- +extern int __put_user_bad(void);
- +extern int __get_user_bad(void);
- +
- +/*
- + * __put_user_no_check()
- + * Put the requested data into the user space verifying the address
- + *
- + * Careful to not
- + * (a) re-use the arguments for side effects (sizeof/typeof is ok)
- + * (b) require any knowledge of processes at this stage
- + */
- +#define __put_user_no_check(x, ptr, size) \
- +({ \
- + int __pu_err = 0; \
- + __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
- + switch (size) { \
- + case 1: \
- + case 2: \
- + case 4: \
- + case 8: \
- + *__pu_addr = (__typeof__(*(ptr)))x; \
- + break; \
- + default: \
- + __pu_err = __put_user_bad(); \
- + break; \
- + } \
- + __pu_err; \
- +})
- +
- +/*
- + * __put_user_check()
- + * Put the requested data into the user space verifying the address
- + *
- + * Careful to not
- + * (a) re-use the arguments for side effects (sizeof/typeof is ok)
- + * (b) require any knowledge of processes at this stage
- + *
- + * If requested, access_ok() will verify that ptr is a valid user
- + * pointer.
- + */
- +#define __put_user_check(x, ptr, size) \
- +({ \
- + int __pu_err = -EFAULT; \
- + __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
- + if (access_ok(VERIFY_WRITE, __pu_addr, size)) { \
- + __pu_err = 0; \
- + switch (size) { \
- + case 1: \
- + case 2: \
- + case 4: \
- + case 8: \
- + *__pu_addr = (__typeof__(*(ptr)))x; \
- + break; \
- + default: \
- + __pu_err = __put_user_bad(); \
- + break; \
- + } \
- + } \
- + __pu_err; \
- +})
- +
- +/*
- + * __get_user_no_check()
- + * Read the value at ptr into x.
- + *
- + * If requested, access_ok() will verify that ptr is a valid user
- + * pointer. If the caller passes a modifying argument for ptr (e.g. x++)
- + * this macro will not work.
- + */
- +#define __get_user_no_check(x, ptr, size) \
- +({ \
- + int __gu_err = 0; \
- + __typeof__((x)) __gu_val = 0; \
- + const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
- + switch (size) { \
- + case 1: \
- + case 2: \
- + case 4: \
- + case 8: \
- + __gu_val = (__typeof__((x)))*(__gu_addr); \
- + break; \
- + default: \
- + __gu_err = __get_user_bad(); \
- + (x) = 0; \
- + break; \
- + } \
- + (x) = __gu_val; \
- + __gu_err; \
- +})
- +
- +/*
- + * __get_user_check()
- + * Read the value at ptr into x.
- + *
- + * If requested, access_ok() will verify that ptr is a valid user
- + * pointer.
- + */
- +#define __get_user_check(x, ptr, size) \
- +({ \
- + int __gu_err = -EFAULT; \
- + __typeof__(x) __gu_val = 0; \
- + const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
- + if (access_ok(VERIFY_READ, __gu_addr, size)) { \
- + __gu_err = 0; \
- + switch (size) { \
- + case 1: \
- + case 2: \
- + case 4: \
- + case 8: \
- + __gu_val = (__typeof__((x)))*(__gu_addr); \
- + break; \
- + default: \
- + __gu_err = __get_user_bad(); \
- + (x) = 0; \
- + break; \
- + } \
- + } \
- + (x) = __gu_val; \
- + __gu_err; \
- +})
- +
- +/*
- + * The "xxx" versions are allowed to perform some amount of address
- + * space checking. See access_ok().
- + */
- +#define put_user(x,ptr) \
- + __put_user_check((__typeof__(*(ptr)))(x),(ptr), sizeof(*(ptr)))
- +#define get_user(x,ptr) \
- + __get_user_check((x), (ptr), sizeof(*(ptr)))
- +
- +/*
- + * The "__xxx" versions do not do address space checking, useful when
- + * doing multiple accesses to the same area (the programmer has to do the
- + * checks by hand with "access_ok()")
- + */
- +#define __put_user(x,ptr) \
- + __put_user_no_check((__typeof__(*(ptr)))(x),(ptr), sizeof(*(ptr)))
- +#define __get_user(x,ptr) \
- + __get_user_no_check((x), (ptr), sizeof(*(ptr)))
- +
- +/*
- + * __copy_tofrom_user_no_check()
- + * Copy the data either to or from user space.
- + *
- + * Return the number of bytes NOT copied.
- + */
- +static inline unsigned long
- +__copy_tofrom_user_no_check(void *to, const void *from, unsigned long n)
- +{
- + memcpy(to, from, n);
- + return 0;
- +}
- +
- +/*
- + * copy_to_user()
- + * Copy the kernel data to user space.
- + *
- + * Return the number of bytes that were copied.
- + */
- +static inline unsigned long
- +copy_to_user(void __user *to, const void *from, unsigned long n)
- +{
- + if (!access_ok(VERIFY_WRITE, to, n)) {
- + return n;
- + }
- + return __copy_tofrom_user_no_check((__force void *)to, from, n);
- +}
- +
- +/*
- + * copy_from_user()
- + * Copy the user data to kernel space.
- + *
- + * Return the number of bytes that were copied. On error, we zero
- + * out the destination.
- + */
- +static inline unsigned long
- +copy_from_user(void *to, const void __user *from, unsigned long n)
- +{
- + if (!access_ok(VERIFY_READ, from, n)) {
- + return n;
- + }
- + return __copy_tofrom_user_no_check(to, (__force void *)from, n);
- +}
- +
- +#define __copy_to_user(to, from, n) \
- + __copy_tofrom_user_no_check((__force void *)to, from, n)
- +#define __copy_from_user(to, from, n) \
- + __copy_tofrom_user_no_check(to, (__force void *)from, n)
- +#define __copy_to_user_inatomic(to, from, n) \
- + __copy_tofrom_user_no_check((__force void *)to, from, n)
- +#define __copy_from_user_inatomic(to, from, n) \
- + __copy_tofrom_user_no_check(to, (__force void *)from, n)
- +
- +#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; })
- +
- +/*
- + * strncpy_from_user()
- + * Copy a null terminated string from userspace.
- + *
- + * dst - Destination in kernel space. The buffer must be at least count.
- + * src - Address of string in user space.
- + * count - Maximum number of bytes to copy (including the trailing NULL).
- + *
- + * Returns the length of the string (not including the trailing NULL. If
- + * count is smaller than the length of the string, we copy count bytes
- + * and return count.
- + *
- + */
- +static inline long strncpy_from_user(char *dst, const __user char *src, long count)
- +{
- + char *tmp;
- + if (!access_ok(VERIFY_READ, src, 1)) {
- + return -EFAULT;
- + }
- +
- + strncpy(dst, src, count);
- + for (tmp = dst; *tmp && count > 0; tmp++, count--) {
- + ;
- + }
- + return(tmp - dst);
- +}
- +
- +/*
- + * strnlen_user()
- + * Return the size of a string (including the ending 0)
- + *
- + * Return -EFAULT on exception, a value greater than <n> if too long
- + */
- +static inline long strnlen_user(const __user char *src, long n)
- +{
- + if (!access_ok(VERIFY_READ, src, 1)) {
- + return -EFAULT;
- + }
- + return(strlen(src) + 1);
- +}
- +
- +#define strlen_user(str) strnlen_user(str, 32767)
- +
- +/*
- + * __clear_user()
- + * Zero Userspace
- + */
- +static inline unsigned long __clear_user(__user void *to, unsigned long n)
- +{
- + memset(to, 0, n);
- + return 0;
- +}
- +
- +/*
- + * clear_user()
- + * Zero user space (check for valid addresses)
- + */
- +static inline unsigned long clear_user(__user void *to, unsigned long n)
- +{
- + if (!access_ok(VERIFY_WRITE, to, n)) {
- + return -EFAULT;
- + }
- + return __clear_user(to, n);
- +}
- +
- +#endif /* _ASM_UBICOM32_UACCESS_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common-asm.h linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common-asm.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common-asm.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common-asm.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,49 @@
- +/*
- + * arch/ubicom32/include/asm/ubicom32-common-asm.h
- + * Ubicom32 atomic lock operations.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_UBICOM32_COMMON_ASM_H
- +#define _ASM_UBICOM32_UBICOM32_COMMON_ASM_H
- +
- +/*
- + * atomic_lock_acquire macro
- + * Equivalent to __atomic_lock_acquire()
- + */
- +.macro atomic_lock_acquire
- + bset scratchpad1, scratchpad1, #ATOMIC_LOCK_BIT
- + jmpne.f .-4
- +.endm
- +
- +/*
- + * atomic_lock_release macro
- + * Equivalent to __atomic_lock_release()
- + */
- +.macro atomic_lock_release
- + bclr scratchpad1, scratchpad1, #ATOMIC_LOCK_BIT
- +.endm
- +
- +#endif /* _ASM_UBICOM32_UBICOM32_COMMON_ASM_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common.h linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ubicom32-common.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ubicom32-common.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,124 @@
- +/*
- + * arch/ubicom32/include/asm/ubicom32-common.h
- + * Ubicom32 atomic lock operations.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +
- +#ifndef _ASM_UBICOM32_UBICOM32_COMMON_H
- +#define _ASM_UBICOM32_UBICOM32_COMMON_H
- +
- +#define S(arg) #arg
- +#define D(arg) S(arg)
- +/*
- + * scratchpad1 is owned by the LDSR.
- + *
- + * The upper bits provide 16 global spinlocks. Acquiring one of these
- + * global spinlocks synchornizes across multiple threads and prevents
- + * the LDSR from delivering any interrupts while the lock is held.
- + * Use these locks only when absolutely required.
- + *
- + * The lower 16 bits of scratchpad1 are used as per thread interrupt
- + * enable/disable bits. These bits will prevent a thread from receiving
- + * any interrupts.
- + *
- + * Bit Usage:
- + * - MT_EN_LOCK_BIT - Protects writes to MT_EN, so code can read current value
- + * then write a new value atomically (profiler for example)
- + * - ATOMIC_LOCK_BIT - Used to provide general purpose atomic handling.
- + * - LDSR_LOCK_BIT - Used by the LDSR exclusively to provide protection.
- + * - LSB 16 bits - Used by the LDSR to represent thread enable/disable bits.
- + */
- +#define MT_EN_LOCK_BIT 31
- +#define ATOMIC_LOCK_BIT 30
- +#define LDSR_LOCK_BIT 29
- +#define PCI_LOCK_BIT 28
- +
- +#if !defined(__ASSEMBLY__)
- +
- +#define UBICOM32_TRYLOCK(bit) \
- + asm volatile ( \
- + " move.4 %0, #0 \n\t" \
- + " bset scratchpad1, scratchpad1, #"D(bit)" \n\t" \
- + " jmpne.f 1f \n\t" \
- + " move.4 %0, #1 \n\t" \
- + "1: \n\t" \
- + : "=r" (ret) \
- + : \
- + : "cc", "memory" \
- + ); \
- +
- +#define UBICOM32_UNLOCK(bit) \
- + asm volatile ( \
- + " bclr scratchpad1, scratchpad1, #"D(bit)" \n\t" \
- + : \
- + : \
- + : "cc", "memory" \
- + ); \
- +
- +#define UBICOM32_LOCK(bit) \
- + asm volatile ( \
- + "1: bset scratchpad1, scratchpad1, #"D(bit)" \n\t" \
- + " jmpne.f 1b \n\t" \
- + : \
- + : \
- + : "cc", "memory" \
- + ); \
- +
- +/*
- + * __atomic_lock_trylock()
- + * Attempt to acquire the lock, return TRUE if acquired.
- + */
- +static inline int __atomic_lock_trylock(void)
- +{
- + int ret;
- + UBICOM32_TRYLOCK(ATOMIC_LOCK_BIT);
- + return ret;
- +}
- +
- +/*
- + * __atomic_lock_release()
- + * Release the global atomic lock.
- + *
- + * Note: no one is suspended waiting since this lock is a spinning lock.
- + */
- +static inline void __atomic_lock_release(void)
- +{
- + UBICOM32_UNLOCK(ATOMIC_LOCK_BIT);
- +}
- +
- +/*
- + * __atomic_lock_acquire()
- + * Acquire the global atomic lock, spin if not available.
- + */
- +static inline void __atomic_lock_acquire(void)
- +{
- + UBICOM32_LOCK(ATOMIC_LOCK_BIT);
- +}
- +#else /* __ASSEMBLY__ */
- +
- +#include <asm/ubicom32-common-asm.h>
- +
- +#endif /* __ASSEMBLY__ */
- +#endif /* _ASM_UBICOM32_UBICOM32_COMMON_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/ucontext.h linux-2.6.28.10/arch/ubicom32/include/asm/ucontext.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/ucontext.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/ucontext.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,39 @@
- +/*
- + * arch/ubicom32/include/asm/ucontext.h
- + * Definition of ucontext structure for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_UCONTEXT_H
- +#define _ASM_UBICOM32_UCONTEXT_H
- +
- +struct ucontext {
- + unsigned long uc_flags;
- + struct ucontext *uc_link;
- + stack_t uc_stack;
- + struct sigcontext uc_mcontext;
- + sigset_t uc_sigmask; /* mask last for extensibility */
- +};
- +
- +#endif /* _ASM_UBICOM32_UCONTEXT_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/unaligned.h linux-2.6.28.10/arch/ubicom32/include/asm/unaligned.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/unaligned.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/unaligned.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,44 @@
- +/*
- + * arch/ubicom32/include/asm/unaligned.h
- + * Ubicom32 architecture unaligned memory access definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + *
- + * TODO: This is a copy of arm unaligned handling that probably needs
- + * to be optimized for UBICOM32, but it works for now.
- + */
- +
- +#ifndef _ASM_UBICOM32_UNALIGNED_H
- +#define _ASM_UBICOM32_UNALIGNED_H
- +
- +#include <asm/types.h>
- +
- +#include <linux/unaligned/le_byteshift.h>
- +#include <linux/unaligned/be_byteshift.h>
- +#include <linux/unaligned/generic.h>
- +
- +#define get_unaligned __get_unaligned_be
- +#define put_unaligned __put_unaligned_be
- +
- +#endif /* _ASM_UBICOM32_UNALIGNED_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/unistd.h linux-2.6.28.10/arch/ubicom32/include/asm/unistd.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/unistd.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/unistd.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,400 @@
- +/*
- + * arch/ubicom32/include/asm/unistd.h
- + * Ubicom32 architecture syscall definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_UNISTD_H
- +#define _ASM_UBICOM32_UNISTD_H
- +
- +/*
- + * This file contains the system call numbers.
- + */
- +
- +#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
- +#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_pread64 180
- +#define __NR_pwrite64 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
- +#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_vserver 278
- +#define __NR_add_key 279
- +#define __NR_request_key 280
- +#define __NR_keyctl 281
- +#define __NR_ioprio_set 282
- +#define __NR_ioprio_get 283
- +#define __NR_inotify_init 284
- +#define __NR_inotify_add_watch 285
- +#define __NR_inotify_rm_watch 286
- +#define __NR_migrate_pages 287
- +#define __NR_openat 288
- +#define __NR_mkdirat 289
- +#define __NR_mknodat 290
- +#define __NR_fchownat 291
- +#define __NR_futimesat 292
- +#define __NR_fstatat64 293
- +#define __NR_unlinkat 294
- +#define __NR_renameat 295
- +#define __NR_linkat 296
- +#define __NR_symlinkat 297
- +#define __NR_readlinkat 298
- +#define __NR_fchmodat 299
- +#define __NR_faccessat 300
- +#define __NR_pselect6 301
- +#define __NR_ppoll 302
- +#define __NR_unshare 303
- +#define __NR_set_robust_list 304
- +#define __NR_get_robust_list 305
- +#define __NR_splice 306
- +#define __NR_sync_file_range 307
- +#define __NR_tee 308
- +#define __NR_vmsplice 309
- +#define __NR_move_pages 310
- +#define __NR_sched_setaffinity 311
- +#define __NR_sched_getaffinity 312
- +#define __NR_kexec_load 313
- +#define __NR_getcpu 314
- +#define __NR_epoll_pwait 315
- +#define __NR_utimensat 316
- +#define __NR_signalfd 317
- +#define __NR_timerfd_create 318
- +#define __NR_eventfd 319
- +#define __NR_fallocate 320
- +#define __NR_timerfd_settime 321
- +#define __NR_timerfd_gettime 322
- +#define __NR_signalfd4 323
- +#define __NR_eventfd2 324
- +#define __NR_epoll_create1 325
- +#define __NR_dup3 326
- +#define __NR_pipe2 327
- +#define __NR_inotify_init1 328
- +
- +#ifdef __KERNEL__
- +
- +#define NR_syscalls 329
- +
- +#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
- +
- +/*
- + * "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")
- +#define cond_syscall(x) long x(void) __attribute__((weak,alias("sys_ni_syscall")))
- +#endif /* __KERNEL__ */
- +
- +#endif /* _ASM_UBICOM32_UNISTD_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/user.h linux-2.6.28.10/arch/ubicom32/include/asm/user.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/user.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/user.h 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,82 @@
- +/*
- + * arch/ubicom32/include/asm/user.h
- + * Ubicom32 architecture core file definitions.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_USER_H
- +#define _ASM_UBICOM32_USER_H
- +
- +#include <asm/ptrace.h>
- +#include <asm/page.h>
- +/*
- + * Adapted from <asm-powerpc/user.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, NOT the osf-core). The 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 handy at some point. All of the registers
- + * are stored as part of the upage. The upage should always be
- + * only one page long.
- + * data: The data segment follows next. We use current->end_text to
- + * current->brk to pick up all of the user variables, plus any memory
- + * that may have been sbrk'ed. 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 usp to
- + * current->start_stack, so we round each of these in order to be able
- + * to write an integer number of pages.
- + */
- +
- +struct user_ubicom32fp_struct {
- +};
- +
- +struct user {
- + struct pt_regs regs; /* entire machine state */
- + size_t u_tsize; /* text size (pages) */
- + size_t u_dsize; /* data size (pages) */
- + size_t u_ssize; /* stack size (pages) */
- + unsigned long start_code; /* text starting address */
- + unsigned long start_data; /* data starting address */
- + unsigned long start_stack; /* stack starting address */
- + long int signal; /* signal causing core dump */
- + unsigned long u_ar0; /* help gdb find registers */
- + unsigned long magic; /* identifies a core file */
- + char u_comm[32]; /* user command name */
- +};
- +
- +#define NBPG PAGE_SIZE
- +#define UPAGES 1
- +#define HOST_TEXT_START_ADDR (u.start_code)
- +#define HOST_DATA_START_ADDR (u.start_data)
- +#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
- +
- +#endif /* _ASM_UBICOM32_USER_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/include/asm/xor.h linux-2.6.28.10/arch/ubicom32/include/asm/xor.h
- --- linux-2.6.28.10_o/arch/ubicom32/include/asm/xor.h 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/include/asm/xor.h 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,33 @@
- +/*
- + * arch/ubicom32/include/asm/xor.h
- + * Generic xor.h definitions for Ubicom32 architecture.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +#ifndef _ASM_UBICOM32_XOR_H
- +#define _ASM_UBICOM32_XOR_H
- +
- +#include <asm-generic/xor.h>
- +
- +#endif /* _ASM_UBICOM32_XOR_H */
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/Kconfig linux-2.6.28.10/arch/ubicom32/Kconfig
- --- linux-2.6.28.10_o/arch/ubicom32/Kconfig 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/Kconfig 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,457 @@
- +#
- +# For a description of the syntax of this configuration file,
- +# see Documentation/kbuild/kconfig-language.txt.
- +#
- +
- +mainmenu "uClinux/ubicom32 (w/o MMU) Kernel Configuration"
- +
- +config RAMBASE
- + hex
- + default "0x40000000"
- + help
- + Define the address that RAM starts at.
- +
- +config UBICOM32
- + bool
- + select HAVE_OPROFILE
- + default y
- +
- +config RAMKERNEL
- + bool
- + default y
- +
- +config CPU_BIG_ENDIAN
- + bool
- + default y
- +
- +config FORCE_MAX_ZONEORDER
- + int
- + default "14"
- +
- +config HAVE_CLK
- + bool
- + default y
- +
- +config MMU
- + bool
- + default n
- +
- +config FPU
- + bool
- + default n
- +
- +config ZONE_DMA
- + bool
- + default y
- +
- +config RWSEM_GENERIC_SPINLOCK
- + bool
- + default y
- +
- +config RWSEM_XCHGADD_ALGORITHM
- + bool
- + default n
- +
- +config ARCH_HAS_ILOG2_U32
- + bool
- + default n
- +
- +config ARCH_HAS_ILOG2_U64
- + bool
- + default n
- +
- +config GENERIC_FIND_NEXT_BIT
- + bool
- + default y
- +
- +config GENERIC_GPIO
- + bool
- + default y
- +
- +config GPIOLIB
- + bool
- + default y
- +
- +config GENERIC_HWEIGHT
- + bool
- + default y
- +
- +config GENERIC_HARDIRQS
- + bool
- + default y
- +
- +config STACKTRACE_SUPPORT
- + bool
- + default y
- +
- +config LOCKDEP_SUPPORT
- + bool
- + default y
- +
- +config GENERIC_CALIBRATE_DELAY
- + bool
- + default y
- +
- +config GENERIC_TIME
- + bool
- + default y
- +
- +config TIME_LOW_RES
- + bool
- + default y
- +
- +config GENERIC_CLOCKEVENTS
- + bool
- + default y
- +
- +config GENERIC_CLOCKEVENTS_BROADCAST
- + bool
- + depends on GENERIC_CLOCKEVENTS
- + default y if SMP && !LOCAL_TIMERS
- +
- +config NO_IOPORT
- + def_bool y
- +
- +config ARCH_SUPPORTS_AOUT
- + def_bool y
- +
- +config IRQ_PER_CPU
- + bool
- + default y
- +
- +config SCHED_NO_NO_OMIT_FRAME_POINTER
- + bool
- + default y
- +
- +menu "Processor type and features"
- +
- +config BRD_32MB
- + bool
- + depends on IP5160EVAL
- + help
- + Board has 32MB of RAM on it. It is a hidden option used to select default for size of RAM
- + default n
- +
- +config BRD_64MB
- + bool
- + depends on IP7145DPF || IP7160RGW || IP7160BRINGUP || IP7160DPF || IP5170DPF || IP5160DEV
- + help
- + Board has 64MB of RAM on it. It is a hidden option used to select default for size of RAM
- + default n
- +
- +config BRD_128MB
- + bool
- + depends on IP7500MODULE || IP7500AV || IP7500MEDIA
- + help
- + Board has 128MB of RAM on it. It is a hidden option used to select default for size of RAM
- + default n
- +
- +comment "Processor type will be selected by Board"
- +
- +config UBICOM32_V3
- + bool
- + help
- + Ubicom IP5xxx series processor support.
- +
- +config UBICOM32_V4
- + bool
- + help
- + Ubicom IP7xxx series processor support.
- +
- +comment "Board"
- +choice
- + prompt "Board type"
- + help
- + Select your board.
- +
- +config NOBOARD
- + bool "No board selected"
- + help
- + Default. Don't select any board specific config. Will not build unless you change!
- +
- +# Add your boards here
- +source "arch/ubicom32/mach-ip5k/Kconfig"
- +source "arch/ubicom32/mach-ip7k/Kconfig"
- +
- +endchoice
- +
- +comment "Kernel Options"
- +config SMP
- + bool "Symmetric multi-processing support"
- + select USE_GENERIC_SMP_HELPERS
- + default n
- + help
- + Enables multithreading support. Enabling SMP support increases
- + the size of system data structures. SMP support can have either
- + positive or negative impact on performance depending on workloads.
- +
- + If you do not know what to do here, say N.
- +
- +config NR_CPUS
- + int "Number of configured CPUs"
- + range 2 32
- + default 2
- + depends on SMP
- + help
- + Upper bound on the number of CPUs. Space is reserved
- + at compile time for this many CPUs.
- +
- +config LOCAL_TIMERS
- + bool "Use local timer interrupts"
- + depends on SMP
- + default y
- + help
- + Enable support for local timers on SMP platforms, rather then the
- + legacy IPI broadcast method. Local timers allows the system
- + accounting to be spread across the timer interval, preventing a
- + "thundering herd" at every timer tick. A physical timer is allocated
- + per cpu.
- +
- +config TIMER_EXTRA_ALLOC
- + int "Number of additional physical timer events to create"
- + depends on GENERIC_CLOCKEVENTS
- + default 0
- + help
- + The Ubicom32 processor has a number of event timers that can be wrapped
- + in Linux clock event structures (assuming that the timers are not being
- + used for another purpose). Based on the value of LOCAL_TIMERS, either
- + 2 timers will be used or a timer will be used for every CPU. This value
- + allows the programmer to select additional timers over that amount.
- +
- +config IRQSTACKS
- + bool "Create separate stacks for interrupt handling"
- + default n
- + help
- + Selecting this causes interrupts to be created on a separate
- + stack instead of nesting the interrupts on the kernel stack.
- +
- +config IRQSTACKS_USEOCM
- + bool "Use OCM for interrupt stacks"
- + default n
- + depends on IRQSTACKS
- + help
- + Selecting this cause the interrupt stacks to be placed in OCM
- + reducing cache misses at the expense of using the OCM for servicing
- + interrupts.
- +
- +menu "OCM Instruction Heap"
- +
- +config OCM_MODULES_RESERVATION
- + int "OCM Instruction heap reservation. 0-192 kB"
- + range 0 192
- + default "0"
- + help
- + The minimum amount of OCM memory to reserve for kernel loadable module
- + code. If you are not using this memory it cannot be used for anything
- + else. Leave it as 0 if you have prebuilt modules that are compiled with
- + OCM support.
- +
- +config OCM_MODULES_MAY_CONSUME_REMAINING_CODESPACE
- + bool "Give all unused ocm code space to the ocm instruction heap."
- + default n
- + help
- + Allow the OCM instruction heap allocation to consume any remaining
- + unused OCM code space. The result of this is that you will not have
- + and deterministic results, but you will not have any waste either.
- +
- +config OCM_MODULES_FALLBACK_TO_DDR
- + bool "Loadable Modules requiring OCM may fallback to use DDR."
- + default n
- + help
- + If a module cannot get the OCM code it requires allow DDR to
- + be used instead.
- +endmenu
- +
- +config HZ
- + int "Frequency of 'jiffies' (for polling)"
- + default 1000
- + help
- + 100 is common for embedded systems, but 1000 allows
- + you to do more drivers without actually having
- + interrupts working properly.
- +
- +comment "RAM configuration"
- +
- +if BRD_32MB
- +
- +config RAMSIZE
- + hex "Size of RAM (in bytes)"
- + range 0x00000000 0x02000000
- + default "0x02000000"
- + help
- + Define the size of the system RAM. If you select 0 then the
- + kernel will try to probe the RAM size at runtime. This is not
- + supported on all CPU types.
- +
- +endif
- +
- +if BRD_64MB
- +
- +config RAMSIZE
- + hex "Size of RAM (in bytes)"
- + range 0x00000000 0x04000000
- + default "0x04000000"
- + help
- + Define the size of the system RAM. If you select 0 then the
- + kernel will try to probe the RAM size at runtime. This is not
- + supported on all CPU types.
- +
- +endif
- +
- +if BRD_128MB
- +
- +config RAMSIZE
- + hex "Size of RAM (in bytes)"
- + range 0x00000000 0x08000000
- + default "0x08000000"
- + help
- + Define the size of the system RAM. If you select 0 then the
- + kernel will try to probe the RAM size at runtime. This is not
- + supported on all CPU types.
- +
- +endif
- +
- +config KERNELBASE
- + hex "Address of the base of kernel code"
- + default "0x40400000"
- + help
- + For the time being we are going to start the Kernel at a 4 meg offset.
- +
- +comment "Build options"
- +config LINKER_RELAXATION
- + bool "Linker Relaxation"
- + default y
- + help
- + Turns on linker relaxation that will produce smaller
- + faster code. Increases link time.
- +
- +comment "Driver options"
- +menu "PCI Bus"
- +config PCI
- + bool "PCI bus"
- + default true
- + help
- + Enable/Disable PCI bus
- + source "drivers/pci/Kconfig"
- +
- +
- +config PCI_DEV0_IDSEL
- + hex "slot 0 address"
- + depends on PCI
- + default "0x01000000"
- + help
- + Slot 0 address. This address should correspond to the address line
- + which the IDSEL bit for this slot is connected to.
- +
- +config PCI_DEV1_IDSEL
- + hex "slot 1 address"
- + depends on PCI
- + default "0x02000000"
- + help
- + Slot 1 address. This address should correspond to the address line
- + which the IDSEL bit for this slot is connected to.
- +endmenu
- +# End PCI
- +
- +menu "Input devices"
- +config UBICOM_INPUT
- + bool "Ubicom polled GPIO input driver"
- + select INPUT
- + select INPUT_POLLDEV
- + help
- + Polling input driver, much like the GPIO input driver, except that it doesn't
- + rely on interrupts. It will report events via the input subsystem.
- + default n
- +
- +config UBICOM_INPUT_I2C
- + bool "Ubicom polled GPIO input driver over I2C"
- + select INPUT
- + select INPUT_POLLDEV
- + help
- + Polling input driver, much like the PCA953x driver, it can support a variety of
- + different I2C I/O expanders. This device polls the I2C I/O expander for events
- + and reports them via the input subsystem.
- + default n
- +endmenu
- +# Input devices
- +
- +
- +
- +menu "Misc devices"
- +config UBICOM_HID
- + bool "Ubicom HID driver"
- + select INPUT
- + select INPUT_POLLDEV
- + select LCD_CLASS_DEVICE
- + help
- + Driver for HID chip found on some Ubicom reference designs. This chip handles
- + PWM, button input, and IR remote control. It registers as an input device and
- + a backlight device.
- + default n
- +endmenu
- +# Misc devices
- +
- +config CMDLINE_BOOL
- + bool "Built-in kernel command line"
- + default n
- + help
- + Allow for specifying boot arguments to the kernel at
- + build time. On some systems (e.g. embedded ones), it is
- + necessary or convenient to provide some or all of the
- + kernel boot arguments with the kernel itself (that is,
- + to not rely on the boot loader to provide them.)
- +
- + To compile command line arguments into the kernel,
- + set this option to 'Y', then fill in the
- + the boot arguments in CONFIG_CMDLINE.
- +
- + Systems with fully functional boot loaders (i.e. non-embedded)
- + should leave this option set to 'N'.
- +
- +config CMDLINE
- + string "Built-in kernel command string"
- + depends on CMDLINE_BOOL
- + default ""
- + help
- + Enter arguments here that should be compiled into the kernel
- + image and used at boot time. If the boot loader provides a
- + command line at boot time, it is appended to this string to
- + form the full kernel command line, when the system boots.
- +
- + However, you can use the CONFIG_CMDLINE_OVERRIDE option to
- + change this behavior.
- +
- + In most cases, the command line (whether built-in or provided
- + by the boot loader) should specify the device for the root
- + file system.
- +
- +config CMDLINE_OVERRIDE
- + bool "Built-in command line overrides boot loader arguments"
- + default n
- + depends on CMDLINE_BOOL
- + help
- + Set this option to 'Y' to have the kernel ignore the boot loader
- + command line, and use ONLY the built-in command line.
- +
- + This is used to work around broken boot loaders. This should
- + be set to 'N' under normal conditions.
- +
- +endmenu
- +# End Processor type and features
- +
- +source "arch/ubicom32/Kconfig.debug"
- +
- +menu "Executable file formats"
- +source "fs/Kconfig.binfmt"
- +endmenu
- +
- +source "init/Kconfig"
- +source "kernel/Kconfig.preempt"
- +source "kernel/time/Kconfig"
- +source "mm/Kconfig"
- +source "net/Kconfig"
- +source "drivers/Kconfig"
- +source "fs/Kconfig"
- +source "security/Kconfig"
- +source "crypto/Kconfig"
- +source "lib/Kconfig"
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/Kconfig.debug linux-2.6.28.10/arch/ubicom32/Kconfig.debug
- --- linux-2.6.28.10_o/arch/ubicom32/Kconfig.debug 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/Kconfig.debug 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,117 @@
- +menu "Kernel hacking"
- +
- +config TRACE_IRQFLAGS_SUPPORT
- + def_bool y
- +
- +config PROTECT_KERNEL
- + default y
- + bool 'Enable Kernel range register Protection'
- + help
- + Adds code to enable/disable range registers to protect static
- + kernel code/data from userspace. Currently the ranges covered
- + do no protect kernel loadable modules or dynamically allocated
- + kernel data.
- +
- +config NO_KERNEL_MSG
- + bool "Suppress Kernel BUG Messages"
- + help
- + Do not output any debug BUG messages within the kernel.
- +
- +config EARLY_PRINTK
- + bool "Use the driver that you selected as console also for early printk (to debug kernel bootup)."
- + default n
- + help
- + If you want to use the serdes driver (console=ttyUS0) for
- + early printk, you must also supply an additional kernel boot
- + parameter like this:
- +
- + serdes=ioportaddr,irq,clockrate,baud
- +
- + For an IP7160RGW eval board, you could use this:
- +
- + serdes=0x2004000,61,250000000,57600
- +
- + which will let you see early printk output at 57600 baud.
- +
- +config STOP_ON_TRAP
- + bool "Enable stopping at the LDSR for all traps"
- + default n
- + help
- + Cause the LDSR to stop all threads whenever a trap is about to be serviced
- +
- +config STOP_ON_BUG
- + bool "Enable stopping on failed BUG_ON()"
- + default n
- + help
- + Cause all BUG_ON failures to stop all threads
- +
- +config DEBUG_IRQMEASURE
- + bool "Enable IRQ handler measurements"
- + default n
- + help
- + When enabled each IRQ's min/avg/max times will be printed. If the handler
- + re-enables interrupt, the times will show the full time including to service
- + nested interrupts. See /proc/irq_measurements.
- +
- +config DEBUG_PCIMEASURE
- + bool "Enable PCI transaction measurements"
- + default n
- + help
- + When enabled the system will measure the min/avg/max timer for each PCI transactions.
- + See /proc/pci_measurements.
- +
- +config ACCESS_OK_CHECKS_ENABLED
- + bool "Enable user space access checks"
- + default n
- + help
- + Enabling this check causes the kernel to verify that addresses passed
- + to the kernel by the user space code are within the processes
- + address space. On a no-mmu system, this is done by examining the
- + processes memory data structures (adversly affecting performance) but
- + ensuring that a process does not ask the kernel to violate another
- + processes address space. Sadly, the kernel uses access_ok() for
- + address that are in the kernel which results in a large volume of
- + false positives.
- +
- +choice
- + prompt "Unaligned Access Support"
- + default UNALIGNED_ACCESS_ENABLED
- + help
- + Kernel / Userspace unaligned access handling.
- +
- +config UNALIGNED_ACCESS_ENABLED
- + bool "Kernel and Userspace"
- + help
- +
- +config UNALIGNED_ACCESS_USERSPACE_ONLY
- + bool "Userspace Only"
- + help
- +
- +config UNALIGNED_ACCESS_DISABLED
- + bool "Disabled"
- + help
- +
- +endchoice
- +
- +config DEBUG_STACKOVERFLOW
- + bool "Check for stack overflows"
- + default n
- + depends on DEBUG_KERNEL
- + help
- + This option will cause messages to be printed if free kernel stack space
- + drops below a certain limit (THREAD_SIZE /8).
- +
- +config DEBUG_STACK_USAGE
- + bool "Stack utilization instrumentation"
- + default n
- + depends on DEBUG_KERNEL
- + help
- + Enables the display of the minimum amount of free kernel stack which each
- + task has ever had available in the sysrq-T and sysrq-P debug output.
- +
- + This option will slow down process creation somewhat.
- +
- +source "lib/Kconfig.debug"
- +
- +endmenu
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/kernel/asm-offsets.c linux-2.6.28.10/arch/ubicom32/kernel/asm-offsets.c
- --- linux-2.6.28.10_o/arch/ubicom32/kernel/asm-offsets.c 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/kernel/asm-offsets.c 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,162 @@
- +/*
- + * arch/ubicom32/kernel/asm-offsets.c
- + * Ubicom32 architecture definitions needed by assembly language modules.
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +/*
- + * This program is used to generate definitions needed by
- + * assembly language modules.
- + *
- + * We use the technique used in the OSF Mach kernel code:
- + * generate asm statements containing #defines,
- + * compile this file to assembler, and then extract the
- + * #defines from the assembly-language output.
- + */
- +
- +#include <linux/module.h>
- +#include <linux/stddef.h>
- +#include <linux/sched.h>
- +#include <linux/kernel_stat.h>
- +#include <linux/ptrace.h>
- +#include <linux/hardirq.h>
- +#include <asm/bootinfo.h>
- +#include <asm/irq.h>
- +#include <asm/thread_info.h>
- +
- +#define DEFINE(sym, val) \
- + asm volatile("\n->" #sym " %0 " #val : : "i" (val))
- +
- +#define BLANK() asm volatile("\n->" : : )
- +
- +int main(void)
- +{
- + /* offsets into the task struct */
- + DEFINE(TASK_STATE, offsetof(struct task_struct, state));
- + DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags));
- + DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace));
- + DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked));
- + DEFINE(TASK_THREAD, offsetof(struct task_struct, thread));
- + DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, stack));
- + DEFINE(TASK_MM, offsetof(struct task_struct, mm));
- + DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm));
- +
- + /* offsets into the kernel_stat struct */
- + DEFINE(STAT_IRQ, offsetof(struct kernel_stat, irqs));
- +
- + /* offsets into the irq_cpustat_t struct */
- + DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending));
- +
- + /* offsets into the thread struct */
- + DEFINE(THREAD_D10, offsetof(struct thread_struct, d10));
- + DEFINE(THREAD_D11, offsetof(struct thread_struct, d11));
- + DEFINE(THREAD_D12, offsetof(struct thread_struct, d12));
- + DEFINE(THREAD_D13, offsetof(struct thread_struct, d13));
- + DEFINE(THREAD_A1, offsetof(struct thread_struct, a1));
- + DEFINE(THREAD_A2, offsetof(struct thread_struct, a2));
- + DEFINE(THREAD_A5, offsetof(struct thread_struct, a5));
- + DEFINE(THREAD_A6, offsetof(struct thread_struct, a6));
- + DEFINE(THREAD_SP, offsetof(struct thread_struct, sp));
- +
- + /* offsets into the pt_regs */
- + DEFINE(PT_D0, offsetof(struct pt_regs, dn[0]));
- + DEFINE(PT_D1, offsetof(struct pt_regs, dn[1]));
- + DEFINE(PT_D2, offsetof(struct pt_regs, dn[2]));
- + DEFINE(PT_D3, offsetof(struct pt_regs, dn[3]));
- + DEFINE(PT_D4, offsetof(struct pt_regs, dn[4]));
- + DEFINE(PT_D5, offsetof(struct pt_regs, dn[5]));
- + DEFINE(PT_D6, offsetof(struct pt_regs, dn[6]));
- + DEFINE(PT_D7, offsetof(struct pt_regs, dn[7]));
- + DEFINE(PT_D8, offsetof(struct pt_regs, dn[8]));
- + DEFINE(PT_D9, offsetof(struct pt_regs, dn[9]));
- + DEFINE(PT_D10, offsetof(struct pt_regs, dn[10]));
- + DEFINE(PT_D11, offsetof(struct pt_regs, dn[11]));
- + DEFINE(PT_D12, offsetof(struct pt_regs, dn[12]));
- + DEFINE(PT_D13, offsetof(struct pt_regs, dn[13]));
- + DEFINE(PT_D14, offsetof(struct pt_regs, dn[14]));
- + DEFINE(PT_D15, offsetof(struct pt_regs, dn[15]));
- + DEFINE(PT_A0, offsetof(struct pt_regs, an[0]));
- + DEFINE(PT_A1, offsetof(struct pt_regs, an[1]));
- + DEFINE(PT_A2, offsetof(struct pt_regs, an[2]));
- + DEFINE(PT_A3, offsetof(struct pt_regs, an[3]));
- + DEFINE(PT_A4, offsetof(struct pt_regs, an[4]));
- + DEFINE(PT_A5, offsetof(struct pt_regs, an[5]));
- + DEFINE(PT_A6, offsetof(struct pt_regs, an[6]));
- + DEFINE(PT_A7, offsetof(struct pt_regs, an[7]));
- + DEFINE(PT_SP, offsetof(struct pt_regs, an[7]));
- +
- + DEFINE(PT_ACC0HI, offsetof(struct pt_regs, acc0[0]));
- + DEFINE(PT_ACC0LO, offsetof(struct pt_regs, acc0[1]));
- + DEFINE(PT_MAC_RC16, offsetof(struct pt_regs, mac_rc16));
- +
- + DEFINE(PT_ACC1HI, offsetof(struct pt_regs, acc1[0]));
- + DEFINE(PT_ACC1LO, offsetof(struct pt_regs, acc1[1]));
- +
- + DEFINE(PT_SOURCE3, offsetof(struct pt_regs, source3));
- + DEFINE(PT_INST_CNT, offsetof(struct pt_regs, inst_cnt));
- + DEFINE(PT_CSR, offsetof(struct pt_regs, csr));
- + DEFINE(PT_DUMMY_UNUSED, offsetof(struct pt_regs, dummy_unused));
- +
- + DEFINE(PT_INT_MASK0, offsetof(struct pt_regs, int_mask0));
- + DEFINE(PT_INT_MASK1, offsetof(struct pt_regs, int_mask1));
- +
- + DEFINE(PT_PC, offsetof(struct pt_regs, pc));
- +
- + DEFINE(PT_TRAP_CAUSE, offsetof(struct pt_regs, trap_cause));
- +
- + DEFINE(PT_SIZE, sizeof(struct pt_regs));
- +
- + DEFINE(PT_FRAME_TYPE, offsetof(struct pt_regs, frame_type));
- +
- + DEFINE(PT_ORIGINAL_D0, offsetof(struct pt_regs, original_dn_0));
- + DEFINE(PT_PREVIOUS_PC, offsetof(struct pt_regs, previous_pc));
- +
- + /* offsets into the kernel_stat struct */
- + DEFINE(STAT_IRQ, offsetof(struct kernel_stat, irqs));
- +
- + /* signal defines */
- + DEFINE(SIGSEGV, SIGSEGV);
- + //DEFINE(SEGV_MAPERR, SEGV_MAPERR);
- + DEFINE(SIGTRAP, SIGTRAP);
- + //DEFINE(TRAP_TRACE, TRAP_TRACE);
- +
- + DEFINE(PT_PTRACED, PT_PTRACED);
- + DEFINE(PT_DTRACE, PT_DTRACE);
- +
- + DEFINE(ASM_THREAD_SIZE, THREAD_SIZE);
- +
- + /* Offsets in thread_info structure */
- + DEFINE(TI_TASK, offsetof(struct thread_info, task));
- + DEFINE(TI_EXECDOMAIN, offsetof(struct thread_info, exec_domain));
- + DEFINE(TI_FLAGS, offsetof(struct thread_info, flags));
- + DEFINE(TI_PREEMPTCOUNT, offsetof(struct thread_info, preempt_count));
- + DEFINE(TI_CPU, offsetof(struct thread_info, cpu));
- + DEFINE(TI_INTR_NESTING, offsetof(struct thread_info, interrupt_nesting));
- + DEFINE(ASM_TIF_NEED_RESCHED, TIF_NEED_RESCHED);
- + DEFINE(ASM_TIF_SYSCALL_TRACE, TIF_SYSCALL_TRACE);
- + DEFINE(ASM_TIF_SIGPENDING, TIF_SIGPENDING);
- +
- + DEFINE(ASM_RAM_END, (CONFIG_RAMBASE + CONFIG_RAMSIZE));
- + return 0;
- +}
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/kernel/Makefile linux-2.6.28.10/arch/ubicom32/kernel/Makefile
- --- linux-2.6.28.10_o/arch/ubicom32/kernel/Makefile 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/kernel/Makefile 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,64 @@
- +#
- +# arch/ubicom32/kernel/Makefile
- +# Main Makefile for the Ubicom32 arch directory.
- +#
- +# (C) Copyright 2009, Ubicom, Inc.
- +#
- +# This file is part of the Ubicom32 Linux Kernel Port.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# You should have received a copy of the GNU General Public License
- +# along with the Ubicom32 Linux Kernel Port. If not,
- +# see <http://www.gnu.org/licenses/>.
- +#
- +# Ubicom32 implementation derived from (with many thanks):
- +# arch/m68knommu
- +# arch/blackfin
- +# arch/parisc
- +#
- +
- +extra-y := head.o vmlinux.lds
- +
- +obj-y += \
- + devtree.o \
- + dma.o \
- + flat.o \
- + init_task.o \
- + irq.o \
- + ldsr.o \
- + os_node.o \
- + process.o \
- + processor.o \
- + ptrace.o \
- + setup.o \
- + signal.o \
- + stacktrace.o \
- + sys_ubicom32.o \
- + syscalltable.o \
- + thread.o \
- + time.o \
- + traps.o \
- + ubicom32_context_switch.o \
- + ubicom32_ksyms.o \
- + ubicom32_syscall.o \
- + unaligned_trap.o
- +
- +obj-$(CONFIG_MODULES) += module.o
- +obj-$(CONFIG_COMEMPCI) += comempci.o
- +obj-$(CONFIG_SMP) += smp.o topology.o
- +obj-$(CONFIG_ACCESS_OK_CHECKS_ENABLED) += uaccess.o
- +obj-$(CONFIG_GENERIC_CLOCKEVENTS) += timer_device.o
- +obj-$(CONFIG_GENERIC_CLOCKEVENTS_BROADCAST) += timer_broadcast.o
- +
- +ifndef CONFIG_GENERIC_CLOCKEVENTS
- +obj-y += timer_tick.o
- +endif
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/kernel/syscalltable.S linux-2.6.28.10/arch/ubicom32/kernel/syscalltable.S
- --- linux-2.6.28.10_o/arch/ubicom32/kernel/syscalltable.S 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/kernel/syscalltable.S 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,377 @@
- +/*
- + * arch/ubicom32/kernel/syscalltable.S
- + * <TODO: Replace with short file description>
- + *
- + * (C) Copyright 2009, Ubicom, Inc.
- + *
- + * This file is part of the Ubicom32 Linux Kernel Port.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * The Ubicom32 Linux Kernel Port 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.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with the Ubicom32 Linux Kernel Port. If not,
- + * see <http://www.gnu.org/licenses/>.
- + *
- + * Ubicom32 implementation derived from (with many thanks):
- + * arch/m68knommu
- + * arch/blackfin
- + * arch/parisc
- + */
- +/*
- + *
- + * Copyright (C) 2002, Greg Ungerer ([email protected])
- + * Copyright (C) 1998 D. Jeff Dionne <[email protected]>, Kenneth Albanowski <[email protected]>,
- + * Copyright (C) 2000 Lineo Inc. (www.lineo.com)
- + * Copyright (C) 1991, 1992 Linus Torvalds
- + */
- +
- +#include <linux/sys.h>
- +#include <linux/linkage.h>
- +#include <asm/unistd.h>
- +
- +.text
- +ALIGN
- + .global sys_call_table
- +sys_call_table:
- + .long sys_ni_syscall /* 0 - old "setup()" system call*/
- + .long sys_exit
- + .long sys_fork
- + .long sys_read
- + .long sys_write
- + .long sys_open /* 5 */
- + .long sys_close
- + .long sys_waitpid
- + .long sys_creat
- + .long sys_link
- + .long sys_unlink /* 10 */
- + .long execve_intercept
- + .long sys_chdir
- + .long sys_time
- + .long sys_mknod
- + .long sys_chmod /* 15 */
- + .long sys_chown16
- + .long sys_ni_syscall /* old break syscall holder */
- + .long sys_stat
- + .long sys_lseek
- + .long sys_getpid /* 20 */
- + .long sys_mount
- + .long sys_oldumount
- + .long sys_setuid16
- + .long sys_getuid16
- + .long sys_stime /* 25 */
- + .long sys_ptrace
- + .long sys_alarm
- + .long sys_fstat
- + .long sys_pause
- + .long sys_utime /* 30 */
- + .long sys_ni_syscall /* old stty syscall holder */
- + .long sys_ni_syscall /* old gtty syscall holder */
- + .long sys_access
- + .long sys_nice
- + .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */
- + .long sys_sync
- + .long sys_kill
- + .long sys_rename
- + .long sys_mkdir
- + .long sys_rmdir /* 40 */
- + .long sys_dup
- + .long sys_pipe
- + .long sys_times
- + .long sys_ni_syscall /* old prof syscall holder */
- + .long sys_brk /* 45 */
- + .long sys_setgid16
- + .long sys_getgid16
- + .long sys_signal
- + .long sys_geteuid16
- + .long sys_getegid16 /* 50 */
- + .long sys_acct
- + .long sys_umount /* recycled never used phys() */
- + .long sys_ni_syscall /* old lock syscall holder */
- + .long sys_ioctl
- + .long sys_fcntl /* 55 */
- + .long sys_ni_syscall /* old mpx syscall holder */
- + .long sys_setpgid
- + .long sys_ni_syscall /* old ulimit syscall holder */
- + .long sys_ni_syscall
- + .long sys_umask /* 60 */
- + .long sys_chroot
- + .long sys_ustat
- + .long sys_dup2
- + .long sys_getppid
- + .long sys_getpgrp /* 65 */
- + .long sys_setsid
- + .long sys_sigaction
- + .long sys_sgetmask
- + .long sys_ssetmask
- + .long sys_setreuid16 /* 70 */
- + .long sys_setregid16
- + .long sys_sigsuspend
- + .long sys_sigpending
- + .long sys_sethostname
- + .long sys_setrlimit /* 75 */
- + .long sys_old_getrlimit
- + .long sys_getrusage
- + .long sys_gettimeofday
- + .long sys_settimeofday
- + .long sys_getgroups16 /* 80 */
- + .long sys_setgroups16
- + .long old_select
- + .long sys_symlink
- + .long sys_lstat
- + .long sys_readlink /* 85 */
- + .long sys_uselib
- + .long sys_ni_syscall /* _sys_swapon */
- + .long sys_reboot
- + .long sys_old_readdir
- + .long old_mmap /* 90 */
- + .long sys_munmap
- + .long sys_truncate
- + .long sys_ftruncate
- + .long sys_fchmod
- + .long sys_fchown16 /* 95 */
- + .long sys_getpriority
- + .long sys_setpriority
- + .long sys_ni_syscall /* old profil syscall holder */
- + .long sys_statfs
- + .long sys_fstatfs /* 100 */
- + .long sys_ni_syscall /* ioperm for i386 */
- + .long sys_socketcall
- + .long sys_syslog
- + .long sys_setitimer
- + .long sys_getitimer /* 105 */
- + .long sys_newstat
- + .long sys_newlstat
- + .long sys_newfstat
- + .long sys_ni_syscall
- + .long sys_ni_syscall /* iopl for i386 */ /* 110 */
- + .long sys_vhangup
- + .long sys_ni_syscall /* obsolete idle() syscall */
- + .long sys_ni_syscall /* vm86old for i386 */
- + .long sys_wait4
- + .long sys_ni_syscall /* 115 */ /* _sys_swapoff */
- + .long sys_sysinfo
- + .long sys_ipc
- + .long sys_fsync
- + .long sys_sigreturn
- + .long clone_intercept /* 120 */
- + .long sys_setdomainname
- + .long sys_newuname
- + .long sys_cacheflush /* modify_ldt for i386 */
- + .long sys_adjtimex
- + .long sys_ni_syscall /* 125 */ /* _sys_mprotect */
- + .long sys_sigprocmask
- + .long sys_ni_syscall /* old "creat_module" */
- + .long sys_init_module
- + .long sys_delete_module
- + .long sys_ni_syscall /* 130: old "get_kernel_syms" */
- + .long sys_quotactl
- + .long sys_getpgid
- + .long sys_fchdir
- + .long sys_bdflush
- + .long sys_sysfs /* 135 */
- + .long sys_personality
- + .long sys_ni_syscall /* for afs_syscall */
- + .long sys_setfsuid16
- + .long sys_setfsgid16
- + .long sys_llseek /* 140 */
- + .long sys_getdents
- + .long sys_select
- + .long sys_flock
- + .long sys_ni_syscall /* _sys_msync */
- + .long sys_readv /* 145 */
- + .long sys_writev
- + .long sys_getsid
- + .long sys_fdatasync
- + .long sys_sysctl
- + .long sys_ni_syscall /* 150 */ /* _sys_mlock */
- + .long sys_ni_syscall /* _sys_munlock */
- + .long sys_ni_syscall /* _sys_mlockall */
- + .long sys_ni_syscall /* _sys_munlockall */
- + .long sys_sched_setparam
- + .long sys_sched_getparam /* 155 */
- + .long sys_sched_setscheduler
- + .long sys_sched_getscheduler
- + .long sys_sched_yield
- + .long sys_sched_get_priority_max
- + .long sys_sched_get_priority_min /* 160 */
- + .long sys_sched_rr_get_interval
- + .long sys_nanosleep
- + .long sys_ni_syscall /* _sys_mremap */
- + .long sys_setresuid16
- + .long sys_getresuid16 /* 165 */
- + .long sys_getpagesize /* _sys_getpagesize */
- + .long sys_ni_syscall /* old "query_module" */
- + .long sys_poll
- + .long sys_ni_syscall /* _sys_nfsservctl */
- + .long sys_setresgid16 /* 170 */
- + .long sys_getresgid16
- + .long sys_prctl
- + .long sys_rt_sigreturn
- + .long sys_rt_sigaction
- + .long sys_rt_sigprocmask /* 175 */
- + .long sys_rt_sigpending
- + .long sys_rt_sigtimedwait
- + .long sys_rt_sigqueueinfo
- + .long sys_rt_sigsuspend
- + .long sys_pread64 /* 180 */
- + .long sys_pwrite64
- + .long sys_lchown16
- + .long sys_getcwd
- + .long sys_capget
- + .long sys_capset /* 185 */
- + .long sys_sigaltstack
- + .long sys_sendfile
- + .long sys_ni_syscall /* streams1 */
- + .long sys_ni_syscall /* streams2 */
- + .long vfork_intercept /* 190 */
- + .long sys_getrlimit
- + .long sys_mmap2
- + .long sys_truncate64
- + .long sys_ftruncate64
- + .long sys_stat64 /* 195 */
- + .long sys_lstat64
- + .long sys_fstat64
- + .long sys_chown
- + .long sys_getuid
- + .long sys_getgid /* 200 */
- + .long sys_geteuid
- + .long sys_getegid
- + .long sys_setreuid
- + .long sys_setregid
- + .long sys_getgroups /* 205 */
- + .long sys_setgroups
- + .long sys_fchown
- + .long sys_setresuid
- + .long sys_getresuid
- + .long sys_setresgid /* 210 */
- + .long sys_getresgid
- + .long sys_lchown
- + .long sys_setuid
- + .long sys_setgid
- + .long sys_setfsuid /* 215 */
- + .long sys_setfsgid
- + .long sys_pivot_root
- + .long sys_ni_syscall
- + .long sys_ni_syscall
- + .long sys_getdents64 /* 220 */
- + .long sys_gettid
- + .long sys_tkill
- + .long sys_setxattr
- + .long sys_lsetxattr
- + .long sys_fsetxattr /* 225 */
- + .long sys_getxattr
- + .long sys_lgetxattr
- + .long sys_fgetxattr
- + .long sys_listxattr
- + .long sys_llistxattr /* 230 */
- + .long sys_flistxattr
- + .long sys_removexattr
- + .long sys_lremovexattr
- + .long sys_fremovexattr
- + .long sys_futex /* 235 */
- + .long sys_sendfile64
- + .long sys_ni_syscall /* _sys_mincore */
- + .long sys_ni_syscall /* _sys_madvise */
- + .long sys_fcntl64
- + .long sys_readahead /* 240 */
- + .long sys_io_setup
- + .long sys_io_destroy
- + .long sys_io_getevents
- + .long sys_io_submit
- + .long sys_io_cancel /* 245 */
- + .long sys_fadvise64
- + .long sys_exit_group
- + .long sys_lookup_dcookie
- + .long sys_epoll_create
- + .long sys_epoll_ctl /* 250 */
- + .long sys_epoll_wait
- + .long sys_ni_syscall /* _sys_remap_file_pages */
- + .long sys_set_tid_address
- + .long sys_timer_create
- + .long sys_timer_settime /* 255 */
- + .long sys_timer_gettime
- + .long sys_timer_getoverrun
- + .long sys_timer_delete
- + .long sys_clock_settime
- + .long sys_clock_gettime /* 260 */
- + .long sys_clock_getres
- + .long sys_clock_nanosleep
- + .long sys_statfs64
- + .long sys_fstatfs64
- + .long sys_tgkill /* 265 */
- + .long sys_utimes
- + .long sys_fadvise64_64
- + .long sys_mbind
- + .long sys_get_mempolicy
- + .long sys_set_mempolicy /* 270 */
- + .long sys_mq_open
- + .long sys_mq_unlink
- + .long sys_mq_timedsend
- + .long sys_mq_timedreceive
- + .long sys_mq_notify /* 275 */
- + .long sys_mq_getsetattr
- + .long sys_waitid
- + .long sys_ni_syscall /* for _sys_vserver */
- + .long sys_add_key
- + .long sys_request_key /* 280 */
- + .long sys_keyctl
- + .long sys_ioprio_set
- + .long sys_ioprio_get
- + .long sys_inotify_init
- + .long sys_inotify_add_watch /* 285 */
- + .long sys_inotify_rm_watch
- + .long sys_migrate_pages
- + .long sys_openat
- + .long sys_mkdirat
- + .long sys_mknodat /* 290 */
- + .long sys_fchownat
- + .long sys_futimesat
- + .long sys_fstatat64
- + .long sys_unlinkat
- + .long sys_renameat /* 295 */
- + .long sys_linkat
- + .long sys_symlinkat
- + .long sys_readlinkat
- + .long sys_fchmodat
- + .long sys_faccessat /* 300 */
- + .long sys_ni_syscall /* Reserved for pselect6 */
- + .long sys_ni_syscall /* Reserved for ppoll */
- + .long sys_unshare
- + .long sys_set_robust_list
- + .long sys_get_robust_list /* 305 */
- + .long sys_splice
- + .long sys_sync_file_range
- + .long sys_tee
- + .long sys_vmsplice
- + .long sys_move_pages /* 310 */
- + .long sys_sched_setaffinity
- + .long sys_sched_getaffinity
- + .long sys_kexec_load
- + .long sys_getcpu
- + .long sys_epoll_pwait /* 315 */
- + .long sys_utimensat
- + .long sys_signalfd
- + .long sys_timerfd_create
- + .long sys_eventfd
- + .long sys_fallocate /* 320 */
- + .long sys_timerfd_settime
- + .long sys_timerfd_gettime
- + .long sys_ni_syscall /* sys_signalfd4 */
- + .long sys_ni_syscall /* sys_eventfd2 */
- + .long sys_ni_syscall /* sys_epoll_create1 */
- + /* 325 */
- + .long sys_ni_syscall /* sys_dup3 */
- + .long sys_ni_syscall /* sys_pipe2 */
- + .long sys_ni_syscall /* sys_inotify_init1 */
- + .rept NR_syscalls-(.-sys_call_table)/4
- + .long sys_ni_syscall
- + .endr
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/lib/Makefile linux-2.6.28.10/arch/ubicom32/lib/Makefile
- --- linux-2.6.28.10_o/arch/ubicom32/lib/Makefile 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/lib/Makefile 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,32 @@
- +#
- +# arch/ubicom32/lib/Makefile
- +# <TODO: Replace with short file description>
- +#
- +# (C) Copyright 2009, Ubicom, Inc.
- +#
- +# This file is part of the Ubicom32 Linux Kernel Port.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# You should have received a copy of the GNU General Public License
- +# along with the Ubicom32 Linux Kernel Port. If not,
- +# see <http://www.gnu.org/licenses/>.
- +#
- +# Ubicom32 implementation derived from (with many thanks):
- +# arch/m68knommu
- +# arch/blackfin
- +# arch/parisc
- +#
- +#
- +# Makefile for m68knommu specific library files..
- +#
- +
- +lib-y := checksum.o delay.o mem_ubicom32.o
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-common/Makefile linux-2.6.28.10/arch/ubicom32/mach-common/Makefile
- --- linux-2.6.28.10_o/arch/ubicom32/mach-common/Makefile 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/mach-common/Makefile 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,40 @@
- +#
- +# arch/ubicom32/mach-common/Makefile
- +# Makefile for Ubicom32 generic drivers/code.
- +#
- +# (C) Copyright 2009, Ubicom, Inc.
- +#
- +# This file is part of the Ubicom32 Linux Kernel Port.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# You should have received a copy of the GNU General Public License
- +# along with the Ubicom32 Linux Kernel Port. If not,
- +# see <http://www.gnu.org/licenses/>.
- +#
- +# Ubicom32 implementation derived from (with many thanks):
- +# arch/m68knommu
- +# arch/blackfin
- +# arch/parisc
- +#
- +
- +obj-y += cachectl.o common.o usb_tio.o usb.o ubi32-gpio.o board.o bootargs.o
- +obj-$(CONFIG_PCI) += pci.o io.o
- +
- +obj-$(CONFIG_FB_UBICOM32) += vdc_tio.o
- +obj-$(CONFIG_UBICOM_HID) += ubicom32hid.o
- +obj-$(CONFIG_UBICOM_INPUT) += ubicom32input.o
- +obj-$(CONFIG_UBICOM_INPUT_I2C) += ubicom32input_i2c.o
- +obj-$(CONFIG_UBICOM_SWITCH) += switch-core.o
- +obj-$(CONFIG_UBICOM_SWITCH_BCM539X) += switch-bcm539x.o
- +obj-$(CONFIG_UIO_UBICOM32RING) += ring_tio.o
- +obj-$(CONFIG_SND_UBI32) += audio_tio.o
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Kconfig linux-2.6.28.10/arch/ubicom32/mach-ip5k/Kconfig
- --- linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Kconfig 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/mach-ip5k/Kconfig 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,32 @@
- +
- +config IP5170DPF
- + bool "IP5170DPF"
- + select UBICOM32_V3
- + select I2C
- + select I2C_GPIO
- + select FB
- + select FB_UBICOM32
- + select BACKLIGHT_LCD_SUPPORT
- + select BACKLIGHT_CLASS_DEVICE
- + select UBICOM_HID
- + select NEW_LEDS
- + select LEDS_CLASS
- + select LEDS_GPIO
- + select BRD_64MB
- + help
- + IP5170 Digital Picture Frame board, 8005-1113, IP5K-BEV-0011-13 v1.3
- +
- +config IP5160DEV
- + bool "IP5160Dev_Ver1Dot1"
- + select UBICOM32_V3
- + select BRD_64MB
- + help
- + Ubicom StreamEngine 5000 Development Board, IP5K-BDV-0004-11 v1.1
- +
- +config IP5160EVAL
- + bool "IP5160RGWEval_Ver2Rev2"
- + select UBICOM32_V3
- + select BRD_32MB
- + help
- + Ubicom StreamEngine 5000 RGW Evaluation Board, IP5K-RGW-0004-11 v2.2
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Makefile linux-2.6.28.10/arch/ubicom32/mach-ip5k/Makefile
- --- linux-2.6.28.10_o/arch/ubicom32/mach-ip5k/Makefile 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/mach-ip5k/Makefile 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,32 @@
- +#
- +# arch/ubicom32/mach-ip5k/Makefile
- +# Makefile for boards which have an ip5k on them.
- +#
- +# (C) Copyright 2009, Ubicom, Inc.
- +#
- +# This file is part of the Ubicom32 Linux Kernel Port.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# You should have received a copy of the GNU General Public License
- +# along with the Ubicom32 Linux Kernel Port. If not,
- +# see <http://www.gnu.org/licenses/>.
- +#
- +# Ubicom32 implementation derived from (with many thanks):
- +# arch/m68knommu
- +# arch/blackfin
- +# arch/parisc
- +#
- +
- +obj-$(CONFIG_IP5170DPF) += board-ip5170dpf.o
- +obj-$(CONFIG_IP5160DEV) += board-ip5160dev.o
- +obj-$(CONFIG_IP5160EVAL) += board-ip5160rgw.o
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Kconfig linux-2.6.28.10/arch/ubicom32/mach-ip7k/Kconfig
- --- linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Kconfig 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/mach-ip7k/Kconfig 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,132 @@
- +config IP7145DPF
- + bool "IP7145DPF"
- + select UBICOM32_V4
- + select UBICOM_INPUT
- + select UBICOM_INPUT_I2C
- + select RTC_CLASS
- + select RTC_DRV_S35390A
- + select I2C
- + select I2C_GPIO
- + select GPIO_PCA953X
- + select FB
- + select FB_UBICOM32
- + select BACKLIGHT_LCD_SUPPORT
- + select LCD_CLASS_DEVICE
- + select LCD_UBICOM32
- + select BACKLIGHT_CLASS_DEVICE
- + select BACKLIGHT_UBICOM32
- + select SND_UBI32
- + select MMC_UBICOM32
- + select MMC
- + select MMC_BLOCK
- + select BRD_64MB
- + help
- + IP7145 Digital Picture Frame reference design, supports:
- + 8007-0410 v1.0
- +
- +config IP7160RGW
- + bool "IP7160RGW"
- + select UBICOM32_V4
- + select UBICOM_INPUT
- + select NEW_LEDS
- + select LEDS_CLASS
- + select LEDS_GPIO
- + select BRD_64MB
- + select SPI
- + select SPI_UBICOM32_GPIO
- + select VLAN_8021Q
- + select UBICOM_SWITCH
- + select UBICOM_SWITCH_BCM539X
- + help
- + Ubicom IP7160 RGW Eval, supports:
- + 8007-0110 v1.0
- + 8007-0111 v1.1
- + 8007-0112 v1.2
- +
- +config IP7160BRINGUP
- + bool "IP7160BRINGUP"
- + select UBICOM32_V4
- + select NEW_LEDS
- + select LEDS_CLASS
- + select LEDS_GPIO
- + select BRD_64MB
- + help
- + Ubicom IP7160 Bringup, supports:
- + 8007-0010 v1.0
- +
- +config IP7160DPF
- + bool "IP7160DPF"
- + select UBICOM32_V4
- + select I2C
- + select I2C_GPIO
- + select FB
- + select FB_UBICOM32
- + select BACKLIGHT_LCD_SUPPORT
- + select BACKLIGHT_CLASS_DEVICE
- + select SND_UBI32
- + select SND_UBI32_AUDIO_CS4350
- + select UBICOM_HID
- + select BRD_64MB
- + help
- + IP7160 Digital Picture Frame board, supports:
- + 8007-0211 Rev 1.1
- +
- +config IP7500MODULE
- + bool "IP7500MODULE"
- + select UBICOM32_V4
- + select BRD_128MB
- + help
- + Ubicom IP7500 CPU Module board, supports:
- + 8007-0510 v1.0
- + 8007-0510A v1.0
- +
- + Please see ip7500module.c for more details.
- +
- +config IP7500AV
- + bool "IP7500AV"
- + select UBICOM32_V4
- + select BRD_128MB
- + select I2C
- + select I2C_GPIO
- + select SND_UBI32
- + select SND_UBI32_AUDIO_CS4384
- + select FB
- + select FB_UBICOM32
- + help
- + Ubicom IP7500 Audio Video board, supports:
- + 8007-0810 v1.0
- +
- + With Ubicom IP7500 CPU Module board:
- + 8007-0510 v1.0 -or-
- + 8007-0510A v1.0
- +
- + Please see ip7500av.c for more details.
- +
- +config IP7500MEDIA
- + bool "IP7500MEDIA"
- + select UBICOM32_V4
- + select UBICOM_INPUT_I2C
- + select RTC_CLASS
- + select RTC_DRV_S35390A
- + select I2C
- + select I2C_GPIO
- + select GPIO_PCA953X
- + select FB
- + select FB_UBICOM32
- + select BACKLIGHT_LCD_SUPPORT
- + select LCD_CLASS_DEVICE
- + select LCD_UBICOM32
- + select BACKLIGHT_CLASS_DEVICE
- + select BACKLIGHT_UBICOM32
- + select SND_UBI32
- + select SND_UBI32_AUDIO_CS4350
- + select MMC_UBICOM32
- + select MMC
- + select MMC_BLOCK
- + select BRD_128MB
- + help
- + IP7500 Media Board w/ IP7500 CPU Module board, supports:
- + 8007-0610 v1.0 w/ 8007-0510 v1.0
- +
- + Please see ip7500media.c for more details.
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Makefile linux-2.6.28.10/arch/ubicom32/mach-ip7k/Makefile
- --- linux-2.6.28.10_o/arch/ubicom32/mach-ip7k/Makefile 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/mach-ip7k/Makefile 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,35 @@
- +#
- +# arch/ubicom32/mach-ip7k/Makefile
- +# Makefile for ip7k based boards.
- +#
- +# (C) Copyright 2009, Ubicom, Inc.
- +#
- +# This file is part of the Ubicom32 Linux Kernel Port.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# You should have received a copy of the GNU General Public License
- +# along with the Ubicom32 Linux Kernel Port. If not,
- +# see <http://www.gnu.org/licenses/>.
- +#
- +# Ubicom32 implementation derived from (with many thanks):
- +# arch/m68knommu
- +# arch/blackfin
- +# arch/parisc
- +#
- +
- +obj-$(CONFIG_IP7145DPF) += board-ip7145dpf.o
- +obj-$(CONFIG_IP7160RGW) += board-ip7160rgw.o
- +obj-$(CONFIG_IP7160BRINGUP) += board-ip7160bringup.o
- +obj-$(CONFIG_IP7160DPF) += board-ip7160dpf.o
- +obj-$(CONFIG_IP7500MODULE) += board-ip7500module.o
- +obj-$(CONFIG_IP7500MEDIA) += board-ip7500media.o
- +obj-$(CONFIG_IP7500AV) += board-ip7500av.o
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/Makefile linux-2.6.28.10/arch/ubicom32/Makefile
- --- linux-2.6.28.10_o/arch/ubicom32/Makefile 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/Makefile 2009-08-06 10:31:02.000000000 +0300
- @@ -0,0 +1,105 @@
- +#
- +# arch/ubicom32/Makefile
- +# <TODO: Replace with short file description>
- +#
- +# (C) Copyright 2009, Ubicom, Inc.
- +#
- +# This file is part of the Ubicom32 Linux Kernel Port.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# You should have received a copy of the GNU General Public License
- +# along with the Ubicom32 Linux Kernel Port. If not,
- +# see <http://www.gnu.org/licenses/>.
- +#
- +# Ubicom32 implementation derived from (with many thanks):
- +# arch/m68knommu
- +# arch/blackfin
- +# arch/parisc
- +#
- +
- +KBUILD_DEFCONFIG :=
- +
- +# setup the machine name and machine dependent settings
- +machine-$(CONFIG_UBICOM32_V3) := ip5k
- +machine-$(CONFIG_UBICOM32_V4) := ip7k
- +MACHINE := $(machine-y)
- +export MACHINE
- +
- +model-$(CONFIG_RAMKERNEL) := ram
- +model-$(CONFIG_ROMKERNEL) := rom
- +MODEL := $(model-y)
- +export MODEL
- +
- +CPUCLASS := $(cpuclass-y)
- +
- +export CPUCLASS
- +
- +#
- +# We want the core kernel built using the fastcall ABI but modules need
- +# to be built using the slower calling convention because they could be
- +# loaded out of range for fast calls.
- +#
- +CFLAGS_KERNEL += -mfastcall
- +CFLAGS_MODULE += -mno-fastcall
- +
- +#
- +# Some CFLAG additions based on specific CPU type.
- +#
- +cflags-$(CONFIG_UBICOM32_V3) := -march=ubicom32v3 -DIP5000
- +cflags-$(CONFIG_UBICOM32_V4) := -march=ubicom32v4 -DIP7000
- +
- +ldflags-$(CONFIG_LINKER_RELAXATION) := --relax
- +LDFLAGS_vmlinux := $(ldflags-y)
- +
- +GCCLIBDIR := $(dir $(shell $(CC) $(cflags-y) -print-libgcc-file-name))
- +GCC_LIBS := $(GCCLIBDIR)/libgcc.a
- +
- +KBUILD_CFLAGS += $(cflags-y) -ffunction-sections
- +KBUILD_AFLAGS += $(cflags-y)
- +
- +KBUILD_CFLAGS += -D__linux__ -Dlinux
- +KBUILD_CFLAGS += -DUTS_SYSNAME=\"uClinux\"
- +
- +# include any machine specific directory
- +ifneq ($(machine-y),)
- +core-y += arch/$(ARCH)/mach-$(MACHINE)/
- +endif
- +
- +head-y := arch/$(ARCH)/kernel/head.o
- +
- +core-y += arch/$(ARCH)/kernel/ \
- + arch/$(ARCH)/mm/ \
- + arch/$(ARCH)/crypto/ \
- + arch/$(ARCH)/mach-common/
- +
- +drivers-$(CONFIG_OPROFILE) += arch/ubicom32/oprofile/
- +
- +libs-y += arch/$(ARCH)/lib/
- +libs-y += $(GCC_LIBS)
- +
- +archclean:
- +
- +# make sure developer has selected a valid board
- +ifeq ($(CONFIG_NOBOARD),y)
- +# $(error have to select a valid board file $(CONFIG_NOBOARD), please run kernel config again)
- +_all: config_board_error
- +endif
- +
- +config_board_error:
- + @echo "*************************************************"
- + @echo "You have not selected a proper board."
- + @echo "Please run menuconfig (or config) against your"
- + @echo "kernel and choose your board under Processor"
- + @echo "options"
- + @echo "*************************************************"
- + @exit 1
- +
- diff -ruN linux-2.6.28.10_o/arch/ubicom32/mm/Makefile linux-2.6.28.10/arch/ubicom32/mm/Makefile
- --- linux-2.6.28.10_o/arch/ubicom32/mm/Makefile 1970-01-01 02:00:00.000000000 +0200
- +++ linux-2.6.28.10/arch/ubicom32/mm/Makefile 2009-08-12 13:08:37.000000000 +0300
- @@ -0,0 +1,32 @@
- +#
- +# arch/ubicom32/mm/Makefile
- +# <TODO: Replace with short file description>
- +#
- +# (C) Copyright 2009, Ubicom, Inc.
- +#
- +# This file is part of the Ubicom32 Linux Kernel Port.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# The Ubicom32 Linux Kernel Port 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.
- +#
- +# You should have received a copy of the GNU General Public License
- +# along with the Ubicom32 Linux Kernel Port. If not,
- +# see <http://www.gnu.org/licenses/>.
- +#
- +# Ubicom32 implementation derived from (with many thanks):
- +# arch/m68knommu
- +# arch/blackfin
- +# arch/parisc
- +#
- +#
- +# Makefile for the linux m68knommu specific parts of the memory manager.
- +#
- +
- +obj-y += init.o fault.o memory.o kmap.o ocm-alloc.o
- diff -ruN linux-2.6.28.10_o/include/linux/elf-em.h linux-2.6.28.10/include/linux/elf-em.h
- --- linux-2.6.28.10_o/include/linux/elf-em.h 2009-05-02 21:54:43.000000000 +0300
- +++ linux-2.6.28.10/include/linux/elf-em.h 2009-08-06 10:31:10.000000000 +0300
- @@ -41,6 +41,7 @@
- * up with a final number.
- */
- #define EM_ALPHA 0x9026
- +#define EM_UBICOM32 0xde3d /* Ubicom32; no ABI */
-
- /* Bogus old v850 magic number, used by old tools. */
- #define EM_CYGNUS_V850 0x9080
- diff -ruN linux-2.6.28.10_o/lib/Kconfig.debug linux-2.6.28.10/lib/Kconfig.debug
- --- linux-2.6.28.10_o/lib/Kconfig.debug 2009-05-02 21:54:43.000000000 +0300
- +++ linux-2.6.28.10/lib/Kconfig.debug 2009-08-06 10:31:11.000000000 +0300
- @@ -549,7 +549,7 @@
- bool "Compile the kernel with frame pointers"
- depends on DEBUG_KERNEL && \
- (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || S390 || \
- - AVR32 || SUPERH || BLACKFIN || MN10300)
- + AVR32 || SUPERH || BLACKFIN || MN10300 || UBICOM32)
- default y if DEBUG_INFO && UML
- help
- If you say Y here the resulting kernel image will be slightly larger
- diff -ruN linux-2.6.28.10_o/scripts/mod/file2alias.c linux-2.6.28.10/scripts/mod/file2alias.c
- --- linux-2.6.28.10_o/scripts/mod/file2alias.c 2009-05-02 21:54:43.000000000 +0300
- +++ linux-2.6.28.10/scripts/mod/file2alias.c 2009-08-06 10:31:12.000000000 +0300
- @@ -753,6 +753,15 @@
- + sym->st_value;
- }
-
- + /*
- + * somehow our gcc is not generating st_size correctly and set 0 for some symbols.
- + * and 0 size will break do_table since it adjust size to (size - id_size)
- + * this is to make sure st_size fall in range.
- + */
- + if (sym->st_size == 0 || sym->st_size > info->sechdrs[sym->st_shndx].sh_size) {
- + sym->st_size = info->sechdrs[sym->st_shndx].sh_size;
- + }
- +
- if (sym_is(symname, "__mod_pci_device_table"))
- do_table(symval, sym->st_size,
- sizeof(struct pci_device_id), "pci",
|