# HG changeset patch # User Louis Opter # Date 1362123059 28800 # Node ID 8e8aa342078bac76dde3260c0f37a3d38e6baaf5 # Parent 315f4f9697c6d23b1cc8fc20dcf0314479a902cd Close the series on the slides and backup some wip on the abstract type nightmare in e1000 diff -r 315f4f9697c6 -r 8e8aa342078b com_add_slides_for_the_fosdem_presentation.patch --- a/com_add_slides_for_the_fosdem_presentation.patch Thu Jan 31 19:35:47 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,655 +0,0 @@ -# HG changeset patch -# Parent 9883e23afecaf44cf67a1f956d8bb8a912c6fe23 -com: add slides for the Fosdem 2013 presentation - -diff --git a/com/images/twitter-bird-dark-bgs.pdf b/com/images/twitter-bird-dark-bgs.pdf -new file mode 100644 -index 0000000000000000000000000000000000000000..1d3b305deabc2ca218a4a01ee164d1e9b404d90f -GIT binary patch -literal 6170 -zc$}?Rc|6qJ_g6^9maT+pghs+_W|(=H>`RPY6k=9}F~cm`DP^hbTZKeQ)=ENTNu?4( -zC{fWvwveK-_ZwQD`o6xu?;p>d`Qv`heV=pQ_uO;t>vgW8m4T5eR81YA_+TRb0sskw -z0O@#7fR+~6oJ4bHc>pyy5*x4)g~}o^fM6pkjzuyc5$Hq`1_NNS7$lrGz&{gfXBOuK -z73{0Go#QE7Ns8|{B&XwU-Ev`c`KXP>Fe#yto8K(Yba&X6WR%Hb<*W)-`t!g0IqR@OeGp0H1TnzRqZ9H3rzj28eQp;D)@;mJ;!21h>U -zan-*pz?)70n{5+yv)pPd-xXfS6t}H9O&sj&l*|8Qr|^#HWtW-Nuy0dx;K7qQz{UGY -z2_AoIlnE3PvfjWPUOFm9k8IVDFX@s2okU9ONEnvH%IK^siV1&^O1mcb?%rhQlRUV7 -zt**?mO04JTriP2g61jT!3tpvE^(uKiYpx0;WIT;HnPF|joQ*kNe%sl!*bHteDGZyM -zwN|`!zVJ*4>lAP1QNVurif)tgUE73nrS0#Ux67g}YUJVvH4N*s)EUW7ii!9rqu!sZ>4Y)Osueee^v{|Do%g@9v}?$kZw89rD|H-WxTXJ0on; -z26cREr|>-O&7AUvhmy}57^lMdM(-KEI%3fqzP=58K_VB$TV1;IAbdKtKg@IHm%#6dRoeq&YXuA$MRD~k8L!55lKTE+awBIA3za(idg_J!XUo&Vpc!^ -zPE>t5;8n)h8B?@B(jsvou3_N4eZ-j&i#zNG&Pqdfu9qDPB8wO7!Y|g%#=q5A5y4zJ -z|169o@mP^WBYw*Z&TKW8G`{5&0*3r9Li|iKy8s^&*b3)P0%J);3Qmvi4|IZXmSGSG -z5Q>DUA=F&}oOK3?#sb1ua}fZxAu;J}27$!ns9Q1U1X~iz3Czi34$#n_Wo*mhYdn}huo;EO1Ujv;v;nvPITqL)@6caVq5s?f -z2ZCeasC4)5CcZJnl2|w*X9Wm_{N`Kpw+Q?o4ggzPVS!K#<{MD`C-7?#{#t_ouq_+U -zTGe;NnghOC`tI|40mET1bqwZ5sZO5rVqP%+bi3cOJCv`vVBuNVo(vyRiI<}i0O?l3 -z-)ylN;dP0k>(=EC7fqg8Hd&Ocka-t-U-RbHJ{|2QIAtNTZh4fspk7hAH?KlL#18z_ -z9`Ul}{+F4nVGjt^NwIrN?XP=o>8cC;Je=QJ8I`t#Oz7OVWIWY3sSe-PtKXfB@65qf -zpQRwxcJFs+JrZ`8xO4kVng20rW|RiLt@~iH8_F}L*3`LK!LTu@N#-Oj*>rpdH2tDS -zIL{ZwtGjpI-34bUSKR!&iazkUBzG1jlyg%_cqujZvv%9#P4|efs&mE=T)NESeJ$jwTOpe<8ahUWfBoS2;M#EBAD0M%@iv=Cu_a^64UAEDvzW1$>qt1DNc3TBYF$K$3-TW(Z*3PHQ-Njgu -zxT{TekqYz^I*07yFOAkdkGfIJ+=&Ln0c`eOAjprXZA?ZF -zIPs+@NiedHu^85GRk2C;M)|@Z?pX@!uC^F_Zm$!=xg1f}O|8kPe%h1R?XTlzEhbyv -zV&G5{8b?kJtwkoi5+5(Be)?G_%GayFur~;Qim%W{+{~-$w(aJW&Zwlk;pka#`0M#V -z=ClpPBRK1sL0!{Gvle($0s38q*|Ni>l+fgTW2Oi4zWKn*HfKC8 -z)#NQJPCpI7;a@HSBD7p3=lGWj1hj0$1E#DWIyf~3*D6|oUOwqceV6A<{|Fa-_d$GK -zcc4jFDaUraQl>HTP5+D}jfD9SHK3#aR@yRr_=9*Uln!&HO@H*{R>ux0)_?TVqPn;Y -zJ#(miX!%I7UDb~_lq;QYib7h~S~;p;$8}I(!BB0>_*2(`!|Nn~(+6w0p6JAL8ImOh -z_m{6*sCT5LT>f|-Z+g+tWh#2I&}Dq&vSnxWq2@(E-z%4TbVx^)9wD#xq|tIohjh%8 -z`#FP>>Gmrb$A$*`^j#_SFUols&T0$-N|n|T&}u>szAqc)HL1y+@Ya3MfgRSOzbyP&`2FAa&_maVf#&(%E6UGtGK+!afCl_ttY= -z5Lhe*1LnhfiYprNx8Apdy}-7UhMDt#lBt&$9c#THtxHddZ&-*ls{i`teo -zYcYOR4`c0x$(OXwP@Zfsn8|RS|7fE!_DE-Uh4_on_ujBhs;gXpeb8HnbndIYo@M2c -zIjpSE-j^dgFJWwj21)sjPm(8DW?eVUc6ioZo!$pgwzS+(R4+JLO081}I@U3GJ57Pf -z+AABI1aI5wQY$9Lg*{>ry$O1Bu+y8IqKxrFhRp*KZ&=j_M}WFMPwdgkse3G&(K#kF -z53tM!OQ(2PUC=$TL2-3bHywBg6MR)P&-40s`xWW}A1H~r+IKF-Me-DOn?Gl1H>Gr6PvGX)sJ=opNtfTP -z+?cRC-JBuO*r5)Vh)}>vZnfC7wf4FoVf@iQt5Q$mT5q!3${{qoyUe+HW6I=4XERmGQ1)le+wIJ?EwZ)8KugpDBg8o%ceP_>l5VD>Z}r -zvX!rm%TN|04&xHhTK>_aq07m2o@(Jf6YOwLYr9A+QLG5~!syEKKIftltb*|y1SI;e -zT;B*AvTa}9VtaA29x83Fq4z7NE*IR^AHF1GG=r7yz{u*2W-I3s*4pY81)8)N* -zO&uAnjXFD6rQ1jAr_0|B=A)D`WHjJdOGZtp3$r+jmfwsm^pqb!T7MUQ>M+veny`b3-d#F123y@osgcxREy}lU^5MxE2{T -zmoL9D$rH#5?oM$JviBwdJcII&vXe7%_a~h??)JD)J)$ywA!ET;L~@oyPBKdv5*l-z -zEHpJz>%+ -z!|TjvQMkG?*^DhaW}44~$r`ZQt9)tc@){9KDYbgM&DXdD4z=Hr^`PfR%BT7)e_ALB -z8h@KroxfuA0k=)x%$gbDIT9*2@g>Bun2)_kv`yf;oXp8e&u=-ZIxFDg@7ab+QdJL%wVDj=LRnVhj8qjn}n4#`8P@gyi&T| -z5QE6JTtIkijCs(Z#iQ=r)ip5F{@!WUJ|X(ZMms^?3q$#ZCqzV!ik^tpM2PaX=ZbFP -zlMG(x{^WriJqCL4!0|@88gbwEI(8%4;UeOqqE09aGlMidp<8A2q9Z6{7vb~3`MCsL -zs0PK~Hw+NV>QNkZ&crxqn%p*$zR*z0B^2{;qlSC--9Ys%vOyip4fn!l++)BIyjudR -zZw9M4M)RtJT%!e$2U9mFZ|0J32t~n@9JQv*iAIO<>$KZa`%j2Up0dtaF~7I-Vq3tJ -zRr^plU?OH?s&KjVi5Qb?d|w%Fg`_i&ulX7(8?P#GcZmq)y#L{9DaDq3M%Jc~&E1NT_4qvWm>z=At -zXX>f7@*mr}#be+@Su8*Ex!c8Hh+D9L#uvE4mWQ95Zj?#0_AdKtk{yrFYU@Yc1kTJyn! -z#25#}Y8xc;9U+i7MJYM%K~brrC%um*I<`siZ!VhyRr{@sd1Oo8yfFtV&q6r1#5PdR2WbfKZOffpQOufGyj%aH$CjNT-WSGaB6P^N#oJ;NPGeTBCa4NMemSL`o9} -znRt@qcEi(MH=DB3gq`O31-Rd&~}BbkCwF-JvIo$nm#e+ -zR>Mlg6!XhGPS2JP(vp^|>`z3!n`ob279>Y(Fd`nGg|{cpQ(=!^wwV;Sm;!G37~NF# -z@?eU6=#D9iCoAk9K7O~gbK}-AfVV~aX??ZU&S?jb>EU@)GLMDFai^^8;eoQfp5aL$ -zSsoXkf;X0F9!T+_W?x+iUJ$sGZ~E6?nmv-Tb*84cdqxi%y*!Y5=@K`Vd^{%5?*4;$ -zu6I^ubS#7ZzTw)lVAYu<-}=H(G7deS(kpT2ZGPwcr#pm!DJ-Ae$*vR4#wsO=N<>Ly -z@&KMjg`@jULi5u@c82)n-ES^R= -z-pl-UDzaD=G9a@e+cy&b+I^Rg+xpyP!^}jt;fg_Zlg#(qbzgOq*L_C#@el8?Y?yMq -zx_7yt!ffxe=KeFJ`t4gs&74K0{u+q^`>6$t&IG6}IWuNubz*McUY5GeG$!~;2}GVh -zClVrMHv2r_BHqbO!S~JjkR5ZDZi&FovHk~m{e`9d?4bJc(EcqR=O+aEy)RWR7Cmhc -z3a>V$hIOD#TDoM-wl)_g58_@qVwLU-*1k1)tddrD^lA^46j)g|(-mpe62e^)(Z7hX -z6S4BWzDHT%m)}q^VE*tT!IOIn_9MQqfH;^u7yqJvMIgYfA{_8X*NFPr_tZVOB>{fwF0u}bgCDH1%#=g)S#+RxC)TWz5BjD@ar~i1W2&ujQX|m4!4yX@R1E_D?#O_%9R|gRMWNGxtKT?0oz2n) -zA>m{Qj;u*i#leXXRVb81RE2PcDvpH0qYy}vItmW^?#bsDhW~KIS>X7Bb3(wGp*bx( -zkxd{mv_ZyJ=0IZ)I+OL)HBeJc0}2BFdxSXQ{?CLs$M|jYS{w`-OD9su0S2758Uuqs -z;i?d*DjaGDMWErDXefLS1d4`0w7|b10c)!IoTTD(jB54o@NhO{O!vaUA2gpCMh%L(YkF7FiS)m4sR2q)TOe -zolq&OF3?mQ&0QPhuSz75acn9J#5tNZH1TWrsg!T$u%-w8Y3n~64)|LEuTFnl4;TRO -zUmE|Op`Ujm=YG`&`K{h~e_Y70pI7ep3Re101-u&oUdvie3|5m}$pF1t7@R*8ihygb -z)dUCv0dZiQV*0O$A8%m(3=$at0Yaew$d3U;A`ox{kPQ4T(}cl+Usq_~WeB8(`tLG` -z2J%lC3WoYahJ-`@kU^k`KXFj#A2Ll%&EI9}F!eutsKYdV!Lb-P3YElIdycfF1d=%W -z1%hqpbQW;+wb2F$Hl>m2K-kxpMN+xr - -diff --git a/com/images/twitter-bird-light-bgs.pdf b/com/images/twitter-bird-light-bgs.pdf -new file mode 100644 -index 0000000000000000000000000000000000000000..e2536c220c07922151b4d572827366dac2f8416a -GIT binary patch -literal 12645 -zc$}?!RajhIvNj%QoZt{>5-eELxVr==c+fP^xHgTuC%7fJy9Ed?L4$h|++BhMck+|W -zCv#@zIsdts{q)7!Rc}?jt5((8H`R2iQZlSyHZA~N?_P8cfCtD9v^TZ_2nm4{p?2nQ -z3n1@9yiEpj#GvjprOD-{QOQ>5$4u5dUE7*cR8`Ozto-Zn7*k^V)*X<=a!n8 -z$Z7$X`yz-;2__wsjAiZ_JA+?JU;gZ!@@D&tsUsB$M+hl?B8~Xwn|SmeSg5OO%0#lp -z0W61MSjSSIZw?GJ6H=?*Inh#>+lOYQl)uQhnJjAXL}T_>++9$^LY+~GKzd8>BVEug -zaQ=$TbK-F+%8|$#S*+HsxXgGK;)|Ex$madm?k8X3nM=kh`cK$sk1dGa+66Irxboh!^*Br@O@lSEjS=T(EC;Y=_6({ -zqeWvxXnVlKn|&_*a_7*lqW2RrlNLAzbcQk7M+`xlOCP6B=n7PG2b9ml@OxL{B@5tq -z;WGXc02T(;;<+gC^386E^me!8j&;y&1EDfj&`nrTMGVfKTkf*5;-jK1K$){P?M$Cz -zS{NcM*fnN8Cks))F_t$gzAmf1+D-kEO>n0mmU~INm&1h5sxyUE`Ee%x9_G>s -zf;f=#Fz2<;0mN4EMIiMHzC9lJS0%Y%-X8(H{aHFY#FMYrR`>E2PmbS8kF{U8SG?#| -z{u1fBM)*O6MTWAFsn2VVR>O5DIDn0|+10^?XT_?s?oi=pgO8Ed;)l#BUl!`I1E`(p -zAJy@&`c+Z9e^eGXC&!;6?!Svo!`%T2QiYg9K}t|lONfNM8&Hq^LCwL=4g~XXuyJ!4 -z03P%(s2v>0`KuxUAT_9yy)(=N>hxf)3bQv+hr;zh57qntly-y5s>2^D70CY^`%tPN -zNqal^gS8Wo=TFfeEI9vS0sKt^_?w3l5Tsyf>IBsL%~B0u0DSP^{16@dPp07ixq$}= -z1P-yWH~-VcA54{?aER%H1_);Vm)Ly&l7YX713)UON5%H2^#E4+o) -z!mv@CaLeB4=hDwRU&FSryZQEEZ|n -z-tRZhQt$VzdqMNd!>2cNWL|f>Dfx1Xt!8YzhOgqTtqe6fm~UNAd2s_)v{8-(BUVrl -ze~xOSqdWt0-97UOtm5T6LZdNS@HT9_>4o3r9(VDQ4=!o)-kqJFWm^vL0^LM1eMNKI -zNHkG8xs;4P1N-dNqn37Q?9=Y+Tkf}%`aJnls^TdhQm9RV8x|ScUkX*H1(6f{bSuXNJlY26picwj@n;Ivs9$kWa -z3%gSq1{=nynUZVf+D@*1>8^1oqwiM2PvoWR4f&1rm39Ge-y$)7kTey -zJI?TK3AR9y@9TO>kKjex+H!vv7PIu}DY9o_S_lr3sJaD>*?1zR%-ON}= -z(3Uz!m^>)#bitPFt>x^blCzvQ_Yy(HedxN|S2)SpO4|WOGxM=nijM^+uj^{fy-bq9 -zJ#%^q&S^H*V(Vl;lLa%#?XIZZKq>Lc(<$n1^9N4HTkGZnI`85!nm4(UoY|EGvU3?Sf4KO7B-(!)DGKCvhCc?6eKXh` -zvaDz0%;~YAwcRD}<(pc>9Ljg4h`PF*`7!iLU$N`yP_pUnA{<086MA*f6O*j+DZQur -z@m8v_@Ir(`$;L*lHVM6%)Xtj*N~qV2_!};W#A1kQhRj~!-=h=9bdf|yrTJtJ7~GBtYo*QuTsgL*+MUhz6BlF1I8q2JO -zVd{je#BSqtzw{@2+O6%`jg9e5lB&$h7JoGcs1WW;cOrDeT{j)Oc$qKQ`V(rt_6PD) -zt1ImRwckc=JHdkk2JPkHUgbC1{s^gTN}Sy$g3NlL`nT--&*gUbt}NfBD}Nr-V8}vF -z$FSH##h*ttX6YV7b9w4+?fVl(bP3#Fgw|&XxC(Mve6Oox47d>56Q^C&KNUTPio)(nRTe{baQ+Qf;_O-Kci -zn}18DNcR;co8_QRSPTG=& -zSF5A4U_Fr_RKWivUu5-y^@Q7yH%1{l62IId2d2Um{|6c%mCer<0;F(%R@qn8 -zwFd^MbxDt6u~X2txwLk9s@^%S4U>yPtMkMt;AYP-B0ON! -z(z=cMeqB*h@y5>#P8wH2C`vO4U}F5am@M -zmZdZO0gp1UeOmxSrypNcY)n9aFNy8uB;RI#rzAic$QtoqNMaX%!S!kJNWsHjIhPLO -z3}cU|JyAi|tWi^OhhbK!C;OA7P0(x11Fo@84!-GWF=*#8L6w(gsB#J3^2P^nEo;^) -z?t`rCGA7#Rl4MOioeNn=o_#_`$JjhST31yDbKa|d?)!#ZhXl^<*u%GYp{eG|f?p@D -zAfH!T3Djfjh%qJ?#CqGxbuy4AIF23rd5P73*cMBLN>Ppg$8PI=xMu=kr(Os>|18Re -zS5~^DE`?mE^;t`nHWTSaXNsb1?S;B0*#Y`sJL0$aZy#&@hwqsj3^v>drd$23^J@%g -zMl|q*->q`x(oLg(4tqEFM&lY=x7$jl2+d&4*;DHk1Y!7b5|10+L5hPyo|zL-(jmWh -zYD_2$wT@kE|C=rWWqy_hBv55cSb)OoOC!X6k5Ptk+heHAjC|ec13;{LwL4d4hxcJtbXU1m}A)g?baCrUE-vB&HWx`wH2t1%mX@ -zKh|BA52k7r=6T~+GjK3yvqasD^Bc*Nd(tvV3TD#HljOYB?aKa|*${%$M5FZWM6Nu1 -zWHVT}RKwgR8j@ftt?eJ_^YMt|L?F)O>+WR(DmRHVK5Y(XhmAHx@0>C<15JF($IJ5X -zio_X)lC0SF{;74v2GZoGj`-By$*idHLx!|9tmTc(YOcS{?z6*I$G;;v*vgoBI>3F} -zFd7lpC%9{Jus_> -ziZe<Dv(u??Lg3dD1{ -zG32wJLz`i+-@J3eBPeUJpCj%E%O^9ez -zUM5gRTi|c{%3;z`E{ru}w)-Qhm(FLUa#vSmAtA7|n1zr_m9-QVZH9dEz0}IVH?SXJ -z$i)QXz73SnLMN*~9h0i1>Edx(J~x`*VC+F9(tM>g46SHh!!)NMjF-IgVCbd_mFfmhd6`E3{ujJ`J3w8CjKzYA -zf&qpI%`sSd9`&doYI -z{y7~Q@_P}%-n@PH!pG@mUTOY2j!7C=Zn`u|YM~HetbU?i>boEcX*QywCw}1w<0> -zrC6yxFXI?s8Wu*^;X`*JB8_7vD@HgklFCa$`%;xYE!jm?de#X*Jw|VjU7h9gE*u4@ -ze4iKMTNolcwpKp)L0Q4Tw!SwYN!)XXPjsTJ17lx5 -zz}Aq)OsTixP^DuLNuO*cwDf7lyPAct=`2{OG*ZfVWZ1M%iSzfd$MCjpBJoghX~H*n -zY9v(IkYRJB{q+Sywne!T5>7E5L@#LWbA+eFXLvmg -ziat+N%85N+|EA{mBM!+H`I)B&a(j?KB!^as%r+7dt=muu>Xei+7mZMct|^>N3~ZMZTILAG)>9ZJ+i@mjSsVaRC=A7K?eWjSP^ -zCzWK3^&Lnlw@EDuUG>q8{6wi_UAkxar|Hd7ozk7;36n9#_71AtJ*k#|Vs!m0 -z8KI0CSx#Zs(%?2edI@i~c!|V1Cum!JzW2yk$@E6!42zyoQ2q3JDf&9Q;P9;DM%T@2 -zQ^|b6HC=)Q8-OPg($lF>&Jm7Nb(?jmt?Y@s(!opnaSfnwy1AtyC9R@@mN91||M{zf -zL{6q=z&t+BGW-<+n4WEaJ6IlBlY0G(eY|C6{WU5wv_@-(_t6*X(e`4j=)m&Bt~Ayn -zGh!f>{)JTabUv|LOBLuxOclm+Gppw%Z;;LqYw$XrOd(gwmptoZ>}h(9%g|M=X%0FO -zfDA{+hZqu+u^KYS~U_Kw=hG -z0GT~^A~S1 -z0A#GyrhHd1zktF1KwVxWzx)IbbsQV)(<1onuEHQgsUqIDLfPT -zAn38;qGzo3af{J)XpSY`WGwbtN*pT++tkHKD?gamUz4abL_TGWiLtvsKB=f5#^aYn -z7i?{sNNIVtzQGwJly~|;ySI_b?U*%5h8u^!^SWn>eE)M(?o4_ZWBw>nuO1M&M6I>9 -z*adsV*awKA|LSR|ni@brhs=L=@<2*+Ui>?8-sEDFKG9sTxP1*)rn5)}nVwb`vpt;` -zTgplPVEJInPUw!*bA{V!Hj^_4iy`BHv6>%b4vPW?YkTMB!B&U@y=6B1M<;R8I^DQU -z7lFcM&uv)GN3eOKYPT9Ev7@yPS)z&QbO!thPg1+JQ)ebtRnn1Dg)=)uPV#vSQSaZj -zrfKL)+&WvtY(3jK-%@{Je~I;(1LLE9RL^x*o)d`WB-K-pBa0mk!*Fxs#$Pa(Pzn=A -zj63U9`#b$OF=-?+j|`zN)e0}(SeYL{*dS9xUKQD5+UD*akP2^L>gAQoSdT5PEl{f6A+BU1z;W16jSYW(cNZ1JAA -z|KSNASVO!8mDaVgi9bC&l3^g+iO?~G2xEqC43^E+RD771T+;qlp1eu))g(5;rOS?e -zo=4q>Wj}v^DTubGZvR}lr-{)H|Ihkn4~Z1BeZ7!*hf;{m_fj!?T%1OWpek2=+to&# -z8Pd8RIBC3m*)oO7_61i%Uyg;H21ik3VE -zYkd1ARm@qnG|Ejg-Hww`x;`6f;IO02Nol6_oFYR5zm@wLZ_K*&363Dv_Y;hw1$AG{ -zf|Y~!Lh{W%QEWA+`2JhTQl|Q#lrUlkWUYgvVEEW(DD4fPUed0aD6=sYqe0F_AC~Y1 -zv2^;Ag?WN8@@+)Vk!mWXzIRrFrrs8nH?VW<#j80~H`!T=uYudE9c~xP$>K;0iN%}& -zanFR&ya`7!x`YD;y{F5>&D;~{4fvAgYux(M{9oP>6UB1Vz{`~CEhI`@t~*5!nF9o$ -zn8pfSk}@IaB^WpBr@B39*6p1fuLpoq)99ui)oKc(@5y>P=sh>WI9g~1KG7UZi+e=8 -zH0!m)|I$JrJ^RU%=cmsxoA5`*VTu=gq+u&tN^>_H#153f@yq=<)h??onK;r?6b>H- -zOWmx=1{e41k6%gZ*kg{SFW8DozsKD+ZNe=^aiS06B_Ay3G#42y5*d?2an{OSVM}YY -zGs*uX>WDb*G5nO8oBusildDbPS6QExVa=UQkgNqg*5jTpj{JGfYm`>0`y;(UnHGr8 -zh6lMZWemUqBkSRG2Rt9UgtHIQYU`wY)vP*Nb7@UerK@nGhQq`{oW -z+T07A(8Bgv3f`!>scyul2x%E-(yL`8-gS}T?5#cC8RR-mmP#*iMws85MOrgLwy;rl?E2vINqS0EwZa@K$@6vL>^ -z6-YMHR)o?b)*F_pO0!gn)rJm^W+xjg)-uaUhoS?Q1v_ouGt@c-#N;_EFMoI=`8lWg -zm6A?M;7rPR!fUaa7g0La^g7S|Pzs0qyqGVglR -z&1EoV4RKjF(_nlz@yQ@9G_kZ@GxxKe*7Grm*ed?ib<4i7yGc1By3u%60`Y -zk+S8#C0|a%D)5M9{- -zA|>hnAUdLwZ9iocs1q*&v(wFtck`$+>0nCuXN1TCS(c -zkIu?JTI-Y9VEVJ+X31YK6U?6PyHPh=1T -zqgs6=z|o|#u-~K7@6#Jf?>D$K;*ZKOiRRq7o`=GJm~&N_Log!LSr?_yR2;Suko2nW -z-U}gM+pWj~oR$Ft{-?x>xsx~2``Vp$OD6NNYzSUhZycI;K1qhUSex4fIe*A7jkH-S -zPiHcMA={Bta72)Yc`DT;1~jZiEWqU0hkRO-XX=RO!X>RWAvx-{NZIijA^X_alXy!V -z1%6H5FH)&=YGZOFwo)q+9u9y52 -zkY%}ggX*Axytt#DeHYmNds@w>AL~Tq79G`&Pns$!9eB_!*fb?p#LMwFxy^JVOEMX{ -zd}I)XWRxLn4TZt2pY%L70_JlDuka%pHV8gT2`<$mV{%keYM0>q(PE$8;FL=@kgE%Y -zti`{3y7dAzIO4m@IK0@yC&H!HzBymq<3aPU1_Zv3T@}s*0j)4 -zn)E6$yT^*sGR@@sh^+O81NXJ8BcDYVHQS`9K)hX_TEvo7iE?dSmu9F_^jfAQ4Zvb) -zscP2DT__igka;)9QXsEGBxho!ckor0%DTSJx)7fuDx%tBz#F`+;CcFtF+w>tcm&@) -zpz!7d;{Lj4!C#*~DriyRgIBvw+(8mh>>PrBlcjX5o3uQjWJz64sKBRxt+u@rF(GHJOe^JTf7Sn4i(z -zMwd<}bFV;amr9$93mwuSqo2WZ`yPfnsE6fJX=Wtwrm|#%n}u{xxzxZsoWZn~G2M$0 -zAF*==>S4-)FLA*w`$Tz&)zr#W`i-^nu6v!ml9{$2-3Wk1`d{5*mze5$@M!G&zKil2U4Eld?u95po_w<%q3 -zrqKBYYs@G^cE>NFsw52q{`Ln$tUx}mJy%dR3YFu#06e~VaaKdd4J|fvu9YVo2GfvU -z8vJR>qe6~pVub!YrSIHT+f4B#cSI2+$QqrW9n0zJYbh=E9QmSq!IO*`pRN@It6)Fi -z98KVg@#cf(6{>HSsK`TrFxA(xKS7|8L -zdeoUAeA}gkB-FtjN}~_ -z@SbW;(gH|Cwgb8GOVZFH{xie##~aiW*{JcMZXF#$&b!wJuZW~C3r@Q(IH=}*=g+dj -zn%lQZpWehXwES#XT~)euV{(gI7bW8idF^h7Gt6$)GfH-i`{U(!A?;1H`P!)bc_w*r -zbX>Tvr-X>!eX&)^=tzJ31vO)!3d6=x1cu`R;lz*6J9oAY*CK@%6`1FdYX)b^`-)19 -zTz7`ETbOsLm2Rr1C�qz&6hWq@UQq&ZItpx%OkY(Q5O9XYMr4_&nx?fFz5Q&kUKx -z?Y^N)gV$UqTfrWW7^0DWKDlgNz6laFr)(Y6ckf>3)E?#?n$n1lM^#dtIP46^al7`< -z*H${}PiMP0OmMq(oL-!AS6MfjJ~Qt+{Z9UKDR3uV<<^TKNyP1R3xvAIdZwO!V(2eC -z_Hrq5XkK#etJkVw$Xqq_g2MH1Gu3uYLrJeh6Tipu$Gu}CX#MhM`yl*`8MlG^HJNuv -zN|oceIq5_KYv1=`{UR4)dHHP}{d) -zUUE@}{O-c#x4?^#(XeaUuO^ls1sspApWJ4z8+5Lv#eFrhvt0vUo|KuB5AtrgGNRn! -z7>Fi9ofJHowpQMzg)%tRxzD$#hg$~iUXWGD;l7^;bP*kA=5|gI%YYxMN1uE9Q?{hy -zD&KQY+$zJ^u0LPNK!41*e6l}1-{V?@yd<){iX6T_XCPRTO0;5Qb?;rIO7M0ry`QMP -zPt|q>eNEiZxAK0p0D>!B*<`!N5^tHD@8Sq4`S;z6R}h -zd6teoI`?d6-@6yS9mR#_+rQ1s+#F@?j^=M=#xqOYyhZBNM)4v6wvR<)2M?OIeqock -zKJ*WfJvkb7bE91;RKwO5+N%)0ZWdc50a9`A(Ey1x@zz0)aHGxENuIXyKDDFz3=;E_ -zZeQ|KG+bd_AkS&H{~P{lFjxp_7e%CBrQ|OLY`q5v?6*Xb)(z -zifAKZDKak&&!i^4L?tG1I_B*}y&q)u{#Gg5E_T$GP9}c%UhsS{LI@)q^W?T&&NwD-{qjRQ@F)?0Meq|f -z;)cJKlf6jK;yW^jp_;{anzNhDvB|>N{5DDoQ7?<|RslNd0Mc#D&K^m$%W}JZr>dhN -z_MWb5Up@;jcE)u~C+(kI=j)I&(Nuo_#ni`p!7Hnf<>Lw-`sq<@tYbigg4g%_qfztK -z)sFMIiu8%z(-U%BUr41J{e_nc-|bdNcQ;8aTb|R;^WfyzEvgasK8iLnQe318Q95=z -zS#S&{7vAk*VB}V2w^)WO2Nm(pm1S`sp`w${y?)MxI3tFJhm&%AeJhQ$mh69I)b94J -zQpL~T=Nl>GedlT>?#0MYn1zr{`zZ0xAW;BW8M?X>AA?=sA -z%?!A>2)Cw{Vr-izjmt=$kOsHD{Wg43+;HD!)<$HsBPS%}W=1S5Uwb*jn5kFg~NO5X?2CRzYL40?+l1p~korI@tp|AgV5B1gKTldNJ -zl_4KNu8hXJd$FxMhp~oZtUY8dLp+X*eom^9A*09$>U8rg>LHA))lRZer&pP_${Frl -zYoXC*zl3LBl6p9w8I1BgkPW@HQC!oJOxcBkT@qPn{p#6=h7vJ|D{`+>XMkV1Hj3Rz1Y`CeUhq!@o(dA}vTR(z4Y*z8`u -za&m}#*ILovs&#&pUl2Y(w%bha^|e%aRZk4GPo2o6YbsLXaiqHC^Cplz9#a@iEB4_lQmssd*;q5cw^&Tl8zK?(ys^ -z&jW&aDiwFfinD7K(TVfwwyEz;;P9V!F-Je}ra-TSiaGCH9`2m;8+V`Mi#Sm)++|Fp -z9tB_Q?MT5E*Gr+@pT3A@XkT>O -zPxY&0rS2$*SEh0tLA@PI+pJ(M*} -zJgiOlO<*9;_e_fuXE!5C>MX-=l0!K&X?6@KZ@OMVY6+0B!R~%DO9!~6y&dq^JH*)D87|BK -zg_?3g_#d1@I8C`&!C2KtMU(*srT15Z;E0W*7;E#$#D6p9 -ze^A0L;Wki_-<-s4;Qv_ISpEtjU<0u;7iMr{HHDf%oNeF?4@dJGZTgS&+gSc_4!`X{ -zfBX6mhXeYffqyOkx*kLT!2iz* -zSM5U%eib{Tl)$gXc=&TVwZ!49o%M;`9I|9}JY{+o=C -zpX*<_u=8?o{=1Bu<8K)p2C=k(!hVl*t6O?NANC6bsoC4ZfxjlU)qo&5J2QJA$3LdC -z<)namLY(XpT%6*ZJThGTToRI!5Brc{=jE5=7w3|akPsJ_5&8ck3;@6X5dne0eHy7Ppsw - -diff --git a/com/slides/2013_fosdem/2013_fosdem.tex b/com/slides/2013_fosdem/2013_fosdem.tex -new file mode 100644 ---- /dev/null -+++ b/com/slides/2013_fosdem/2013_fosdem.tex -@@ -0,0 +1,176 @@ -+\documentclass[xcolor={usenames,svgnames}]{beamer} -+ -+\usepackage{rtxslides} -+\usepackage[american]{babel} -+\usepackage{tikz} -+\usetikzlibrary{shapes,fit} -+ -+\selectbiblanguage{american} -+ -+\title{A DSL for driver development, why \& how?} -+\date{Fosdem 2013} -+\author{Louis Opter \\ \texttt{www.rathaxes.org}} -+ -+\definecolor{lightred}{RGB}{147,36,33} -+\tikzset{componentarrow/.style={->, >=stealth, color=rathaxesred, ultra thick}} -+ -+\newcommand{\cemph}[1]{{\itshape{\textcolor{rathaxesred}{#1}}}} -+ -+\newcommand{\tred}[1]{\textcolor{rathaxesred}{#1}} -+ -+\tikzset{warrow/.style={->, >=stealth, color=white, ultra thick}} -+ -+\tikzset{graybox/.style={draw,rectangle,rounded corners=3pt,very thick,densely dashed,color=gray!75,text=white}} -+\tikzset{redbox/.style={draw,rectangle,rounded corners=5pt,ultra thick,color=rathaxesred,text=white}} -+\tikzset{redcontainer/.style={draw,rectangle,rounded corners=5pt,ultra thick,color=rathaxesred,text=white,minimum height=3.5cm,minimum width=2.5cm}} -+ -+\begin{document} -+ -+\begin{frame} -+\titlepage -+\end{frame} -+ -+\begin{frame}{About us} -+\Large{ -+\begin{itemize} -+\item<1-> Three guys, limited experience; -+\item<2-> Lionel's idea back in 2007; -+\item<3-> Experimentations, POC in 2009; -+\item<4-> A side project for us since 2010. -+\end{itemize} -+} -+\end{frame} -+ -+\begin{frame}{Why?} -+\Large{ -+\pause -+\begin{itemize} -+\item Learn; -+\item Biggest part of OSes code base; -+\item Dominant cause of crashes; -+\item Complexity/Skills required; -+\pause -+\item \emph{Understanding Modern Device Drivers} \cite{kadavasplos12}. -+\end{itemize} -+\pause -+ -+\begin{center} -+How can this be solved/improved? -+\end{center} -+} -+\end{frame} -+ -+\begin{frame}{ToC} -+\Large{ -+\begin{enumerate} -+\item “State of the art”; -+\item Quick dive into \rtx; -+\item Wrap-up \& next steps. -+\end{enumerate} -+} -+\end{frame} -+ -+\begin{frame} -+\begin{center} -+\LARGE{ -+\emph{``State of the art''} -+} -+\end{center} -+\end{frame} -+ -+\begin{frame}{RAD Tools} -+\Large{ -+Jungo's WinDriver: \url{http://youtu.be/-o6M1ljZMQk} -+} -+\end{frame} -+ -+\begin{frame}{Static Analysis} -+\Large{ -+\only<1>{ -+\begin{itemize} -+\item Static Driver Verifier (Windows specific); -+\item Safe Drive (Linux) \cite{safedrive}; -+\item SymDrive \cite{symdrive}. -+\end{itemize} -+} -+\only<2>{ -+\begin{itemize} -+\item Cover topics we don't cover \cemph{yet}; -+\item Doesn't solve code re-usability; -+\item SymDrive is very interesting. -+\end{itemize} -+} -+} -+\end{frame} -+ -+\begin{frame}{Interface Description Languages (IDL)} -+\only<1>{ -+\Large{ -+\begin{itemize} -+\item Devil \cite{Reveillere:these2001}; -+\item Hail (similar to Devil). -+\end{itemize} -+} -+} -+\only<2>{ -+\large{ -+\begin{itemize} -+\item Describe interfaces to access the registers with constraints; -+\item No notion of bus (Devil); -+\item Don't describe the algorithms to access the registers. -+\end{itemize} -+} -+} -+\only<3>{ -+\Large{ -+\begin{itemize} -+\item Only solve one part of the problematic; -+\item \rtx\ started from Devil. -+\end{itemize} -+} -+} -+\end{frame} -+ -+\begin{frame}{Domain Specific Languages (DSL)} -+\Large{ -+\begin{itemize} -+\item Termite \cite{Ryzhyk_CKSH_09}; -+\item \rtx. -+\end{itemize} -+} -+\end{frame} -+ -+\begin{frame} -+\begin{center} -+\LARGE{ -+\emph{Quick dive in our WIP} -+} -+\end{center} -+\end{frame} -+ -+\begin{frame} -+\begin{center} -+\LARGE{ -+\emph{Wrap-up} -+} -+\end{center} -+\end{frame} -+ -+\begin{frame}{Questions?} -+\begin{center} -+\Huge{Thanks} -+ -+\end{center} -+\vspace{2em} -+\begin{itemize} -+\item \Large{\url{http://www.rathaxes.org/}} -+\item \Large{\texttt{\#rathaxes} on IRC (\texttt{chat.freenode.net})} -+\item \Large{\twitter} -+\end{itemize} -+\end{frame} -+ -+\begin{frame}{Bibliography} -+\rtxbibliography -+\end{frame} -+ -+\end{document} -diff --git a/com/slides/2013_fosdem/CMakeLists.txt b/com/slides/2013_fosdem/CMakeLists.txt -new file mode 100644 ---- /dev/null -+++ b/com/slides/2013_fosdem/CMakeLists.txt -@@ -0,0 +1,6 @@ -+RATHAXES_COPY_LATEX_CLASSES() -+ -+ADD_LATEX_DOCUMENT(2013_fosdem.tex -+ BIBFILES -+ ../../../doc/bibliography.bib -+ DEFAULT_PDF MANGLE_TARGET_NAMES) -diff --git a/com/slides/CMakeLists.txt b/com/slides/CMakeLists.txt ---- a/com/slides/CMakeLists.txt -+++ b/com/slides/CMakeLists.txt -@@ -1,3 +1,4 @@ - ADD_SUBDIRECTORY(2011_lse) - ADD_SUBDIRECTORY(2011_lsm) - ADD_SUBDIRECTORY(2012_lsm) -+ADD_SUBDIRECTORY(2013_fosdem) -diff --git a/doc/bibliography.bib b/doc/bibliography.bib ---- a/doc/bibliography.bib -+++ b/doc/bibliography.bib -@@ -69,3 +69,59 @@ - month = feb, - note = "\url{http://www.gnu.org/licenses/lgpl-2.1.html}" - } -+ -+@InProceedings{kadavasplos12, -+ author = "{Asim Kadav and Michael M. Swift}", -+ title = "{U}nderstanding {M}odern {D}evice {D}rivers", -+ booktitle = {ASPLOS}, -+ address = {London, UK}, -+ month = {March 3-7}, -+ year = {2012}, -+ note = "\url{http://pages.cs.wisc.edu/~kadav/study/}" -+} -+ -+@manual{SDV, -+ title = "{S}tatic {D}river {V}erifier", -+ organization = "{M}icrosoft / {M}icrosoft {R}easearch", -+ note = "\url{http://msdn.microsoft.com/en-us/library/windows/hardware/ff552808.aspx}" -+} -+ -+@InProceedings{safedrive, -+ author = "{Feng Zhou, Jeremy Condit, Zachary Anderson, and Ilya Bagrak; Rob Ennals; Matthew Harren, George Necula, and Eric Brewer}", -+ title = "SafeDrive: Safe and Recoverable Extensions Using Language-Based Techniques", -+ booktitle = "OSDI '06", -+ address = {Seattle, WA}, -+ month = {November 6-8}, -+ year = {2006}, -+ note = "\url{http://ivy.cs.berkeley.edu/safedrive/}" -+} -+ -+@InProceedings{symdrive, -+ author = "{Matthew J. Renzelmann, Asim Kadav, and Michael M. Swift}", -+ title = "SymDrive: Testing Drivers without Devices", -+ booktitle = "OSDI '12", -+ address = {Hollywood, CA}, -+ month = {October 8-10}, -+ year = {2012}, -+ note = "\url{http://research.cs.wisc.edu/sonar/projects/symdrive/index.shtml}" -+} -+ -+@phdthesis{Reveillere:these2001, -+ author = {R\'eveill\`ere, L.}, -+ title = {Approche langage au d\'eveloppement de pilotes de p\'eriph\'eriques robustes}, -+ school = {Universit{\'e} de Rennes~1, France}, -+ year = {2001}, -+ type = {Th\`{e}se de doctorat}, -+ month = {December}, -+ note = {\url{http://www.labri.fr/perso/reveille/publications/papers/reveillere-thesis.pdf}} -+} -+ -+@inproceedings{Ryzhyk_CKSH_09, -+ title = {Automatic Device Driver Synthesis with {Termite}}, -+ booktitle = {Proceedings of the 22\textsuperscript{nd} ACM Symposium on Operating Systems Principles}, -+ author = {Leonid Ryzhyk and Peter Chubb and Ihor Kuz and Le Sueur, Etienne and Gernot Heiser}, -+ year = {2009}, -+ month = {Oct}, -+ address = {Big Sky, MT, USA}, -+ note = {\url{http://ssrg.nicta.com.au/publications/papers/Ryzhyk_CKSH_09.pdf}} -+} -diff --git a/maintainers/latex/rathaxes.sty b/maintainers/latex/rathaxes.sty ---- a/maintainers/latex/rathaxes.sty -+++ b/maintainers/latex/rathaxes.sty -@@ -9,6 +9,7 @@ - \RequirePackage{libertine} - \RequirePackage{inconsolata} - \RequirePackage{tabularx} -+\RequirePackage{natbib} - \RequirePackage[fixlanguage]{babelbib} - \expandafter\RequirePackage[\@rtxlanguage]{babel} - -diff --git a/maintainers/latex/rtxslides.sty b/maintainers/latex/rtxslides.sty ---- a/maintainers/latex/rtxslides.sty -+++ b/maintainers/latex/rtxslides.sty -@@ -6,19 +6,31 @@ - \RequirePackage{inconsolata} - \RequirePackage[utf8]{inputenc} - \RequirePackage[T1]{fontenc} -+\RequirePackage[fixlanguage]{babelbib} - - \newcommand{\rtx}{Rathaxes} -+% Useful in tikz: -+\newcommand{\bgcolor}{black} -+\newcommand{\fgcolor}{white} -+\newcommand{\twitter}{\raisebox{-0.3ex}{\includegraphics[height=1em]{twitter-bird-dark-bgs}} \href{https://twitter.com/rathaxes}{@rathaxes}} - - \definecolor{rathaxesred}{RGB}{190,36,31} - \setbeamercolor{normal text}{fg=white,bg=black} - \setbeamercolor{structure}{fg=rathaxesred} - --\DeclareOption{reverse}{\setbeamercolor{normal text}{fg=black,bg=white}} -+\DeclareOption{reverse}{ -+\setbeamercolor{normal text}{fg=black,bg=white} -+\renewcommand{\bgcolor}{white} -+\renewcommand{\fgcolor}{black} -+\renewcommand{\twitter}{\raisebox{-0.3ex}{\includegraphics[height=1em]{twitter-bird-light-bgs}} \href{https://twitter.com/rathaxes}{@rathaxes}} -+} - \ProcessOptions\relax - - \setbeamerfont{abstract}{family=\rmfamily,shape=\itshape} - - \useoutertheme{infolines} -+\setbeamertemplate{navigation symbols}{} -+\setbeamertemplate{bibliography item}[text] - - \addtobeamertemplate{title page}{% - \begin{center}% -@@ -27,3 +39,10 @@ - \end{center}}{} - - \graphicspath{{@RATHAXES_SOURCE_DIR@/com/images/}} -+ -+\newcommand{\rtxbibliography}{% -+\bibliographystyle{abbrv} -+\scriptsize{ -+\bibliography{@RATHAXES_SOURCE_DIR@/doc/bibliography} -+} -+} diff -r 315f4f9697c6 -r 8e8aa342078b maintainers_fix_indentation_in_use_rathaxes.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/maintainers_fix_indentation_in_use_rathaxes.patch Thu Feb 28 23:30:59 2013 -0800 @@ -0,0 +1,20 @@ +# HG changeset patch +# Parent 73e1430ceb46483e9a1225b1414d53dfed9accbf +maintainers: fix identation in UseRathaxes.cmake + +diff --git a/maintainers/CMakeScripts/UseRathaxes.cmake b/maintainers/CMakeScripts/UseRathaxes.cmake +--- a/maintainers/CMakeScripts/UseRathaxes.cmake ++++ b/maintainers/CMakeScripts/UseRathaxes.cmake +@@ -221,9 +221,9 @@ + + ADD_CUSTOM_TARGET("${NAME}" ALL DEPENDS "${KERNEL_OBJECT_NAME}") + +-ELSE (${SYSTEM} MATCHES "Linux") +- MESSAGE(STATUS "Don't know how to build kernel modules for ${SYSTEM} (yet)") +-ENDIF (${SYSTEM} MATCHES "Linux") ++ ELSE (${SYSTEM} MATCHES "Linux") ++ MESSAGE(STATUS "Don't know how to build kernel modules for ${SYSTEM} (yet)") ++ ENDIF (${SYSTEM} MATCHES "Linux") + ENDFUNCTION(ADD_RATHAXES_LKM NAME RATHAXES_SOURCE) + + # Like FIND_PACKAGE but also search in the Rathaxes directories. Usage: diff -r 315f4f9697c6 -r 8e8aa342078b rathaxes_trying_to_fix_the_abstract_type_nightmare_in_e1000.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rathaxes_trying_to_fix_the_abstract_type_nightmare_in_e1000.patch Thu Feb 28 23:30:59 2013 -0800 @@ -0,0 +1,759 @@ +# HG changeset patch +# Parent 21cb4b0b59ebfc3350ded6f9cea2b44203437ab2 +diff --git a/rathaxes/samples/e1000/device.blt b/rathaxes/samples/e1000/device.blt +--- a/rathaxes/samples/e1000/device.blt ++++ b/rathaxes/samples/e1000/device.blt +@@ -18,7 +18,7 @@ + + map + { +- data: ${self}->data; ++ k_device: ((struct device *)${self}); + } + } + } +diff --git a/rathaxes/samples/e1000/device.rti b/rathaxes/samples/e1000/device.rti +--- a/rathaxes/samples/e1000/device.rti ++++ b/rathaxes/samples/e1000/device.rti +@@ -5,6 +5,6 @@ + decl data_types(); + chunk LKM::includes(); + method init(); +- attribute Builtin::symbol data; ++ attribute Builtin::symbol k_device; + } + } +diff --git a/rathaxes/samples/e1000/e1000.blt b/rathaxes/samples/e1000/e1000.blt +--- a/rathaxes/samples/e1000/e1000.blt ++++ b/rathaxes/samples/e1000/e1000.blt +@@ -249,7 +249,6 @@ + { + int bars; + unsigned char /* __iomem */ *ioaddr; +- int irq; + + ${e1000::RxRing} rx_ring; + ${e1000::TxRing} tx_ring; +@@ -267,14 +266,12 @@ + + chunk Ethernet::adapter_init_context(Ethernet::Device rtx_ether_ctx, + Builtin::number bars, +- Builtin::symbol ioaddr, +- Builtin::number irq) ++ Builtin::symbol ioaddr) + { + { + ${e1000::Context} *hw_ctx = &${rtx_ether_ctx}->hw_ctx; + hw_ctx->bars = ${bars}; + hw_ctx->ioaddr = ${ioaddr}; +- hw_ctx->irq = ${irq}; + } + } + +@@ -606,68 +603,6 @@ + } + } + +- template sequence e1000::setup_interrupt_handler(Ethernet::Device rtx_ether_ctx) +- { +- chunk LKM::includes() +- { +- #include +- } +- +- chunk LKM::prototypes() +- { +- static int e1000_setup_interrupt_handler(${Ethernet::Device} *); +- } +- +- chunk LKM::code() +- { +- static int e1000_setup_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx) +- { +- int error; +- +- error = request_irq(rtx_ether_ctx->hw_ctx.irq, +- rtx_ethernet_interrupt_handler, +- IRQF_SHARED, +- ${config.name}, +- rtx_ether_ctx); +- +- if (error) +- ${Log::info("cannot register the interrupt handler")}; +- +- return error; +- } +- } +- +- chunk ::CALL() +- { +- int error = e1000_setup_interrupt_handler(${rtx_ether_ctx}); +- if (error) +- { +- return error; +- } +- } +- } +- +- template sequence free_interrupt_handler(Ethernet::Device rtx_ether_ctx) +- { +- chunk prototypes() +- { +- static void e1000_free_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx); +- } +- +- chunk code() +- { +- static void e1000_free_interrupt_handler(${Ethernet::Device} *rtx_ether_ctx) +- { +- free_irq(rtx_ether_ctx->hw_ctx.irq, rtx_ether_ctx); +- } +- } +- +- chunk ::CALL() +- { +- e1000_free_interrupt_handler(${rtx_ether_ctx}); +- } +- } +- + template sequence activate_device_interruption(Ethernet::Device rtx_ether_ctx) + { + chunk ::CALL() +@@ -816,12 +751,10 @@ + * Allocate the skbuffs, map them for DMA, and write their address + * in the corresponding descriptor. + */ +- ${Ethernet::AbstractDevice} *rtx_ether_dev = ${rtx_ether_ctx.net_device}; +- ${cast local.rtx_ether_dev as Ethernet::AbstractDevice}; + for (i = 0; i != ${config.rx_ring_size}; ++i) + { +- hw_ctx->rx_ring.skbuffs[i].skbuff = (${Socket::AbstractSKBuff}*) netdev_alloc_skb( +- &${rtx_ether_dev.netdev}, ++ hw_ctx->rx_ring.skbuffs[i].skbuff = (${Socket::AbstractSKBuff}*)netdev_alloc_skb( ++ ${rtx_ether_ctx.net_device}, + ${config.rx_buffer_len}); + if (!hw_ctx->rx_ring.skbuffs[i].skbuff) + { +@@ -830,7 +763,7 @@ + } + hw_ctx->rx_ring.skbuffs[i].dma_handle = dma_map_single( + &${rtx_ether_ctx.device}, +- &hw_ctx->rx_ring.skbuffs[i].skbuff->data, ++ (struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff, /* XXX leaking cast */ + ${config.rx_buffer_len}, + DMA_FROM_DEVICE); + int dma_error = dma_mapping_error(&${rtx_ether_ctx.device}, +@@ -933,7 +866,8 @@ + ${config.rx_buffer_len}, + DMA_FROM_DEVICE); + err_skbuffs_map: +- dev_kfree_skb(&hw_ctx->rx_ring.skbuffs[i].skbuff->data); ++ /* XXX leaking cast: */ ++ dev_kfree_skb((struct sk_buff *)hw_ctx->rx_ring.skbuffs[i].skbuff); + } + + dma_free_coherent(&${rtx_ether_ctx.device}, hw_ctx->rx_ring.size, +@@ -1042,9 +976,9 @@ + + ${Log::info("xmit: skbuff details:")}; + /* +- * skb is not expand on the bound C variable (should be rtx_skbuff), +- * which is funny because it works for the sequence template call +- * right after. ++ * skb does not expand on the bound C variable (should be ++ * rtx_skbuff), which is funny because it works for the ++ * sequence template call right after. + */ + /* + * XXX: doesn't work (I tried to pass self explicitely too): +@@ -1077,8 +1011,8 @@ + + /* 2. Map the data */ + +- /* XXX: ${local.skb.map_to(local.devp)}; */ +- if (rtx_socket_skbuff_map(&skb, &${devp.data}, DMA_TO_DEVICE)) ++ /* XXX: ${local.skb.map_to(devp.k_device)}; */ ++ if (rtx_socket_skbuff_map(&skb, ${devp.k_device}, DMA_TO_DEVICE)) + { + ${Log::info("xmit: can't DMA map a SKbuff")}; + goto err_skb_map_to; +@@ -1097,7 +1031,7 @@ + err_offload: + err_skb_map_to: + /* XXX: ${local.skb.unmap_to_and_free(local.dev)}; */ +- rtx_socket_skbuff_unmap_and_free(&skb, &${devp.data}, DMA_TO_DEVICE); ++ rtx_socket_skbuff_unmap_and_free(&skb, &${devp.k_device}, DMA_TO_DEVICE); + return NETDEV_TX_OK; + } + } +diff --git a/rathaxes/samples/e1000/e1000.rti b/rathaxes/samples/e1000/e1000.rti +--- a/rathaxes/samples/e1000/e1000.rti ++++ b/rathaxes/samples/e1000/e1000.rti +@@ -13,8 +13,7 @@ + /* Callbacks/Hooks which should probably be in the front-end: */ + chunk Ethernet::adapter_init_context(Ethernet::Device, + Builtin::number, +- Builtin::symbol, +- Builtin::number); ++ Builtin::symbol); + chunk Ethernet::adapter_reset(Ethernet::Device); + chunk Ethernet::adapter_load_mac_address(Ethernet::Device); + } +@@ -85,21 +84,6 @@ + provided chunk ::CALL(); + } + +- provided sequence setup_interrupt_handler(Ethernet::Device) +- { +- provided chunk LKM::includes(); // works without this one +- provided chunk LKM::prototypes(); +- provided chunk LKM::code(); +- provided chunk ::CALL(); +- } +- +- provided sequence free_interrupt_handler(Ethernet::Device) +- { +- provided chunk LKM::prototypes(); +- provided chunk LKM::code(); +- provided chunk ::CALL(); +- } +- + provided sequence activate_device_interruption(Ethernet::Device) + { + provided chunk ::CALL(); +diff --git a/rathaxes/samples/e1000/ethernet.blt b/rathaxes/samples/e1000/ethernet.blt +--- a/rathaxes/samples/e1000/ethernet.blt ++++ b/rathaxes/samples/e1000/ethernet.blt +@@ -1,4 +1,4 @@ +-with Ethernet, PCI, LKM, Log ++with Ethernet, PCI, LKM, Log, Builtin + { + template type Ethernet::ProtocolId() + { +@@ -51,7 +51,7 @@ + { + decl data_types() + { +- struct net_device ndev; ++ struct net_device data; + } + + chunk LKM::includes() +@@ -59,9 +59,15 @@ + #include + } + ++ method init(Builtin::symbol dev) ++ { ++ ${self} = (${Ethernet::AbstractDevice} *)${dev}; ++ } ++ + map + { +- netdev: ${self}->ndev; ++ k_net_dev: ((struct net_device *)${self}); ++ rtx_ether_ctx: netdev_priv((struct net_device *)${self}); + } + } + +@@ -88,29 +94,43 @@ + #include + } + +- method init(Ethernet::AbstractDevice net_dev, PCI::AbstractDevice pci_dev) ++ /* XXX: if the first arg is not called rtx_net_dev, it breaks. */ ++ method init(Ethernet::AbstractDevice rtx_net_dev, PCI::AbstractDevice pci_dev) + { +- ${self} = netdev_priv(&${net_dev.netdev}); ++ ${self} = ${rtx_net_dev.rtx_ether_ctx}; + /* + * We can use -> because we know that ${self} will be always a + * pointer, but the ambiguity sucks. + */ + ${self}->pci_dev = ${pci_dev}; +- ${self}->net_dev = ${net_dev}; ++ ${self}->net_dev = ${rtx_net_dev}; + } + + map + { +- device: ${self}->pci_dev->data.dev; ++ /* ++ * XXX: I'd like to be able to do things like: ++ * device: ${self.pci_dev.k_pci_dev}->dev; ++ * ++ * Btw, should this be ${PCI::AbstractDevice} instead of directly ++ * struct pci_dev? ++ */ ++ device: ((struct pci_dev *)(${self})->pci_dev)->dev; + pci_device: ${self}->pci_dev; + net_device: ${self}->net_dev; +- perm_addr: ${self}->net_dev->ndev.perm_addr; +- dev_addr: ${self}->net_dev->ndev.dev_addr; ++ perm_addr: ((struct net_device *)(${self})->net_dev)->perm_addr; ++ dev_addr: ((struct net_device *)(${self})->net_dev)->dev_addr; ++ irq: ((struct pci_dev *)(${self})->pci_dev)->irq; + } + } + + template sequence Ethernet::open(Ethernet::Device dev) + { ++ chunk LKM::includes() ++ { ++ #include ++ } ++ + chunk LKM::prototypes() + { + static int rtx_ethernet_open(struct net_device *); +@@ -120,12 +140,40 @@ + { + static int rtx_ethernet_open(struct net_device *dev) + { +- ${Ethernet::Device} *rtx_ether_ctx = netdev_priv(dev); ++ /* ++ * XXX The casts are here because the compiler doesn't resolve ++ * "enclosed" type (e.g: local.var.enclosed) correctly. ++ */ ++ ${Ethernet::AbstractDevice} *rtx_net_dev; ++ ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; ++ { /* XXX: I end up with a placeholder if I don't open a scope */ ++ ${local.rtx_net_dev.init(local.dev)}; ++ } + ++ ${Ethernet::Device} *rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; + ${cast local.rtx_ether_ctx as Ethernet::Device}; ++ ++ int error; ++ { ++ ${Log::info("installing the interrupt handler")}; ++ } ++ error = request_irq(${local.rtx_ether_ctx.irq}, ++ rtx_ethernet_interrupt_handler, ++ IRQF_SHARED, ++ ${config.name}, ++ ${local.rtx_net_dev.k_net_dev}); ++ if (error) ++ { ++ ${Log::info("Cannot register the interrupt handler")}; ++ goto error; ++ } ++ + ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; + + return 0; ++ ++ error: ++ return error; + } + } + } +@@ -162,11 +210,23 @@ + { + static int rtx_ethernet_close(struct net_device *dev) + { +- ${Ethernet::Device} *rtx_ether_ctx = netdev_priv(dev); ++ ${Ethernet::AbstractDevice} *rtx_net_dev; ++ ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; ++ { /* XXX: I end up with a placeholder if I don't open a scope */ ++ ${local.rtx_net_dev.init(local.dev)}; ++ } + ++ ${Ethernet::Device} *rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; + ${cast local.rtx_ether_ctx as Ethernet::Device}; ++ ++ /* TODO: change this pointcut into a pointcut/adapter/callback: */ + ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; + ++ free_irq(${local.rtx_ether_ctx.irq}, ${local.rtx_net_dev.k_net_dev}); ++ { ++ ${Log::info("interrupt handler free'ed")}; ++ } ++ + return 0; + } + } +@@ -187,9 +247,13 @@ + { + static enum irqreturn rtx_ethernet_interrupt_handler(int irq, void *dev_id) + { +- ${Ethernet::Device} *rtx_ether_ctx = dev_id; ++ ${Ethernet::AbstractDevice} *rtx_net_dev = dev_id; ++ ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; + ++ ${Ethernet::Device} *rtx_ether_ctx; + ${cast local.rtx_ether_ctx as Ethernet::Device}; ++ rtx_ether_ctx = ${local.rtx_net_dev.rtx_ether_ctx}; ++ + ${pointcut ::IMPLEMENTATION(local.rtx_ether_ctx)}; + + return IRQ_NONE; +@@ -219,23 +283,26 @@ + */ + chunk PCI::pci_probe_hook(PCI::Device rtx_pci_dev) + { ++ ${Ethernet::AbstractDevice} *rtx_net_dev; + ${Ethernet::Device} *rtx_ether_ctx; +- ${Ethernet::AbstractDevice} *net_dev; +- ${cast local.net_dev as Ethernet::AbstractDevice}; ++ ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; + +- net_dev = (${Ethernet::AbstractDevice}*) alloc_etherdev(sizeof(*rtx_ether_ctx)); +- if (!net_dev) ++ /* Cast the result back into our "transparent wrapper" type */ ++ rtx_net_dev = (${Ethernet::AbstractDevice}*)alloc_etherdev(sizeof(*rtx_ether_ctx)); ++ if (!rtx_net_dev) + { + ${Log::info("cannot allocate the ethernet device context")}; + error = -ENOMEM; + goto fail; + } +- SET_NETDEV_DEV(&${local.net_dev.netdev}, ${rtx_pci_dev.device}); +- strlcpy(${local.net_dev.netdev}.name, ${config.ifname}, sizeof(${local.net_dev.netdev}.name)); +- ${local.net_dev.netdev}.irq = ${rtx_pci_dev.irq}; +- ${local.net_dev.netdev}.netdev_ops = &rtx_ether_ops; ++ SET_NETDEV_DEV(${local.rtx_net_dev.k_net_dev}, ${rtx_pci_dev.device}); ++ strlcpy(${local.rtx_net_dev.k_net_dev}->name, ++ ${config.ifname}, ++ sizeof(${local.rtx_net_dev.k_net_dev}->name)); ++ ${local.rtx_net_dev.k_net_dev}->irq = ${rtx_pci_dev.irq}; ++ ${local.rtx_net_dev.k_net_dev}->netdev_ops = &rtx_ether_ops; + +- error = register_netdev(&${local.net_dev.netdev}); ++ error = register_netdev(${local.rtx_net_dev.k_net_dev}); + if (error) + { + ${Log::info("cannot register the driver in the net subsystem")}; +@@ -247,14 +314,11 @@ + * XXX: the cast is here because the compiler resolve the + * type of rtx_pci_dev.pci_device to the type of + * rtx_pci_dev instead of the type of rtx_pci_dev.pci_device. +- * +- * Also, I'm getting placeholder in the generated code if +- * I don't open a scope here. + */ +- { +- ${PCI::AbstractDevice} *rtx_pdev = ${rtx_pci_dev.pci_device}; +- ${cast local.rtx_pdev as PCI::AbstractDevice}; +- ${local.rtx_ether_ctx.init(local.net_dev, local.rtx_pdev)}; ++ ${PCI::AbstractDevice} *workaround = ${rtx_pci_dev.pci_device}; ++ ${cast local.workaround as PCI::AbstractDevice}; ++ { /* XXX: I end up with a placeholder if I don't open a scope */ ++ ${local.rtx_ether_ctx.init(local.rtx_net_dev, local.workaround)}; + } + + /* Register ourselves in the parent context: */ +@@ -267,19 +331,16 @@ + */ + int bars = ${rtx_pci_dev.bars}; + unsigned char /* __iomem */ *ioaddr = ${rtx_pci_dev.ioaddr}; +- int irq = ${rtx_pci_dev.irq}; + ${cast local.bars as Builtin::number}; +- ${cast local.irq as Builtin::number}; + ${cast local.rtx_ether_ctx as Ethernet::Device}; + ${pointcut Ethernet::adapter_init_context(local.rtx_ether_ctx, + local.bars, +- local.ioaddr, +- local.irq)}; ++ local.ioaddr)}; + ${pointcut Ethernet::adapter_reset(local.rtx_ether_ctx)}; + ${pointcut Ethernet::adapter_load_mac_address(local.rtx_ether_ctx)}; + memcpy(${local.rtx_ether_ctx.perm_addr}, + ${local.rtx_ether_ctx.dev_addr}, +- ${local.net_dev.netdev}.addr_len); ++ ${local.rtx_net_dev.k_net_dev}->addr_len); + } + + /* This chunk should be removed (see #26) */ +@@ -296,15 +357,15 @@ + */ + chunk PCI::pci_remove_hook(PCI::Device rtx_pci_dev) + { +- ${Ethernet::Device} *rtx_ether_ctx = ${rtx_pci_dev.context}; +- ${Ethernet::AbstractDevice} *rtx_ether_dev = (${Ethernet::AbstractDevice}*) ${local.rtx_ether_ctx.net_device}; +- ++ ${Ethernet::Device} *rtx_ether_ctx = ${rtx_pci_dev.rtx_drv_context}; ++ ${cast local.rtx_ether_ctx as Ethernet::Device}; /* XXX */ + BUG_ON(!rtx_ether_ctx); + +- ${cast local.rtx_ether_ctx as Ethernet::Device}; +- ${cast local.rtx_ether_dev as Ethernet::AbstractDevice}; +- unregister_netdev(&${local.rtx_ether_dev.netdev}); +- free_netdev(&${local.rtx_ether_dev.netdev}); ++ ${Ethernet::AbstractDevice} *rtx_net_dev = ${local.rtx_ether_ctx.net_device}; ++ ${cast local.rtx_net_dev as Ethernet::AbstractDevice}; /* XXX */ ++ ++ unregister_netdev(${local.rtx_net_dev.k_net_dev}); ++ free_netdev(${local.rtx_net_dev.k_net_dev}); + } + + /* This chunk should be removed (see #26) */ +diff --git a/rathaxes/samples/e1000/ethernet.rti b/rathaxes/samples/e1000/ethernet.rti +--- a/rathaxes/samples/e1000/ethernet.rti ++++ b/rathaxes/samples/e1000/ethernet.rti +@@ -16,8 +16,15 @@ + provided type AbstractDevice + { + chunk LKM::includes(); ++ method init(Builtin::symbol); + decl data_types(); +- attribute Builtin::symbol netdev; ++ ++ attribute Builtin::symbol k_net_dev; ++ /* ++ * XXX: should be a Ethernet::Device, but that causes a circular ++ * dependency. ++ */ ++ attribute Builtin::symbol rtx_ether_ctx; + } + + provided type Device +@@ -34,12 +41,14 @@ + * I'd like to use better names here, but I'd like to understand the + * difference between the two first: + */ +- attribute Builtin::symbol perm_addr; +- attribute Builtin::symbol dev_addr; ++ attribute Builtin::symbol perm_addr; ++ attribute Builtin::symbol dev_addr; ++ attribute Builtin::symbol irq; + } + + required sequence open(Ethernet::Device) + { ++ provided chunk LKM::includes(); + provided chunk LKM::prototypes(); + provided chunk LKM::code(); + } +@@ -69,8 +78,7 @@ + + provided pointcut Ethernet::adapter_init_context(Ethernet::Device, + Builtin::number, +- Builtin::symbol, +- Builtin::number); ++ Builtin::symbol); + provided pointcut Ethernet::adapter_reset(Ethernet::Device); + provided pointcut Ethernet::adapter_load_mac_address(Ethernet::Device); + } +diff --git a/rathaxes/samples/e1000/lkm.rtx b/rathaxes/samples/e1000/lkm.rtx +--- a/rathaxes/samples/e1000/lkm.rtx ++++ b/rathaxes/samples/e1000/lkm.rtx +@@ -4,13 +4,6 @@ + { + Log::info("opening the device"); + +- /* +- * Maybe e1000::create_device should be called from here, to be +- * more coherent. +- */ +- +- e1000::setup_interrupt_handler(dev); +- Log::info("interrupt handler installed"); + + e1000::set_up_device(dev); + Log::info("device activated"); +@@ -32,9 +25,6 @@ + */ + e1000::free_rx_tx(dev); + Log::info("free'ed up rx/tx resources"); +- +- e1000::free_interrupt_handler(dev); +- Log::info("interrupt handler free'ed"); + } + + Ethernet::interrupt_handler(Ethernet::Device dev) +diff --git a/rathaxes/samples/e1000/pci.blt b/rathaxes/samples/e1000/pci.blt +--- a/rathaxes/samples/e1000/pci.blt ++++ b/rathaxes/samples/e1000/pci.blt +@@ -16,15 +16,15 @@ + { + } + +- method set_context(Builtin::symbol ctx) ++ method set_rtx_context(Builtin::symbol ctx) + { +- pci_set_drvdata(&${self}->data, ${ctx}); ++ pci_set_drvdata(${self.k_pci_dev}, ${ctx}); + } + + map + { +- data: ${self}->data; +- drv_data: pci_get_drvdata(&${self}->data); ++ k_pci_dev: ((struct pci_dev *)${self}); ++ rtx_pci_ctx: pci_get_drvdata((struct pci_dev *)${self}); + } + } + +@@ -52,13 +52,13 @@ + int error; + ${PCI::AbstractDevice} *enable_pdev = self->pdev; + ${cast local.enable_pdev as PCI::AbstractDevice}; +- error = pci_enable_device(&${local.enable_pdev.data}); ++ error = pci_enable_device(${local.enable_pdev.k_pci_dev}); + if (error) + return error; +- error = pci_request_selected_regions(&${local.enable_pdev.data}, self->bars, ${config.name}); ++ error = pci_request_selected_regions(${local.enable_pdev.k_pci_dev}, self->bars, ${config.name}); + if (error) + return error; +- pci_set_master(&${local.enable_pdev.data}); ++ pci_set_master(${local.enable_pdev.k_pci_dev}); + return 0; + } + +@@ -68,8 +68,8 @@ + ${cast local.disable_pdev as PCI::AbstractDevice}; + if (self->ioaddr) + iounmap(self->ioaddr); +- pci_release_selected_regions(&${local.disable_pdev.data}, self->bars); +- pci_disable_device(&${local.disable_pdev.data}); ++ pci_release_selected_regions(${local.disable_pdev.k_pci_dev}, self->bars); ++ pci_disable_device(${local.disable_pdev.k_pci_dev}); + } + } + +@@ -78,7 +78,7 @@ + ${PCI::AbstractDevice} * workaround = (${PCI::AbstractDevice}*)pdev; + ${cast local.workaround as PCI::AbstractDevice}; + ${self}->pdev = ${pdev}; +- ${self}->bars = pci_select_bars(&${local.workaround.data}, IORESOURCE_MEM); ++ ${self}->bars = pci_select_bars(${local.workaround.k_pci_dev}, IORESOURCE_MEM); + ${self}->ioaddr = NULL; + ${self}->context = NULL; + } +@@ -97,18 +97,18 @@ + { + ${PCI::AbstractDevice} *select_ioaddr_pdev = ${self}->pdev; + ${cast local.select_ioaddr_pdev as PCI::AbstractDevice}; +- ${self}->ioaddr = pci_ioremap_bar(&${local.select_ioaddr_pdev.data}, ${bar}); ++ ${self}->ioaddr = pci_ioremap_bar(${local.select_ioaddr_pdev.k_pci_dev}, ${bar}); + } + +- method set_context(Builtin::symbol ctx) ++ method set_rtx_drv_context(Builtin::symbol ctx) + { + ${self}->context = ctx; + } + + map + { +- context: ${self}->context; +- device: &${self}->pdev->data.dev; ++ rtx_drv_context: ${self}->context; ++ device: &((struct pci_dev *)(${self})->pdev->dev); + pci_device: ${self}->pdev; + irq: ${self}->pdev->data.irq; + bars: ${self}->bars; +@@ -151,7 +151,7 @@ + ${local.rtx_pci_dev.init(local.rtx_pdev)}; + } + +- /* ${local.pdev.set_context(local.rtx_pci_dev)}; */ ++ /* ${local.pdev.set_rtx_context(local.rtx_pci_dev)}; */ + pci_set_drvdata(pdev, rtx_pci_dev); + + /* ${local.rtx_pci_dev.enable()}; */ +@@ -184,7 +184,7 @@ + return 0; + + fail: +- /* ${local.pdev.set_context(NULL)}; */ ++ /* ${local.pdev.set_rtx_drv_context(NULL)}; */ + pci_set_drvdata(pdev, NULL); + kfree(rtx_pci_dev); + return error; +@@ -210,7 +210,7 @@ + { + ${PCI::AbstractDevice} *rtx_pdev = (${PCI::AbstractDevice}*)pdev; + ${cast local.rtx_pdev as PCI::AbstractDevice}; +- ${PCI::Device} *rtx_pci_dev = ${rtx_pdev.drv_data}; ++ ${PCI::Device} *rtx_pci_dev = ${rtx_pdev.rtx_pci_ctx}; + + BUG_ON(!rtx_pci_dev); + +diff --git a/rathaxes/samples/e1000/pci.rti b/rathaxes/samples/e1000/pci.rti +--- a/rathaxes/samples/e1000/pci.rti ++++ b/rathaxes/samples/e1000/pci.rti +@@ -10,10 +10,15 @@ + + chunk LKM::includes(); + method init(PCI::AbstractDevice); +- method set_context(Builtin::symbol); ++ /* ++ * XXX: the argument should be a PCI::Device but that causes a circular ++ * dependency: ++ */ ++ method set_rtx_context(Builtin::symbol); + +- attribute Builtin::symbol data; +- attribute Builtin::symbol drv_data; ++ attribute Builtin::symbol k_pci_dev; ++ /* XXX: should be PCI::Device (see above point) */ ++ attribute Builtin::symbol rtx_pci_ctx; + } + + provided type PCI::Device +@@ -27,9 +32,9 @@ + method enable(); + method disable(); + method select_ioaddr(Builtin::number); +- method set_context(Builtin::symbol); ++ method set_rtx_drv_context(Builtin::symbol); + +- attribute Builtin::symbol context; ++ attribute Builtin::symbol rtx_drv_context; + attribute Device::AbstractDevice device; + attribute PCI::AbstractDevice pci_device; + attribute Builtin::symbol ioaddr; +diff --git a/rathaxes/samples/e1000/socket.blt b/rathaxes/samples/e1000/socket.blt +--- a/rathaxes/samples/e1000/socket.blt ++++ b/rathaxes/samples/e1000/socket.blt +@@ -14,7 +14,7 @@ + + map + { +- data: ${self}->data; ++ k_sk_buff: ((struct sk_buff *)${self}); + } + } + +@@ -131,22 +131,22 @@ + + method map_to(Device::AbstractDevice dev) + { +- rtx_socket_skbuff_map(${self}, &${dev.data}, DMA_TO_DEVICE); ++ rtx_socket_skbuff_map(${self}, ${dev.k_device}, DMA_TO_DEVICE); + } + + method map_from(Device::AbstractDevice dev) + { +- rtx_socket_skbuff_map(${self}, &${dev.data}, DMA_FROM_DEVICE); ++ rtx_socket_skbuff_map(${self}, ${dev.k_device}, DMA_FROM_DEVICE); + } + + method unmap_to_and_free(Device::AbstractDevice dev) + { +- rtx_socket_skbuff_unmap_and_free(${self}, &${dev.data}, DMA_TO_DEVICE); ++ rtx_socket_skbuff_unmap_and_free(${self}, ${dev.k_device}, DMA_TO_DEVICE); + } + + method unmap_from_and_free(Device::AbstractDevice dev) + { +- rtx_socket_skbuff_unmap_and_free(${self}, &${dev.data}, DMA_FROM_DEVICE); ++ rtx_socket_skbuff_unmap_and_free(${self}, ${dev.k_device}, DMA_FROM_DEVICE); + } + + map +diff --git a/rathaxes/samples/e1000/socket.rti b/rathaxes/samples/e1000/socket.rti +--- a/rathaxes/samples/e1000/socket.rti ++++ b/rathaxes/samples/e1000/socket.rti +@@ -5,7 +5,7 @@ + { + chunk LKM::includes(); + decl data_types(); +- attribute Builtin::symbol data; ++ attribute Builtin::symbol k_sk_buff; + } + + provided type SKBuff diff -r 315f4f9697c6 -r 8e8aa342078b series --- a/series Thu Jan 31 19:35:47 2013 +0100 +++ b/series Thu Feb 28 23:30:59 2013 -0800 @@ -1,1 +1,2 @@ -com_add_slides_for_the_fosdem_presentation.patch +maintainers_fix_indentation_in_use_rathaxes.patch +rathaxes_trying_to_fix_the_abstract_type_nightmare_in_e1000.patch