From 9e759bcfa0a03385d29b8448965e0aed9171b282 Mon Sep 17 00:00:00 2001 From: Deb Taylor Date: Mon, 23 Sep 2019 11:05:18 -0400 Subject: [PATCH] Initial virtio i2c doc and images. Signed-off-by: Deb Taylor --- doc/develop.rst | 1 + doc/tutorials/images/virtio-i2c-1.png | Bin 0 -> 45501 bytes doc/tutorials/images/virtio-i2c-2.png | Bin 0 -> 13511 bytes doc/tutorials/virtio_i2c.rst | 117 ++++++++++++++++++++++++++ 4 files changed, 118 insertions(+) create mode 100644 doc/tutorials/images/virtio-i2c-1.png create mode 100644 doc/tutorials/images/virtio-i2c-2.png create mode 100644 doc/tutorials/virtio_i2c.rst diff --git a/doc/develop.rst b/doc/develop.rst index 09d51c291..634940ead 100644 --- a/doc/develop.rst +++ b/doc/develop.rst @@ -64,6 +64,7 @@ Enable ACRN Features tutorials/open_vswitch tutorials/rtvm_workload_design_guideline tutorials/sgx_virtualization + tutorials/virtio_i2c tutorials/skl-nuc tutorials/using_cat_on_up2 tutorials/using_sbl_on_up2 diff --git a/doc/tutorials/images/virtio-i2c-1.png b/doc/tutorials/images/virtio-i2c-1.png new file mode 100644 index 0000000000000000000000000000000000000000..edd4b41636729985326dfa3491eb277c09a88add GIT binary patch literal 45501 zcmcG#bySsY^9G8Fgh+2n0j1e=r+@;R+~lS~kZzD}P?}AHbV)ZzNQcthozmScbsqG6 zzwcYW|IS+HEOkjf_x(&V;0z~`tRCDiQ@5OC}t{ykbSdgTm!Q&Cd% zoszTm-mU3JkZMy?FpkagLIuS@z)s-FlKtF?AM>P>_+>|JnBXvW)rwg1{Qcg!)vR-e zrNs-MJ*0-8PpTfV59+aeKz~ifAt&+pGZJFdTNG9`BeoAL72h6-=zkO$MdG%y$hf{^ zn=B}bDP*fCFJP;%HEgtg^C*U1wWLRbS3pBqopV(O#ryTcUp>5d@_#-e`R_;lp!@Lq zgH{nN#CMOMr#MdWqP!y~(o(}-({s|8fJPd5oy4UfAiQSTtZW^4hl11ntL533*8R%o zFhm4{NAcu1dk(F_tTwa>OcK#vf}9_Iv#^4ENOy!Hv~eY&M{ zin2%9tZgq$hy2>|zmL=d@qW9RtUS^?8eH{eZ7-Od-U(de?!Cs{Mm&%Dyg0P3zwsI| z$iM_M?))nG>lLHxQYlwG(*=>1ilVo+;G#$WXE0r`=P%Uj)1c{Q1xJDn;)kugPrMDCiR)+VCl#hnlqs^+)I zkXDR7{1O>c{8jZN8Y70S{Q@Td{5(7vJI@ZR~Bf6P#g2(1IA@lZ! zEWRQVf?e5}!PNS(TbB(gJol2ut{IffM6^#Wr5rJYBP9IKKbocuqRu5`c(R43oNpEA zYRM=z+N%5XN+rsx{(XVE&HDP(wnnYl>lJG8O>x;GUlPxb;XI1&S3-I&z4*wrZxFga zdTP_-q)z(U|KM*l_=;bNJ^ja=W?Hj71Zh4R!ha{s**{v&@?0xNjEmt&m;F^=%F6=z zz9b$-s>@u>gW=G)(us843sn@zmrn~Jk5KENYCg-*eySdE}PHg6W%-ibOg5Q!Jn3n51fmf|sCnD*9= zNFx=zOA1Tz!J>>x7tos7uzReUL#xf;ORwOn%7pe&T@u%I%l(2AIfszQw|Qi0->SKE zme|^xWSg-qeESQO^}BvZaaD@cj8L5aVbq%X>)oN)|24TE+2HLq@nheeuvWab@8IR~ zDC*Oms|Pi)@@;0GTHHGd;#h=pH)`?Mg&@1DWPmm9Yhzbk7;X42&o&&Kncq5hzhyP) zE&CtEf1TA{mYiLBlXewDkFBLL;-k&`$BxC2j!J1an)7zU$pydUF*A{ttP3IUVP;Vd znuqQ!MoMZ*?`*y0`O4V&$9;!Lnf6Xp9dD8s@6FN zd7_|t(Uh%-^00k>R@T~a=RArTHMy7}GJneT`LyHnTul`yZRfJV@mmacn)vBxXib!) z4x9Y58OL2>-`A1P_m)Nk)95!R(T*xhF_|P(u|(SYj1tykdLIKPebVOt>w;+fFIFUP zUIvojm7#PNw;pwbGv#x3gE*m~N#XRf8xCy^AS#=mtAOI4SPK1*;;H&J?4nCd+n6|9 zS8KPlYApai;M_brdGIs@#$x(xG>ja1JjPKlfBZ}AUOOrHJ+fVY+3a&k5;@pt`ja1?9+AEP;CW)7AA&$|X{vA0hvH})o;&(*qx%TWk-frPYY z?GECu-T83-D`wjs5I>UaTJ`fo)Hb>uM|bt6HLSEi(f>YXjoGTec0L zk@P6AqlZn|*E0mx{4BfO+?V$?S(1E)2nZu9F;90k;}hk_IxxyY)6i2J&ok{2kVN+5 zm)Y63N17s^R!hHB*w;3VCzr=~3XNpaU@xc=;w^SPJ>CX?Z*Lpvhg{7*3%*91cy$dz zh~Uk3d$t*`v7p?BQC8-sEGJu-s95#An#7MAfzvBsp}I3G$iE-V@FtymQOe zg}>!(F^3zM-l~mxenJEeIN>fS;s3(?eii}YZrGVpsMKS;jT3LMuSk2WW@ocqa|C-E zmj$x%%h7bh_x{ht!Xgrv6N_~kc&e?W9C#72KkW+l@D!G<`qh3jB-=7~!ST4a;)lvVp@6&UU z;;1k!OyCieMT|L0U}wxbKG)ko_kfFQS9DJ)}Wjc52#&`b|H~b-530L4J8=N zWU-su8*cyZF@kTj3!^zTsOtBT3?B<5phhPPNoQv-zKKGIxoEbV#vA?NC|amZf2_!m zD8iVx!EkuwgJ`sv*qqlofa?&-*kdG+Uy-Mwu&_YB5>IotpFi1H_+2Shhw=!a1@rdv z#+5O?E*!(AR^lpF1hC+48my#U0Z$u8W#)f=N1dzvJx$4-jj81dwmTO#0#&-uNkiky z7de|)al!5lRU1FHdfgwFbvtn%G}L_*`1d4^_KHc*n^tds_@lWkV(qC(W^AQ9Pv zxHtmteGj{7>g^v|Mq|t9CuU9##FrY|X`7LpFs<6H3R4He5h`SZIQVC8?BK~Jb$NI= zVjjjVx>(cY?(Xpi|Ib_Da7n6^5!O`F2g}f+42^x?IlbJM8Jtr$Q>5mLRLNIn@|aHL zWS-!5mv(ljH|pHQkH>AVQ*Ht?WWZcQaad(>WGCK>cj>dE zM$>iTN-0<|O^~vzF#A}tte8c*=-bWiz?S8=NvMB`6cV#7q zgQIftf|6SUGg83YcLYh;)~z|5Az=Slm+!ZB6P30K!g}foqpbPPg=4A;O&^y_qM8HN<4=4QY!bl{;U?^dtZCCbHn!#K|V9 zx{*&7?-C{0K9en=oY=H(J4sDS_$?^T=^S=a$&5s%B01(}Z9*hr9OxLwD5RSo;I?|> zl~S(D9VoEpH0*_rtCLpiM!xZ|`4LV}!=(QnkO^Kc-jI)MF8+85SF{N063LP9!U3Lq z+>)H=vtcdK=~e&)=nMiXnMlbr7s8JRsp#;yrF_|QZatY^>44eU(XrNRr4xYcRE6*F`4(X9`(HqfS?ORVf+L+z@r)f5 z60dPZ8=-}UeUbRXy`gok%b|o0DQj#imx~Jc>2ZK-7QCHrPeCbrb{77>5*jF+-MXm% z@B`gtudoCE>Ux?Ji%YP8?yBZzsb+ed6P^rh&uKK@g950~WdJx*L6m4W$jJWG7Rd~Ivwrj^M_-BRLfaIjfy zT>b`X&J@cLnOxCup(BIvEybCd!8d-!YZLfb(#ZHzMCg3_&7#+C9KGllqRdyM$IfL+ z@kH(67(~aL_W3MW+S;p=DbR#8`aQsTm7Xt=53&E|*s=Z7oas2?1M}P`l!fI?*s52im>v zqpb3xw^>jdDa$gsMWKkR+9)n;eq@NCsR_InGGfBZ9UT*v@lYKof36GWR~Ru76yxi- zm*zL>mS#`oSf(BmQVfS6)sM14S$iU=kxn#!P;;=p;H!f%5MN(n<><)X5mZQWCB%X| z(3RafkaGvH=xZnxb7~q2O#sixAHro5Qf>Kz?Ek!!?N1Q82uC5gi~vX3J9ch?)2Z4y zN*AN0(HHAw46E6CsLU0XG};At7@B5ff&=Myk**AE^2~qgGrcb^6<_VQ)_++G$$jH+ zDlp(`|H7K2H&YDh0RicYwze8Io~!WshEzRF@$^^+R&a1@n8 zVVh}RRI&xy>rDGXSF7O^b$A1(cMqyilo7Lo`MpIgVcuJVcqT|DenOnyX#<{+b}NkL zfc&=#Nx%-iy)DMz&*J_HF~uc~md7A@e{jUgU;NjNSsh|JZ{YoR$&AmzeY<X1=0XlAd^V@NDybVQvM?9 zf3*>52OY?fX%p?`5c$YeZ#%s0+o>1LgKpV-Z+~DbLf8fe zm`Vw|I`%daX^3VF8qSJzxgb(n>3wFjvfHuvN!c-)L2);{?KK6@jyI-?v}sg$6>#-A zpHhwY>X#~+t21nzt;G?s2$J{%)|d~Q;-x(XTP-e@@6Zb_F^x6eMCxm)*kRn?e(}|j zTxw3k=_=j3B9Y^x8<*dZyl$YAce0_e4Ov%Ltf`zPN`GG~IZ`CuE+O|Ec8akr3&fWv zzzwHo5fkZb`q`Q<=mHbFU-wt^MIYB!AA3I!c1qjxjZ$XcD*9{%hjGe;2>EG6t9+8# zjtMpEaFsf%xY%c38WjW#c;o?|h)EiLzdKU-pL@yf#+_3tk9kF3m0e;A(Eq(xn$*Ad zlJZtFU1%@rxA@TAD`VOI3Jq_0_}NNmpmG)-T&~C5?0+8}Sp|Aku3Va?es06l>oQ78TLU|}yim??`{8i9km7na`gs%PYw`u;B|M}bU z?C)OsYhs+ktb4JBTvEgS%(t)ik_Mta|MA5(?@RYS^-#bX z)LH;H>OLrkFq%&LU0yf+iJB?-&r~MT^h6fvW?WuDX_Hu?I9ji|*KiFYxw+THPz7g3 zr3?XoaF6`tH#>P*KaNO)qio)tyeA~iMq(*Rv)TF7z%@BUMlBebjAtn37yBR?wZp;| zY*m${JE$;lyOsYT@$snP|1l8S{vROaf82Wt@kg%5>k~UetHg}n|GfEfQ^zZ!4BCW@ zWYO7*RF)V;3u8jLjqkKAAehesq$hp`7d+dm{LAzhenb5vcm4JcM&bzDxYTo4KE0#$ zL21enA|^=VO3KKtPp}wtZBddcOTnfePVLi5HGQ*{rxe|qLwNK@PAu(Oh)D>Sm6(5n zVQ2r|i0RF5X+2S$QBs&*wD&7B%;M9212-;Q*TOPeOYdsaf`JTGJTo`Y%=@cM1QBMD ze_{=`Ud#h@{ny+6eZA~?FsiPNUH$14o~4hf)nSmm{xRpz725Sk(f9Z(L7HDpO|MZ? zoqcj%yeZ1iN>l)fv5USCK0)jcn+_6yzYh)f1IdWgx^eT6FhAp8=q9pw{Oe!z@FkRV zt+#*Ce1~%$zcv<~b=1F+D*7JgZYB2Kco3rmA|d<%uKif1n{NscAt%o@**fm-8zmaX zs*XEWyVv+BG4-YBCxuCnWYHvt)slv9{OH&MyV(&EkZ3)DvJ(8HMiAV4GFD{Ykoyce z9Q_SjTrl0efuLP_(mM40aO_ns?`U9Mj@qQtachgrLkhSa_kGQJh8aj2K7rTCAI>D) zn``iJ0*H$T=3q1sYosmcY0{RCAc@5oCq(b2r|S4jvzC~w%;X8&<>i3(wZe8u7Xqvg z@(q=zeYx7w*w43=2=f_4#-=-pYJ7a${jtsSlk{W8fG`a0{+?gzC?eYp0Ev=1cNFdT zg{vJ%R~u?AMw3UlY$>cHYg1weEQ9H0BysbNvzp*IfVwF+Ww7pbapa05?$trTi$l^e zm(2NXUdwVnE?Eh$RJGf39gjx(gy<;ZOhVlbH5A1ZV8odLa<7?$^-kX%P249c$|NDN zI1H3^71!jht&+f0kj<_g7jz!(- z>&-eFkzlw`PVVimg`wdTJ-*suQ;IJ^RU*XeZ=pbHne zJ;fEUGBeYQ)>|J)k@ng@K}AG`0far-(qT3~MX#LftbLR2J*O)}|5MV(fb1U6BPOCs z;^05qy_FNcEHko``FS$eSV@^fOKTeOhBw#2NL;SlcwEuNAMpcxG)G21Ts(yE=*JUG zt(uRY4UYDz7mfTFltK+6{ze|JMzuggclj|#Z_Zu>(QVl zbD8G*M1i-hxjWki_OlZrQfbS4sb!*Gpfq1Q&qrA%Q5VhL8}(x=c6i?*fFMmW@cti;SwM==iB`+u_ud*cL{Rh$C&gZUdzT$G=dGYekvv6ewHI_TgF7`JzQ{i{$#^xD5~~YWpf*o>YsWL+af+;H z{|?~WtrRk3+hux-?1_O(;>fVxfySD6q`7z-J!*eWNsrQXwruC=!I99#;jss5LM|{N zFvYEOc)n`HUuCI%RsxNgnRH;6Z)qeN31|539707uVE`M(N?iRc1q& z+kHYAn6__`JTuez#YWv)dY+(Nkp#6_=IC^5G=m`OX%yN*U3;@|LYo4yl|gkw1b-Cx zZdo_mpn3AB}+0gl~fqv!NdY^2RC&GG)v#8p!> zqMj_?e7qbX`EG!nV}b@{-9fBH<>+VQpuMXV>5nZsrTqzV0Jzl4%w^SX6tf2dJu}>U z!L7SyT-PeV5Pm3`lgF4RH`7pwXkWoGCa>9}G&(-xDl2vUc63-+u>-KsP9+kz(kpgk z!_!$%_M77_isecAD2f-$m-9}G!}=>o1c@<E`>KHo6i$lhx&(kU|J_Bx^6M{Rjr&DeTJNwDGJoo93 zU=4iTmv!!4FP8$)ZTbcW@5f6$+eu+2$Dff&zalH8-9)AOy|JCCH0^Mv#7TAcytDSF z4$J3jm(IkQxybS$m5A6Yo;%;u1k<-X(>BjPz|4BMHINT~&y1sUgm>D!- zesNb3sL0&tPo&5SL963Z-PMuydz6$Bk4C^WRNg^gb${J_Uw;_`Z@#}hND!3;ybOAj zo93DEdlwcy;>1d>F6VhrJ+Cv*<9Ia?GEqvynYNOx5F|%1Ve;{&C)}SR>QK^dJ`>Ks zm$3Y3q)BvRl#{he;yy!M4@ojdg0*c}KhN}^6nYAgZ>C27(8mQQr~2EIwpNd?_Fv5$ zjVGt-m=~;gE_atLi9An==fT}F037v`MldV#cYMsGjqKoNQ|uxE&}r!qFQoEUrRnIV zj$r6zS}?a~;?T#5nqWWoNP$2oP{0>p@ai26(60ubT2qIa{4gl{*lC#mMu{g3Y<7IH z1EFcFMg5(JNo5wTv8I|7Y8zh04^$JG&$%AuUJkc$fAyi_2NF@w-6w|EJ!v`<-1#nt zDGtW%av0gZ^I&lH?rim7jZmU+`2FqTeF|v==)wO1cxUN;Wx7`Cc}5>#t=-_TgFl{i zhAs3g=rX02WO0}0OjQuO{RfCjV(Ym$$3E=H*KYD)V5jDr?QFH8i}Obgh<7MRQO_|i zA%plmmM;8<`Jbc_fm6Ek^0T#P-ke*^7aR9^qTfkP0E)D;e_{uUjmi@M`XaHJ)XRNI zE8Mgsh`R~4f`~y8vA;0|D8xcOfstZG2&@K8ZWHB1IRxLUDf<#f%7Rt{DeV^cGTwC= zDx9=jB4eTM^&7enM-B;o%j?ZJ(;NZXQO@XGj}FH{=omV6qu=glR?)SHvib2DkLEyN z^NFIX{rZC`LNdSGnqWH#tN;uWsbIoa9}RS?m4pB%y(A(WJUO}bilUBUINl0G%8~f? z5*APK`}X}b6hF>ECj)t;Xg4z)`-NGa$NrEa;)=J)@8k@GzlWl9fY3MfhTISNuJ^U- zxFXnQQoi4^K%NmTJi&bP_D!Dz$TH=&JpkOA;^))2tTqFN zyh0H|nsZ(F(w=t%cUUGYiJau}bdutBE57=y<+C;0Z)ki zZSZ-yaS&96^3Oe{Kw!cI7qO&EG3`SSImtKFw^h*LUt{CV)^BbE-m^;(ZRxo7Svj9}gSxRFWNg)G z6=<|d6cr%Tyk!tt z^x;TQqE{Xi;aR%FvBCVZw`bS0LKP>G)x55!c}M-h51AyrCuOAYGl|@HIiH}&lIV+` z*LyiR)HqTi2swemFPJI0<*fpB>@3#HrdN!&3!BH3w5pet9fF{X6=c|4QCk6?hk|MOt zV@lO>qw5nn6#=viaJyVfJ~^)S^&O1z$I+0qrbHUoe;#fN` zbcQKN5pi=GT_xBD+OvSM*RyYH!e1RjfZ`PaS8+kDO*0l z4c6FGEA!+ooB+rljqUm*^~-ml^H~pfa^&SvKTgUB3P6GD020lH-$4@bxL%y=WS*T~ z^Sfqzw%6c#3{WRih;Q*=96)Mmb=zbfoj53C%Dd=(==y=XJBnJn=Ht7%I7nY0Hbn^k z*XccGrF$TM##l#+<99mP6Yz{wI%tgwv!U0_yH86|zwLl0Ui9|lj^X37zf|3@rmxf= z@K-LH0myLEe1eS$c{Kf4&S+7^BoFZ>>Vwt6Rk=;(M@QAywqy#N?VnGCRxKOf?tcf; znvtTRmi>y)4Ac-JSkZ#cTbl3OXj0-#n%AcxY-W_5SGS#OV|a+~Q32{bYv0x%KThgx z2|zi$?U(w?=7&U3M1iB2qd24ZkupOTJucpRdJ3jtwFoxU81=v4lFTttIyorBPar8V zd-*!s%}itbGJ{UBaqT?>!v8G0Ka#Zl_9dpI_-rERF!o zAdIJJAKH3nK2mh}MBU!!MGg-@@cwN!8EvhT^Z7+`O5xc?)QMbKDE+#H<7_8~zf_UN zBmM+_>>xATm1cdbKe}`v$w|$TT>N`?JHJrqnCOvzLj-iVCN3LrQ|kE}BaX zR1trYk+i@pd&T?fcUz=;rS`2ay5*VQU#y3oX=kR zFmSsFeI+0weLF220%}ppU<@IIXfp{cO-B!i_vP|jV))JkqJDtm5Rw1$GfXry2_i{N z_A9NG!Hav|{HwXLUiC`@14mqR*c;C^aoe_PGg;OB#uuLt$`>4usSSod%O~lzzx|1J z(i7{1C%N_`Dud*qZ)Haj%mTrpf^i7<)U1r@5LnjoRGmMEi8Tu$h--H>ecZU(NaOa$ z3D{no=_fUg0@|_E_}`;md&<{x)qBUIq!>$Rn$An;0-gT(>oq|g(@C=0!Gqgaxm86a zZisE$a*AqKVHbAhDTF-&f-Gzar-&==UtI5}v9?95OAb+Ms5+8}I#P`%56l9;xSE~U z0p3cqLn%e0@uX*C<9@xGjf<0000`Ck9U(5)d)4g3um-z}h2MAjgM$Sg)s<{FG;jGf z8gx|d=86)(r(Dl_MI0Sm?8|k9F78W*)a6KMON3pj^qc`tYY4Hpu} z$zC90U0+|jD8R`^=`7~?-L>b%mDkKXUep79lT-hwxb^Y%;vKsaaK~?t$pXRp9vWK) zx8wda|$P5jH5LPa%k?IBkVN>8w49-TZ79(6ll&x9Q z_nB`j#$4vQ@4dv|`{2-ZXo6iz=>Rl*Bc-<|EbiuxPl8u>fC}^^Xil0(CNkvXOwP%& zT!FkK;IpgH)j-}eDz@B`JC9?ek|4yhPfBFSsQKV9Z3XyC^^qKVxu3x&Jz2uoz}u_C zK&@XQZxNs>p6rJJ>;h2Wsid5mo}qle{F>RlxhT2sAgDX0tu14smQ!H&LKP#q2`XoR zTo_$l5{~cU>dI;P&TMslM9Q{PsX0&C*TSKrZe;0X`#LPX2|3`_F>UeHOLV&yQ#ep> zu+Zyqvqkret~3-AV7NzXIyp-ucCiT7##i``fh6sA8+#rUwi-3P^a_9MjZk51!#Dk3pah*4)nwA?Vs)6w6i)6g zo~^-lwVXK@wUQcU!eu$d9ZAErK)eV-O@D~Gqu(+N=i?UConnbuxep#Q&Dl(EKJ$s0 zZHg&adjV)_(JOiD)iiII9Su+}LxivuxDlXNKP5i2SG!99TM?hL zzjRySeu7-e?{VJ?;A`s|>_~ z)}~t#P=#sXIb5o^LP-1O-J4L~bD_~k`YtpzR#v-;{$ z{#h&9x%%);%9a#zkWnR!u}$J_J+B%4kb-iIsy#_%DVmVtNa=+}=30j)~D3jG-`*}s8f z82QCSxAh!Ql%fu=NSFkU7~T3^fLwVLkc^C9kP-=&dYXmq1@v}Pq`j|Piy24u;?7G8=Q>!CWY2}`-6_L7%$ljrW6ISofBu=VpXfd z?+tGIdPs~*r#;mv@+ncNOsP_|Z4<#;_&Tsgb-psjwt&e7#%aCVyUQcfS6_`D zdh)<5NqYYr#+5&U2)?9`g#X;Vqutq^_Yp*S*{LTl27sY~;;qQ0-vQcVCuygRitcTj zY1mZasfn{v^*x2sJ=&UDUdMVR?r7YNBi#7hC%v9#*qmXzOw{(SMtPJ7nzw2(=TYLQs zWlYZV8^G(|OI<6zo=#7%jiI2BRho*G(xz1W)H4zHHIt%B{hJ{U*|ZJ3lkyE2!g?L~ zz5d?)_v}k+2Az#NpCB~unCEG#X)#HOjr|I@J8ij>C(QR=r46SEkQBvxEWp+USc~_& zP4P+@^S1=t!trip|4iQDl|n5vh7kg@ym^4W0O7)|4# z&pUCIQ>){=%^4vxb(we8OJ1HzN6S5pQPgbOi~@IKT6-m7s`$!Q(@t<^qWOlhN~*nT z`8}mREv5!WOND8@lA0Pz*pXuK$0^0)3{tK{@I4#a1S)(_5YBa(~>nbYQ_e+P@5&Kr-2_F|HK{-{`)dAR0h z7%E<5&33qjmHDqdJu^J)2^I3tI5^(XKd#0TI}6sAh)YX@-Rq3Lq?63IpCd6HjgpyIF@c_J2YGp>AM6Gu^~XY2Poz41|Y& zW>Bol{nhSrv!aJ1NTToXBc>v zJ7Df1xYKaa#6cBA?xi3UMpw}e@^y?epy8+4Tmfc+1-tcwmsD1eve}7$ukwt9a+f$u zO9HoZjl1>=g_%T3AI;2el`AaMM^&7W`e~7?qs^eXp^l_Ct*~7tW3avbVX*slq!Kjg z%UGY$SVX5$$&|%SnI(*+9gFHDy4Y=3wilbb-Qs88$g+N<_R8F6Q+sQrYKhgd*^h#j z@_&LaMBz_Pz9ao|-h_Od=tNTB3Rj1XyBz480VA=u^JBl`j*%(ffymU|Z5?~>FTa-C zEfO^u_zH_7H+SWds&6qgKu3AX!fO4`v})Dwrj*nJGr=?F1-%l+;m|sIf~c$R2?3UN zljVoQnX3XbrYw2VxM=_QWJVs?Q+}kWyk2cPR8;B$6rxclJ6tN=$1+pRsB-XCU^Txs zNv!Bf(N;847me?(Gax1{?J|~`C}zlf0}wuLHQW4hA1kp;VY~j43%=dcX?6iw=fq39 z&cZ-6!ts>~SeX5}L~(te`JldfydsA`Y-i91uJjxf(rexGU56^tcC#;L(M#*39?S_K8K8pW(}t=}8dXS9 zDPXV!E^Txp(-hhJ_k0?ZSim|Dc7Ga$xt6zoFNbphJ6i$TDmN%RsFuAKJR-KkbpmcETZ;TZ1fpLI%0QkJgosR(wXe8=HjyjysmxNy0g?4a;F zOwzUchCEyi!snJX^4`E+#oE)@3@%oY0any4l4;~wahe~6uG45<`~YPJ{c~JC_OI$9 ze*OPBQzOTD>vu7b^6xfPj(i2`pI32XBDkTzO!&dtmBam&LVI+DrZ(faCk|gE5QFaQ zY|oI}HLuvVf$pkjq<9f|iol#x9JNJkQ)~iwhKrsOM$rE{AOc5N&-AE6@g@gwWVg(?}Fqs?+!YUlaOqd8#TMEjruJnR6 z@arTV1T}=V%wP7fykfKegQIS8kGw?{rJcpItV1%YZ&CA0I(US=gMo1=m@$Rbiz2FO zy`y|xz55e5Cm5inebp(S4TR#OX2NFBMsLmCu^fLcTuRM-(kx=wW^mMWfv*2S6zW6InBO!5Lfyi)s_&jPRIDyU+CgCEsd}%nyHVxvr!L+ zvYPC2CI1`wGT`8-wGi#t8;=bDf`{*1_nucc+$RLJD_i4#!GW0tL)NXeQksh+2y3$n z_9~*?AH|3~I5&k#$rnAU_bmL>3R#`n`9k>w~* zZwuuE5~t=R>BTZn%^)ZuET+Z>{;|D%g5ljBu`1tA$}b|~1ZW4?FM%1dGuc-GD`oSE z>yX_ZznmhvB>SOpX6|Qgi^rsVt_5W)L8VGBEjcH|-ClDME~+x>l+I!3&=EPl9HCgBC&Wuhs9mn1JTMdJ<~^L z6}wQv7}IIqP=$xTc{E%0S)nmXY9=i;v;t@NIj(tp+C+TkGphVb27B2*7EyPUGL^iU zpf_~zduufVyxn4u7sAzMa{B4DrABR@N7M#tbPjrM44QP11mj0&6%BVxjVT8Sh$23j zgI-s?%;so(x>?b3gM&{>Q|nbQXK~ioTw8u70CrPJ^o;WU0F7(pE-`3*%<^8(Os4j9 zhU#GwR%ga}V_%@@xgM_K4^+RG!Hys)5?VHEk)z|YTlYtX|5Zy#o%At##eVyS)SBKU z!(Owq2{oatPx{U7)I) ztkLfhjT31487Y}eK78lxdpV!=Z9?KnfJRc8u^d|tEhnjtWq>N3{g<+uhNw!Oq)Lya z0RX%QF<9CE;Fi>-%n`6_qOGo$bn3A&i9h*^2|upZ<$7QGB+7m(&ye$BtOG5Nh>!0Q zvXD!88L9!;lT}@?cG+}sCDSjeI?r}K-`aSGMU&9yFR6nvvMlr_&B7UH*aV)Am$_Cs zlN4jyK-OAT{{;E^QQK4Kuv^iXC^@$bE0gjVWZ4+skF<9T)Q&AUA-lXjBqdsHSH|AO zNBdloniZ07qnbl#&Aw1`7ovFDt_#=gt~_Q0azsgHEj<;Or0$M(6T&k2&ULtl(i#U; zb54iFNS(d3*ysy{1SJh;oXnT1M5&Zhj%q8fz9FN`Rl1F7EuZ?so!x zPk%?fikVojLIP)2XMxZeB$P-CjS=nYi$2>Q%*O&SUjfKfCpC^%^o*j1m{!XUdxg~J zfkJfVOf8(JBokBS=-WgaPNsUgJgrN^lwlI$ICP`JB#6i9!;AT(8FKdzP%qw=LM*P& zy8=-g?KGB9RxYB>jHjdCL9Gt>S=MmHm3=5{6=+tjEz0?pu!?z(s2)9Tn9KmD9^bka2Ez$Hq0=1V8fC$ZfjyX z=+U0(X)HlMJ^(3qJEW4}@>grQ2C9J3n%u)M+*Fxk9W_ISP}Qbbucd+T$h)JhsQ8Sg z)E3R|j%R9(BU60ex{(8fet&Scl%WT|u3o_bUgsy-I^y5gApsWOmO_#qLB{>4HHR4+ z#I~W>;{kYE58*d0DhKRO1%zOACsVPF*21%V^@He#+ykf>3}uELO~f07(Fo3XX7Ds> za5Qz|A@5nG{srHdAJu6mL@A&<~5Q3|?>A@0HQRR$FItVulS_Np~Ezfbc#d)JB~C zCr{seT45)TvSRc$@=cUQ6!WL7_?C%AfcDE`!c&-O`Ez^BOiYw*$@}1(et$57i8}2U z*OyznOVUmd+6Vs?(M&mLTc!n!-m;Y>A-?VcLu`FC_qO zXLNJnv>K(04#3J>bg4h_bg1mdz&kSN$fI^3w`J}xY;?J1(m{}9z3{9R0s!*NbN1qE z45>=i14;@6Gkx?%?f^oNhc{}5Bwl}eL%HcYy2)2FmFo^bV8xur%YR6r!skuZ)nQ|l zP{NW5PDt6~LhCBNOp^KS5L+*xoA?3#L;oTEy!`Sf`$sJX*AdCLg)$`2Y!x$ZW6+Nb z|71SahLm%)UK%82K13C=HzB}C9@0$Jx(#s3#XMf|!zpsBP=z?g!tmhfcs;F|DNRqU zU#HbCR#v=N-A2X9A+V5U{(NRq^E9Ka;HmhG+VZz=b1s1%M?muoWA}&PPZs}^V?86$ z1<=SMp6c=Vz}k-%yhM)k!j-lRR^{|7*pz@L<%OJR;3EtnB(Kx%FRT zFXPh=A93CqnYChs(ku@cGnjvwN+3_8@{K_@fCI}x(!Wn|aEL6iBLo<@wf>CFC$9!) zj{2m^0(6)k29hJjGi3>#)I{yI8$T~X`BOT{06d*!&6D|l{)Q^P1nr5&92>Oe0XH1e z%0UA-SF5Lc?0K55n~hMV)=)a)UdtgL#1)#?j2S?|DWyBHS6}<9JG1XO3RbWSMn;@P8%=-{1|czLe%3VbDem%C0c( zd_}M*y^3i;8Y}IHEu0% zl49&(r-}NLM+-50{GBSaEO#}IEUUAQ_L^wpAuuNIjBUUjc^XUZcjSUMzEt^1eX4WZ z^=w>jb93mtwEtwfHCL6Fk-~BG>+0o5{--I2Zc`V9-ZdIHU)z$CKQ=l2c7jBKc zjbY=*3l!WWf|Md&Px}?@u;R`SGtPZ7@vVVz3(7amMb-valFQw^#Ul*OL}g#EqR*a; zm}GPT>yI1b=R(|>vKlNOfV}^^QWRclq6)i%rCda2(DQgb4#}C%t5~bSis|e?r;oXh zKB+=id7jMu1M64>1=GCN>2U^|G)Y$f1)#q)K?f=RRA5F_3Pt8*tcF=zW;|AcC@x0iM?yrD9{btwx3jBv8vwPJk4MfnTA6KvFF0>6Tcpamq zfcb!}Qz=?s4A(<%053UE)(FP5$ zy7h}!aj@&xEQ+^w=SSUZK-N2ROZDL*wvuM3LK^6K`u2mOo6x0hbl>%7?^Itt4iqOt zbGK3nZC%W^F3RKObB>u*p}Ft9|J_WJDD&Z24DH9&w@_T7?Asel86hYu3)zA*K%nCR z(?phfWXeWL4zOVb}HHQF8FE%(TeV!HJI3p9#EM&jL zwHTxi)P*u57)1-E^S9fhKX49Xof46@n`mR7jjpdjz+U1}ZW+dKk|((f%yxBhTJxnB zXkIEsivq^2bos65Ad;T5t(HX6zR%Am$&RbEBeoHuSSEP=kNNDjw-*z>;!@f@B3O?A zFY~LjwaL(|P~%b2Zd!k3AKM*Z%6}u^P9jeUJYCZ3r`)i$g#x)-xDK(75|u;E=ZxlE z0y-E6u|(TPjJJVo0xqpzIk?4vg&*T-(8G#S5)Io=8Jg%|m=M3aDG|yOU_dLEeJrnM zB>|Hj>05iIFSMsT_`J%cyb;OA z(<~l6dW}KLHbSbxu+RMU3Eii`JFz~{#@K0uu5_uws!z{%#`>n^@7S-FZxkSPiXocQ zEq@+P2Rz(|A%2-2ZKC#yx*6Ez4*0C2!^v=O8z{Zy0kK1{=-g>xpysE$4FqI!4 zoRS$=#$c%Z0GKwI0Cf*_^j`U66q_QC?J_zbwS6@2DN8fT>Z6o|f>#Lc>R)EXEyENysSZgl$0 zvhw+U6pHE38uDVVH^lCY^DvewiR*Dev)F-QU^kt$JPGpu5cb~jRR7`sa679+$BrWF z*jt1Or>v84WJmTUBO&9Hj2ubG9z~q&y>~c->{T+#3`t0~?(5L!^ZnlU{ktFc|L45l zulH+QuWLM?&nqI{WGdWil>4kBF!8d#;PaetcV86@89yqyH*d*5H$x8<=!jgKe)t;76C*fcMsd; zZjIHGZ@cW;9fC}n4fm=DS4=VXQ8~R;)R>VrHp!L1@^uwQedI{^_#EOm4oZ8)!nSFL zh#Sh=~3R&BD)t@e(J2CcqxiOwt0A(q~h%w;9Cbc}CsTZq! z1Iig_8{DQ%v3gev!Zfne(J8p(u7MMVXUub8%bxMbKaVMK3L2tsY^q(;-rjIm5uE3j zIlXh$=YSP0loz5pqfuAwF^8`#!)1)-Uu#0#X~tmehQ}P<=hGy8nb}T5j1i3`q+ZZM z+he5M_ghF^5*@fS{Q@r|y{bizSikW{)@@loXnmajmp=T?(nLLbP5wyda3f5+o(;ms71LOiw=X;>vsMcebyom87cV#!ZPFKbigaZ%bQO z`YKf8zYEpI7%+v|&$ z;v?y@G9>5{1QJ;AEt9b=x&tM`*9z-?dLf551O-s_KpBpl+LJqA#1J(5ReuZc?7Wg+-C5ifO_d2nvVWxa<^1;g6Ir@- z+t`Od8l!g3n7d&X1#Oy(JG8N>6DprweF%uYfQBQu_W9Of&!{C~!pl#P4iXocAIbPcwegFIFG`#x-@J=tm#v`EvKXl+335kO|- zMpc)ojvbF>0WJ^mdqi+R=w5MrqmR+sr&nITZzy2-8PyX%S=5PNj&W7EbW_4>LT3p&RHnl8M5sQn=VL$2MlcM|PuElj54=IQ z&Y)xaa-K(2#Qqi#OVOrG2w@xCmN_{QasCJ#M(5ozk3;=}*Ej{51i@D#+{__>>YXp@ zymZ6st@S_BhIOX3n&*$?zh>mI!zsjX&bGH4P|2NV556dfjj^LTv98V5OMP&BipImf z`*KwrQ`={itd`K8X=kqy%^1?XB4A$m!(&DTpJ?<(nAMt(0H_$as@=PqhB8(@-jx za3WiiZ&S4X2t4LEW*WqeZX~dn8k_#Pnm(8{dgct~#Jh7`n6ztiRL;7%=fm($`WtHZ_2?|LxntP)0;CYi-Wsl=R%i3ii_MlpPxR%9r0++!e zfC7kjq$q~)flpc97IKN2V)|hd2(TO-yAz^{nGj^H%GLuoEZ3^EnWo z_n%%!8ReKpgsz>w**4oY?{S9;e6kBy{ycGg$o>WxLz(RVAb}~EXcy1&Bu~-R+;gqp zW;?QXYsazpqzc6exiS?fz4{pLWR+`c!<9dteQ{A4E=VV+M?xx4$(v=RdAc3!(H!Ze z{pKz1p1s=q_d))xh+shIu%a&*J)9j~uhtMfaxk}_#8EfFV$KaN0V%!nX-zy#Bp@JJ zza3*w;wd^tc;7wTM~HYBO#qJ2f6*FBQ^}y#V!c5(pYbc|XDkcyQt;~m6lFed9&^ex z=_Q%zuCYg|XqW8=f!BC4DnTpTD6iB2Pd}?NG8>{4epK$3H-WMoNeqxRut_a#!hb@S z%o$M!UoD9)ahd)JF|)OrEEeLyfT(jpRD!QL{T|Mpc`1lL=NES5$-VcPuTB$1ApvPL z>Gg1IH#B=~Xnh5|%gi4Vznqem^u@up1HyAH3(IOpqtzQ!cA*;C+3EE2htzT4xe^vs z0B@IW*YP-vA+e70R^>$^b-u3pmyyGDHn-8_;LORo8=K3Bc*tFUh0-Fbx!MgC3UZh^ zAnWOWdbB&a$?}%Gjbbw+)wgn^WA80aTf(d92Y^cfp@_HTjyPwi6Gv`*y_d4)s%itG z|1^%s?@Qz|sF2=GDor*P~p4$Dv zkiPTZHaITd12KDuSFzR9wBy_dwZaaesyTa~l3K zaqS0u=p!)JY!77N=>9wM5T|IW)D?w&+b`XXm$oM- zA!ZI~|Gc1Iz2kBjsY#U%A zIo{s%)HI&zDjrN~O?|gJI~BoBiOOwFw;{Qqe`~}r7=lmaL7-ITOI4rEwi~D44@;`F zU=#ipcV`SFnjrS<3jnw64>ta69&u&NLUbNXS@T)r>D!jK+`dpCDilZ(CjAwlM)7iC1!bO73O*e0fHSA=NqW!UM@(&F z*a@BtYF1zTUSy{*orB4m8Z-ICp?iX`!SUxP1u=*qsyi3e(%>nGIeqS@3wtM<<_0GS z*wiC!Ja9T_Ha@$#PlfNo_C=0-7C<2d@Xb&RgFWsq{{ew)DM(#7jzv5`3(hn4ocLk8 z!lhXM(_sFhI$17~j}iDg1?gTauqx-FN_m#>M!+LOxJj#)28q0hv6{8XQC7$6raHaZ zSI9Xj{|o+kGZRdjnuAUR^}ltOqPqGH(b@gY1rGL+JM=hOMj%_Vp22*ly|S*p5)Em@ z{&#e@19?YRn}4xq3b0B^=gy8bK99a@R4K^%03E(+tk}Am$D*jqDv%TF5pk9?`Ule8 z(}HntX#mhD?-m!lL(^T2)1N&3{McUJ@v?q!8`f~Qr}>mvlt+yaUNZpedHwsjzz_$; zXC9^N$YfWe5SRo121F!bHIQ+WAXfCusCRoM3q7+~?gkmnR?Y||kYBk|?%K&?%~)(E z*O%ZMC595OKN@O`{}AbVePwU8XfDRy@?zU10(Q4#W)jyl@yF}WtD4~Zx2g(o>GD$J zSs~iF0Zj;NUK8%GQ5sE%^RUrC0M9?o44W1#vAXoPz)(kTvpGSt&Un&1lT9i+QF(Z&A#3{DZjInN56F!=jo`{`iDDy(m z&(TxqdS46D^-$6unw#StwB$m-ab>7JtHL{8GRY-?|8@jE^ar}oXD8gl*5y~iUGMh3 z_TQ=K<2Amysa23_*0Pg|xaO=lM#$v|JzXSlj0gHoIp4@sMt$7bfx{gff2Dki;m#=p zvM)f?8#9p0qh%NWdi(iJ)4RG})L)$%`+xRI)Jln^42Fe{1TR$t2jQ$X24~C5L(TK(ytF2lr|_prT3akR3d36uT(Hn7qw zQ9=I3af*4Aey&&Xl)x*{(F8LkvS;~XN1d%L?6 zIv$&s@9Ojmqaq{KC~dDa%=hR!n@oVpQnR%uTCP z2?&d{U-HEN^ZoNl!RO}G@>lmul}@OHPg>}JkFftVU|k&W&z25a&VP&geGe0gm+8#k z1QSRbl&!N*hCk)JfUQ;~L7{jo4Xq^mGWZCdMMfE*EFB}yHkF7-m2DG5qP1R*Z%M3V zmQp&cWAr34iv%-kT_tjod-co4X8EGMBT(N?9%>sn!;u7=GIlr;5wPRmXbOv}H=jhf z)saocs>VO;nuwha=}b2sA+Us6GwWA_efJgtdd@%MELgws`KRwa^@HIAx1>s!-DkXO z=r0*8>aU|6{VL#^*d6NBsMe5xlO;i!3K8j4=?{IVjgFxbUTR6RJ&ELE$h|7kXc>2v zV_oOBBJ}~!jc_(&L$7v6*sumHy;F=Fk0WwAyUw+2l-)BFUS`b#yfQVmd5#6z3i1(j z#Q3sG#qKxDK}&7R5}!R_T5h>=!qSW-KAk+4M)wpUr|ZgZqR5A&j+*K=@k#udvvMa` zn}S9ltJU%W8E{;kFC^AyP>17i~G-qZx@!N{;Fd0*%q-AO)hyUIo?%}K4NNm zbe`BhP-iVJ3D3L38UlC=f>Ce2q86mr!o zkRz3-xex1Hqt65Hf?`Kxg2~{bTwu-k4+BcjojrP<9mD#jcso%EhqDslj%T5285s!4 zO}@f&_*%|57IVF===6lh-MWkF02j-p>g<|OOnyRen-uZ(kf%xi5yAO`pSCzBj(
    BYa2bnl+|z*N~`*>|MRs{xD4Wi^n7y*Y*{Bs+W^Y@ za2vqg1@6sGUk&SWqL9MF{Sp&tpBdE;0BLyTO0CSucEkIsr|#W8qu>%1t7WHfz8r}> zd4w`INr8T2#sJ|Z8CMVWM_^X}Ar3{xhu*$8*B|*cW-}qaR9M!f@+U$osQ`|`ncYF%nEJEH+Tt_SKYk=a}c51D2<(wLl^&y7#X zKB}l_f~o*ttFNofXB=(I^fRPbJt|~v*TUmkzKh9kNB2)Jm>ut|H2&5Ok`k)+*vc<$ z1TEcr0VH6sV+%kc&NA@Ud|u02k#|`1(;2_x@%}u97ZR|GaiuwIB{nK*d(8`oDPsJo zF&bRFfiOx*vDLDezJnECc%taNMuByA;_P(%=3k&k99bXSmTF^%!}3+Dd4Qgx_Su~_ z1e9*5P7jY8(G-Z1jFkOeRg#DvuS-%@$%~L=t%ltoEQ~*%<{jMi*4D%>d><9oOctRM zZu0bv5MeU{5SfhWsEf9KQQOX;{T3_9w!vSI_esvy&orr*Rp8Aot?pQu%xdddZ0i zufqrg|I9l+rJp#p!O?E;Z$fmEa1bX6W-2Ekw7Snp-BMSHwO~u7V;>T@mMa)WrKB-m zCy+jkLsr!U#oQ>`d`q?H@^emKVMm5<*;P1R=OL%>2affayopI=&u|zeEN@9SO(`So zpSEpK#@OY=DvAC6p7hDpUzIft3S^0WWpq@v8jb>PNfnZk`IY649QjL@iNnI1JzYIc zUu-kwibBS$CFC%y9~GF{EP~>Z?Y$={a6|?aB$$`GA95b8RBBYx$|&#fkE{9pRy;Y9 zR_WJ|dD@$GhED8RG!0iZzlva`H5Snq516#k(J@)X22D+6O|SlW5)TC&2f{(cla#dS zEq@AG8{wRTcEb$|0h1fTj56vb?(gctXE-jt(%_B~PEJtQ9`I3HI2|sU6a*-BaC=rF zLmcBqf3oFT4nH6Bl6(ZZfXwJ!*Qq%TZ8OH|{-UdxXTC?md&Ui-TPcW_j)zq7=+(2K z8xW7V8}DJw>?}h25YJ=2;i%RmaCg~Dg;PaM_9_4PTdcd8u9db@+s7sQE$B$=*E}D3 zT9KMZg86%*KO&Gjx9=tvjDU9mAi}M*{cm6H)ZI^$yS=;J*OJPpSa&W+us9{vYjMs? zG2e7_YPGz&{%2~#l$UWR8Sv;?_gJtG4Z|%e-vVg>HU*vY{AtxLYxBje-69!lt)I{I zYMAYy9tXe}XN;Mte;~chtE(l5cNLf7W!`cg!JNo@Ux&02i~6EgWiqe0p}dp|!zTC?fTYBUzYNgV zXl8hYrsf>qQ85mI=?qMG^}yoMTe;BzV?|Jsde-%1bHGk3VhX45sc3m%$M&wb<5^Q1 z^cL`e6nyMfAb<~{_nhF)W#Nc6EM;?vS0)u(`bxT!$a7$fO1f{6n_drBuiVJeWM<7M zO4e=tQS!YD;ldD`TFx3(W0#O>;i`4{AzjN`i{kTel{{EpA@3M_&O-?X{1#8nwfoyb zMlzHV9xK~`eWh{W3OCGQ4AE1j5wn{kJx%Er)&XAd+Wc$EEz(603E>c3do0-k0iq`7 zoes&Y9LvKXwO3!(5v#D;fY5C(_mRmJ+j{tp7N+kH#%CS8Jt8u`@ybVzowMDyc(a|h zo(ogduoo3PGSFJCp`4cH3$HH_`(Dq!K=Xto-A4CT)H>O50sODF&z{B|g$WwW3JkF( zCyrr6G^+Q$G*5EHh*tqEwfLK<{=L3BE1*#&zVm!UV0#S~SW=+6G{vGEY1QO|;@LFNNOm-CyY%{lu zS6V-l=qi{gTDDQdIPgVijmO>hNt(tpTswI`4D>VXAZ$8_m{ZG7*kQ#TCm3tpy$RY# z5(*X|hOsppu}%Cw+(@2a zp81@TMn&C^T+`Oh1rTHpdjPJ})1}l4LK~Nx2erA_iI5(Ri+7@~T`l&6_*|F1lHO6I zVRUE42R6XlC`S()Jt}y2PDz9!xJlOvD{O#pq%|~Q{+~ z7;W4RxO>k1z|>Pk=f|rV#4Rv%p89Tk`4M^0uOwIG{@Bzp3>ibkOAdS+v>~wMpf?hd zzuQLr`Yei>n>C~Pv)Fl35MpT}*}45kbRzz~}aQ z%sG1-TW?@;n(p(C`HZiQ+S+c8Uf&hR-0)Av<5hJrbK;<#95^bH?|nyUV)L>rY1Sr2 z1gLPoroO&OI=Ay(S?DEMpK-`HuN#>DC{X!4G_JW)CVi8)u_u6E%J(^ru(#G>_bMoBGaSW?oV&X%^?4)pU;FHh0kmETM;1{DPn z&cUZ{-e$i;L=2A_BJ3EIUPx0%&+jjsN@@i4k6Z|@+$8RAuiA#tb0D;-H?o&PsE(gp zj)@|Fr9JWc6Y>5?DrNo;C*rRMslTnYaZVJ`6vT4!`y`gd3b5eH!f(+l~@${-S7fD-Q>n%UkAknOxx8XmQyf4#; zok^@@w^uUyZyGh89Yx(d5lCf>{Xtlbng`yh=;694$wawlE#g;xeN%m zKHM)VxF8x3wI^|$fqB$KU+Yz{r+0(GP7BmLHW;_){WxcO0zRACcBi?538!e2 z5skXM>L~6TuK=o}0YMQ%i2Hzm)3yXwpgVJ( zdGK-zk1Z|)%b3q=V>XD3a!g4FcJLc&=e0LManqpR;pBTbvXZZ9=y~qLyO1zG0n`a% z-}e-4h_O*HmabiW#&UsV`t2O_>@xCucoPH^bFO9?UKE;Mcgqy0K3D=Ps2cfYM06VM zv&~EMrBoFJen!k2tB^l1_p&lMo*?^D5LH}NTCY^PCn6DRGW{5-7nmoRHL+@U0$Q)g zC@woeHMCU($Jv}GCH^KAnH;;9z%1ueTr*+t4o-FWX`EFY#LfmKY%JHjp?8Zj^LM5g zcv*ld@MBz`U&SECqsxYFb&y0mT40*U(FX0a1?tKt$JeyF5v8YPY*~(Cp1}gZG(~mZ zduJ-w@?eFyzE9NQ=^s@SrJvmy_b&W!a;hsh^-Ktt(V?I7QRK$@`7C{{7o?`=x0~D< zh`SN(8#PqIc!f#siYOh3At%aaw6rdiJA77q6|p(CqtM9_i`0KQc5-Eu!wbnv9NqAD@ad z4&Fy_VScd>@gtnbs$21!y>4@)whjIhh*Cwx!DEaVGV1{$yxZ7P;I3ycv0Nb+nPb;bJGfsDN+H|bF0{ksS%N@8> z((589mYq^)E-$U=vQFcyQiAnLCJbKX=T<>BhH>q;hbH@%wXxaT7 z>IG~24^&>F)x#XbUsf#YNW4J$9gnkp?=0`Ku9!KB`_xR=Skj4&(-Rx+HMQw=6CD+~ zokC|PG`LL?G&Z#gJkKzrE%lM5ViXaY!s$E+u`?vQYb!~q9K9P)Kpe*ewIb#(UA*g| zG|=3}a4KE$(i!No1ZHvl_tNw&hDr5rCHS3T!EkXDZ~UY{W}(w1tRV+e-gT2ue@V}h z%2~ZtGpSWF;}HjZ$t|zDC0r44ae(U%Qymd;*l^a!%lBgPTvc7pxq9{f{%Py(ZV~|$ z>diCctWaM8%PE93GcBe$t~aa!5kMO;GkyJLrMiAJzi}W^qtb(!nebQ({I6R#r*EeJ zw$pCHIaS9*I(yH^d4Kl##Sd}@XPW|!&&i>Hs&~XmhvGQa@F+%89Q;%EPrU{~$mdUv z)6M8ve|Y+go(JbC3p$-yI$BCr=)^KzL1=zrK`dN~=h2pPXIV0~Yy2^jW?;15!=1M0 z1^yDKc?_KO;`p)q?#Wt8D&Q|43+6mMipu{7nU!!s97W=CK{``}HC3FWt)g55x$$=__(1{b1hID=XjSuJudMaKv$d3E*%#|q zryxFtazj$J&+x}T$7la0q?%~eS!=zozKS(q1J@uWDf*xfRb)dTRE)nd3!tkmvtq&<=$Zl*(X>!10d)~nUsdejJf6vG0~9P*xT`L-L}ItzA?^lwYK_bVL-1aN zTl@K~2DcE+=Ob{L`8MVex%K2*hHEimsS}6lSW;qm0BdMFToubqi###2G#CXWHA}HP zkiJlW;M&OdJLW(rAKw0{04vsd*m8w_tu3%G_ZE3_J+pn?y{A~@NDD*j6C}&i_Ci2e ztuV!m^Ye!peY$zesaefaq%{J_*C(Xn-~Sv#0M?~2W3K`FsZ8kW*SWfcPjg?=L@aUc zzII+Bb+Lga8Z4DDV(Am|Er=z9E&|azNppAd!NvG1>UQ|aTKgs4=9G@>A0j-XHu6pH zVTlfMX$<~fAr83it&kL){ObgynZ$8Ag-hR{!3It<#`KFCuZ3vzi_yr*$ZyJ@2d=R= zU?&s$W{I)1JCZmUeD&hP10+U(5=>aB?3pywi7Oc(Bm%7dz3I7`0Hdvyo zUGjYq>Vze|(yWa*EBe_tI+bbmY3(g(7LT2Eq?^c}P@=$7sW?Mu7Uihu?$e4w0ao{T z6E+UWXSY8g7I$v%J2@$%yT5`fwLDtes&^wb9N-~uJF9?c{3oft(tVAl54VBMh))$m zdKfF6;uVJIKU9 zs-SvFq&c2k0ct5klVXH?WR39j(~4HSbl<_y=%D4^?RSV65%QAn+gRSfX<5jkTrpn~ zvlf4!_&(O;>?s%nUt|_iNa^7px{Zp8uMOhYG=J2#U%Dm2gsId#U(tFTbD_Lw3b4C& zf~+*oYrn^6Eb=4Wo_qjn1sz-bDpWji3h)7%%$S!-*FD|uVO3Q!>oz*P%V;AmGYh|f zU$)tU|MpCbEn_207+mEW1_!<29(MmI_HB~p>mp11V+=AaWJ0K^m9j{I@4w*GzrBa$ zS#LV~DCK&``<(Jfs3y&`|y>$V^uIu#^A8G1rz1ehjGCm{<1#F*q{ zttPlgV7IpQAc!N90q1i+EQAqKnJ-l+He@V8=1-AhA%1c)aDR8CbJXb^zs6YKx`XlQ zWg`HmAAZLdZ4`Utpc8DXjQ3BW(|_0HF)w(J7Ol zD`2+qAKC^Gss?q8P=u!!H+x^fCzGOA5;c6#SZC#GN$t%Vt^z-iap+N z2%Ue-tg$*E(_4-j7UH0*Aer$-1?1s)Un=;Y;ciTkK77?0{YKBpC%jV^ijfP^oU!LI zQg0equWd{9zf7l5ME{(-pRHyXm%3$6?=*<(ENY9GHK7X-+fIwPZEgAf#U-?Qii(ZQ z2BBu?KlvERLUho(O`=7b4-}j3#z#>C-ig;r`uf~&5R_x^J(ty?ymkD~6c7p2c&+4m zW?zR+wl1eu5;Cbnh_^58(`lNbot}Ra9+^53aGsQn5fM`=jN&#@dbgEBt;!Ks5;I9_bUyayjym0mybcc@CCQc!+`xha6lMEvF9H??G!x zJW9ibDB5#5pdIR;#UfowwH@VZCjm8Pg!qzG=^&e4 z%Qkp0TPx(G^hz7@#^(fA33+&r8%yuj#M45*i35+Z9Jg8B7UdIXB896Ok~MuR;m5u5 zaR9*`uYD)yP#`?BVvl5=nB_jPS!XI6&KlD5EeDY(G=Ck3{X2q1$eI`4IHYk4c zfD-xYt%d*Id9k9VH61cGZ(_8S`HsnU!43YvnSbCaTdjMsK&fVlhmNyVM^BGJDe2^(MGC7gC4 zD4;miwVHc$G_;<{W}`UDY`Nbu2uQhNr{Ts)eoxs%G@4?}ne{wsbabvivMTk|NZ^YuePm;Nl$uK*I>IQi_qCLquhquk zCxTT9)*zg052H`O2MT&*z>X;8UFM3AKjEJ^x$k$4&pJXZoxr~H7DMq?wbBZHj=~9; z1Z!z)g0klujfC%AU*xGMv+x$!Yz~>*?y_QX+|T~j^=&D#DvX9!Gdpc>r5sDi_cv$a z<~(OTY_TnX~Xg9V-VF0)e(0)inM6&LDPFDH08>pd7t@luq(zPYly zz4#0^_9M&(tyq#u(M!#M<9d7&wt~9SPn^Qjjf!*qVo4AzV3~TX4K%=;NH+3K3a&%4 z`1spDJUB`wCi`w1F~nyqxBRyW6Ro8Zeg&93kT(E@uW!q$sem1o3{@sM_OfAZF<%(c zDM6{b}h%T9_2GUId7D;(O#zCAF}fJX(ghCTaHmO@DeL&)2Q>VMwn;-2Uhm zb7-ugkB;wj<1Exa4Ln|a=qoFI_-hidD-(c50EDBTSqI|btG&q-5 zY%D#ASq>ul(gboIF2||(C+^{XRb4gPNj1Jp$Kfgxr_s7b&;kePK_E#zty6gGqQTR9BECpOBVV+scLcyPe)bVw~(`)b=y;98Sus!iSUkGzUt^&sBfL%Z> z=gbVrYS8+Osv^*OvY@06H+Y!r&hcfV9fA=f!&$wEK-$!?W!?FZc!Hc^XY)nMn~;Ew zr=j1dKD6M-@hczcW0NRG#G-11TBDFH6Uzjt2V?AH#|6nM;qkiP4Ot;}hTzH>wVzyw zoAjS-hgN{a_!kE6As_3Q)ANHS`f!b`J1fU7jRz2XZ72p2P0lvb)4G0CBAN7`l@9E& zT4);oLnZZWAc%5UMzPmlvHxnBUS%kc67PN2$B$}a(d}q_`;?9ti}!6oC!|Zqq;j!u z+|XS!J-K&kGj5|(gwNJfCP1qFkbKKr+XZP)2+mt{{_?Bxl#grDRJaV+3~i4;BLq|C zz?bv*Mo@0rrRTH@O$MRd;a`m7x1YANA>%(~$je30h!jLfMY;#ungk6!J@;F_trd|T zJ+=7#r%-N{f}xyVB6_55Ak?q`zkHQMr!mSA12O)F0VyYT| zmdRXm#kxlxsHii4m>- zO5|bq*3#+~32W@7w?Dm9?@S=<@=%* zias*vdr`c}bbt0(G6iXjCu5B?wZd5`r9Q!`ZXfdbRlc+Eg{FJI%gU`_qDC}78T7feE!9Hm>s21>9FznZ+9Lx($ z8CspD>_C9)Dt)54c_k1ju01P{`I#eA{|8Md#slE{gp-T$8M6QPf927=W_Fp#1atE( ziD!qY&Bc5!4Fc+paIS$<;38GO53Gd~){|Sw^op1PC064|n=8#lMTaR!KQ8?G`M2l) zout2OeE+2Ofsuj>${2fz7EA%}X3 zTX%RT4f})VNnP!X3s)%WE!+30S+f~lZfbK&U!T|4IKof_F(p0nyxTgj)Hn(Q z&vmrp0!t4QeWLwENB#fZ4}T|ZIq%CQHNuBL0C{#C@rie_&we33NMcMbIg{0TY0XhN zqMk^z`5mHPZ%N?`JROM{knX%->aVIT9X-u%sjJKREQ~=3rx32yXk?#8fRqu8_<;|o z+uX!`g@}@{uJF0V_psC>Z=*hbO1O=KJ}9p-nA^D6E}L7&x;F-hKr}n(-;sgrZydoy z#0kWu?ypCA`Kxm5GvyhZR{4hx1+J*{Mhnp;?BfJNrm7o8Xe<^cwydRIaDBTHpW0-j zpPFkaC0pDm$&hO8Su1x@R!diYX~H;I}(wT}LJJ(U%IaZ#&z@o5-uuUG-~+r2Bn z$dNoZ7WV8Z{#*HWdaCH7x=&_@8Tf~Ls0F!;K0dAJ5(~8qgq@rhpZZg)2)SRU``zO| z!$xo;yr@?;NgP7m(IR)BZJvCN=ltdW8ZG#VD17+9VwI5tNvRDizR%_OS651KF^gBV zMw=!hSf!%fDBeo5boO4=#Q>tbL!mgf!CWXhfi}$&4Q3T=spe**)y4>RM&0WwCESz&eT9XzPz<8NjD?`eQ=0bCbtK;$`@PiI-(7%g*G&Ysh(2dE0Z@AS-hlh*Q1+Sd! zhBTvt%hFx6Bu6#Cbxee>`MV_dkVx`~vy6%H;QXE@a>7yU8A)ot)%+eU>bK z08As(VcxU6;K~2GUH21G-HfUB+C~tiA%L|U%*Pi>YEF2q49?QC$=Xh8j0A|fJ$B2v zSS_@$T(hE_<#7hheVMHKsp`8zAM5=in1QODcR`)YUq{;2K9n>|;?TAuA1o+;A4!%U zJfDoebmKa&)>R5?q;*ng__d~`>EY~@rRRvL;E4MB2`!(@s{SJL7j|2~=`e74@ocSS zayF7Cf9=rR9mLW+ll4d&?QS!iRTZ_q;rjQd*$E|@jVI%oGm?L&HJVHNM2Y97)Cg&Y zqV;qh_f#x5AU=tSIUYB)W&1AYWG~d&w;@IC@fJamMVxTW_{b-dR|Ov_&TD_BtkvV0 zv{f{qOEA6Z$pSK{St}pZh7riCXJ1_`&9DZ@p@XDC70eh5dbDbpY+09($oRXE#sa8Z zc|=aLZMMH#+xf=msAx(K-o?dX`LCXg_3a$7sTXSLRn(QW&=eW}^x+hMqBQiY$ib89 z(s^)??+eGjCnO}qX@(kJ%jrlKJ_=IFOOYG^h>saw6%4O-Zf(0UtOmJ}iU1Ue4@^887kYw@yYOe3k| zGg9i0vkwRo$F=Q>+zp9)CE%VpTquMplzH?jRR6Wbi$c-fAubsaD?Pf$@|cqBc~a=N zd`bX+q{ylR55>dj!zUA*A;H95<`lF=tN`f{J6>RUfq zNsV9HnHO^K5nKNho4O+3*pSkD*4JkCME_OT+tHiTbG72`CS` zb6+|Psw%BC6yF}y%!&F=;Jz6toVykM>g5%XUwD;kM@S8DVR9C)N;sj?BFF1N#~smv73Im< z8#DkP*dz22U-}06CNJ0pP)5R;TZvW&R1<=`Y=^sYe|99>qts_&_*l(kr)u^==3TxX z^rE&}Z>OuC`gTzbJ>N~EJuz{&{m{jZL6Y2kYQc%G%bWD`PM(X=03$K# zhq;hD|3>h&!hb2B2R4twLJc%9Rd26LwmngU-0(jlPIz2x-z@17$VJQItbVg<(VoSK z$W*+Zc*G_hAoy#k1;J=!8hz@wF}98X!bt47A00ROWxcvabLHP{O@16mP9SZ!0@?)t zqgy;{>?J5qNE@xH-tb)=D+dT!MU%#FD7@~x!C?NNmFB3g zn7X_-hKFgVqAl)&Q9+tMB5Z!oXzz>xujgJxG_j1ON_>03DaJhwhFb{#2iy1iHwGA* zLi1Dv+iX8{6|mTQ9;Sg_65#%JOL5S@X0rdkbc9#eDk#eb@sEX*U`$p6Z~Sf{6|7nv z010g+s((1ZL7);s3B8RiR3|3J7$mr6Psy^&3{CUQ+N;prjZgjf^t+!$Nqj1Oy!q_} zhGIE!oWlB&p=pkq!P<4TF$Bbv_2$FczzhKyAH@2*}`D%peyZRD&odeb02b>MaSv=gPJ zx?+w~?u|E$xU677t+o|WlF*Mi!A3o}gMhXVaXNpLw%DxcL&OlU#sHGCr?3FHHpNttN>=$0g8q7N?ou80&Qlv6Lou>?|iH~uKef!lo~Eo^P&;!_bGrM}GApKYd( z1IzJT3hQW6_GXd$w5_sZ&%|Gsx|tl09Ez~y%=|s@JU={Az<>T48rjoQ7xK!soGj6ft~z3y=%0v z;_NfoPo!hc!P#VnC@z_+Z286df!-DV`v+XA{U(){oF24O=q)Ov~r6pGBZQ#cI z%3{2CTBTR}80`|N-LwY#hDxFFq?}*zJVvSxdjV`C3*sQ3ZV3eozcFh%98tuJ&p3r` z>SFQQ&6MCXcI`Xh)!k5Hho6o@+V}`Y^CUz^k)y(>&zsz4gmjwPJ?tp~)SZ8jej;r* zFeT^tfyhwi>a1MsL4K7$iVHSbj9$ZsvRiz3AY4h2FP#OZu&>QNPS z(B-&?l>ox~x#C!8t_TK(&!26L_)za}@#|4y zsMw@1p}MvfXtz*I-?G*+CQx_X zQy-%kR?FF9P^A|n)dO655KZ*&*otW&;H!Y`3jIwLIRLH!1>hHkyK>00FP@FS*^a(oo~qjP-_Bf?7D~6s9bi6{ zbyWmo9GhBAY#wCSF&WSKvOg%{Ewk$4ZQbdZqxZ}8t{+l}SV6}|Io{g$Hjdals# zh9Pa3nlN?KtkpXZ?)Z2?Pb=OmbSXbSY%ycNqS~& z5b4=T6r@+B;qp3+3H}-tIG2Z7P^Njfn6)4iMyw&PSSFfCnP@#tG1sIf)I9{pL6snO z&6;E-%TkuXlZvqHkK_JN^}qiKdUe6PLhH@0BBWkhqVC8E@c}vEPibjxeQA+MJw7(x zW#9>GLRqaI6j}ziLIFonISXoQq4-V*hv}dL%THKqCD3Q_#=+lMReFmdfOyFm)E%Zb zPy(uX;*6|gn&qzH><(iO12=O1tJlx*KpPS0xyVk1gVr35aQQ05re48W$!lD-?n^?F zgerGbldA~c@e@I{1G5wt^PoTbNZd~cE6H|Drh3DOw8IA|Q3CL
    dYUAwdcj1_pa0!KCc`!<+d4X9xV|G$Doj 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 literal 0 HcmV?d00001 diff --git a/doc/tutorials/virtio_i2c.rst b/doc/tutorials/virtio_i2c.rst new file mode 100644 index 000000000..e5515dec2 --- /dev/null +++ b/doc/tutorials/virtio_i2c.rst @@ -0,0 +1,117 @@ + .. _virtio_i2c: + +Virtio-i2c +########## + +Virtio-i2c provides a virtual I2C adapter that supports mapping multiple slave devices under multiple native I2C adapters to one virtio I2C adapter. The address for the slave device is not changed. Virtio-i2c also provides an interface to add an acpi node for slave devices so that the slave device driver in the guest OS does not need to change. + +:numref:`virtio-i2c-1` below shows the virtio-i2c architecture. + +.. figure:: images/virtio-i2c-1.png + :align: center + :name: virtio-i2c-1 + + Virtio-i2c Architecture + +Virtio-i2c is implemented as a virtio legacy device in the ACRN device model (DM) and is registered as a PCI virtio device to the guest OS. The Device ID of virtio-i2c is 0x860A and the Sub Device ID is 0xFFF6. + +Virtio-i2c uses one **virtqueue** to transfer the I2C msg that is received from the I2C core layer. Each I2C msg is translated into three parts: + +- Header: includes addr, flags, and len. +- Data buffer: includes the pointer to msg data. +- Status: includes the process results at the backend. + +In the backend kick handler, data is obtained from the virtqueue, which reformats the data to a standard I2C message and then sends it to a message queue that is maintained in the backend. A worker thread is created during the initiate phase; it receives the I2C message from the queue and then calls the I2C APIs to send to the native I2C adapter. + +When the request is done, the backend driver updates the results and notifies the frontend. The msg process flow is shown in :numref:`virtio-process-flow` below. + +.. figure:: images/virtio-i2c-2.png + :align: center + :name: virtio-process-flow + + Message Process Flow + +**Usage:** +-s ,virtio-i2c,[:[@]][:[@]][,[:[@]][:][@]] + + bus: + The bus number for the native I2C adapter; “2” means “/dev/i2c-2”. + + slave_addr: + he address for the native slave devices such as “1C”, “2F”... + + @: + The prefix for the acpi node. + + node: + The acpi node name supported in the current code. You can find the supported name in the acpi_node_table[] from the source code. Currently, only ‘cam1’, ‘cam2’, and ‘hdac’ are supported for MRB. These nodes are platform-specific. + + +**Example:** + + -s 19,virtio-i2c,0:70@cam1:2F,4:1C + +This adds slave devices 0x70 and 0x2F under the native adapter /dev/i2c-0, and 0x1C under /dev/i2c-6 to the virtio-i2c adapter. Since 0x70 includes '@cam1', acpi info is also added to it. Since 0x2F and 0x1C have '@', no acpi info is added to them. + + +**Simple use case:** + +When launched with this cmdline: + + -s 19,virtio-i2c,4:1C + +a virtual I2C adapter will appear in the guest OS: + +.. code-block:: none + + root@clr-d5f61ae5f5224e59bb1727db3b5f5d4e ~ # ./i2cdetect -y -l + i2c-3 i2c DPDDC-A I2C adapter + i2c-1 i2c i915 gmbus dpc I2C adapter + i2c-6 i2c i2c-virtio I2C adapter + i2c-4 i2c DPDDC-B I2C adapter + i2c-2 i2c i915 gmbus misc I2C adapter + i2c-0 i2c i915 gmbus dpb I2C adapter + i2c-5 i2c DPDDC-C I2C adapter + +You can find the slave device 0x1C under the virtio I2C adapter i2c-6: + +.. code-block:: none + + 0 1 2 3 4 5 6 7 8 9 a b c d e f + 00: -- -- -- -- -- -- -- -- -- -- -- -- -- + 10: -- -- -- -- -- -- -- -- -- -- -- -- 1c -- -- -- + 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- + 70: -- -- -- -- -- -- -- -- + +You can dump the i2c device if it is supported: + +.. code-block:: none + + root@clr-d5f61ae5f5224e59bb1727db3b5f5d4e ~ # ./i2cdump -f -y 6 0x1C + No size specified (using byte-data access) + 0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef + 10: ff ff 00 22 b2 05 00 00 00 00 00 00 00 00 00 00 ..."??.......... + 20: 00 00 00 ff ff ff ff ff 00 00 00 ff ff ff ff ff ................ + 30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 ................ + 40: 00 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + 50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + 60: 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 .?.............. + 70: ff ff 00 ff 10 10 ff ff ff ff ff ff ff ff ff ff ....??.......... + 80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + 90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + a0: ff ff ff ff ff ff f8 ff 00 00 ff ff 00 ff ff ff ......?......... + b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + c0: 00 ff 00 00 ff ff ff 00 00 ff ff ff ff ff ff ff ................ + d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + e0: 00 ff 06 00 03 fa 00 ff ff ff ff ff ff ff ff ff ..?.??.......... + f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ + +Note that the virtual I2C bus number has no relationship with the native I2C bus number; it is auto-generated by the guest OS. + + + +