From cd06401eddd1a80321efc53be20038181beccb0e Mon Sep 17 00:00:00 2001 From: Shady Nawara Date: Mon, 24 Jan 2022 04:15:06 +0000 Subject: [PATCH] Switched InpOut32 with WinRing0 --- OpenRGB.pro | 15 +- README.md | 6 +- ResourceManager.cpp | 4 +- dependencies/inpout32_1501/Win32/inpout32.dll | Bin 98304 -> 0 bytes dependencies/inpout32_1501/Win32/inpout32.h | 32 - dependencies/inpout32_1501/Win32/inpout32.lib | Bin 5116 -> 0 bytes dependencies/inpout32_1501/x64/inpout32.h | 32 - dependencies/inpout32_1501/x64/inpoutx64.dll | Bin 98304 -> 0 bytes dependencies/inpout32_1501/x64/inpoutx64.lib | Bin 5192 -> 0 bytes dependencies/winring0/Win32/WinRing0.dll | Bin 0 -> 65536 bytes dependencies/winring0/Win32/WinRing0.lib | Bin 0 -> 14774 bytes dependencies/winring0/Win32/WinRing0.sys | Bin 0 -> 14416 bytes dependencies/winring0/include/OlsApi.h | 580 ++++++++++++++++++ dependencies/winring0/x64/WinRing0x64.dll | Bin 0 -> 62976 bytes dependencies/winring0/x64/WinRing0x64.lib | Bin 0 -> 15124 bytes dependencies/winring0/x64/WinRing0x64.sys | Bin 0 -> 14544 bytes i2c_smbus/i2c_smbus_i801.cpp | 92 +-- i2c_smbus/i2c_smbus_nct6775.cpp | 154 ++--- i2c_smbus/i2c_smbus_piix4.cpp | 66 +- main.cpp | 80 ++- super_io/super_io.cpp | 15 +- 21 files changed, 837 insertions(+), 239 deletions(-) delete mode 100644 dependencies/inpout32_1501/Win32/inpout32.dll delete mode 100644 dependencies/inpout32_1501/Win32/inpout32.h delete mode 100644 dependencies/inpout32_1501/Win32/inpout32.lib delete mode 100644 dependencies/inpout32_1501/x64/inpout32.h delete mode 100644 dependencies/inpout32_1501/x64/inpoutx64.dll delete mode 100644 dependencies/inpout32_1501/x64/inpoutx64.lib create mode 100644 dependencies/winring0/Win32/WinRing0.dll create mode 100644 dependencies/winring0/Win32/WinRing0.lib create mode 100644 dependencies/winring0/Win32/WinRing0.sys create mode 100644 dependencies/winring0/include/OlsApi.h create mode 100644 dependencies/winring0/x64/WinRing0x64.dll create mode 100644 dependencies/winring0/x64/WinRing0x64.lib create mode 100644 dependencies/winring0/x64/WinRing0x64.sys diff --git a/OpenRGB.pro b/OpenRGB.pro index 1701c9a64..651aab560 100644 --- a/OpenRGB.pro +++ b/OpenRGB.pro @@ -976,7 +976,7 @@ FORMS += win32:INCLUDEPATH += \ dependencies/display-library/include \ dependencies/hidapi \ - dependencies/inpout32_1501/Win32/ \ + dependencies/winring0/include \ dependencies/libusb-1.0.22/include \ dependencies/mbedtls-2.24.0/include \ dependencies/NVFC \ @@ -1092,7 +1092,7 @@ win32:HEADERS += dependencies/display-library/include/adl_defines.h \ dependencies/display-library/include/adl_sdk.h \ dependencies/display-library/include/adl_structures.h \ - dependencies/inpout32_1501/Win32/inpout32.h \ + dependencies/winring0/include/OlsApi.h \ dependencies/NVFC/nvapi.h \ i2c_smbus/i2c_smbus_i801.h \ i2c_smbus/i2c_smbus_nct6775.h \ @@ -1108,7 +1108,7 @@ win32:HEADERS += win32:contains(QMAKE_TARGET.arch, x86_64) { LIBS += \ -lws2_32 \ - -L"$$PWD/dependencies/inpout32_1501/x64/" -linpoutx64 \ + -L"$$PWD/dependencies/winring0/x64/" -lWinRing0x64 \ -L"$$PWD/dependencies/libusb-1.0.22/MS64/dll" -llibusb-1.0 \ -L"$$PWD/dependencies/hidapi-win/x64/" -lhidapi \ } @@ -1116,7 +1116,7 @@ win32:contains(QMAKE_TARGET.arch, x86_64) { win32:contains(QMAKE_TARGET.arch, x86) { LIBS += \ -lws2_32 \ - -L"$$PWD/dependencies/inpout32_1501/Win32/" -linpout32 \ + -L"$$PWD/dependencies/winring0/Win32/" -lWinRing0 \ -L"$$PWD/dependencies/libusb-1.0.22/MS32/dll" -llibusb-1.0 \ -L"$$PWD/dependencies/hidapi-win/x86/" -lhidapi \ } @@ -1157,7 +1157,8 @@ win32:UI_DIR = _intermediate_$$DESTDIR/.ui win32:contains(QMAKE_TARGET.arch, x86_64) { copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD/dependencies/openrazer-win32/OpenRazer64.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) - copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/inpout32_1501/x64/inpoutx64.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/winring0/x64/WinRing0x64.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/winring0/x64/WinRing0x64.sys )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/libusb-1.0.22/MS64/dll/libusb-1.0.dll)\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/hidapi-win/x64/hidapi.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) first.depends = $(first) copydata @@ -1168,7 +1169,9 @@ win32:contains(QMAKE_TARGET.arch, x86_64) { win32:contains(QMAKE_TARGET.arch, x86) { copydata.commands = $(COPY_FILE) \"$$shell_path($$PWD/dependencies/openrazer-win32/OpenRazer.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) - copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/inpout32_1501/Win32/inpout32.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/winring0/Win32/WinRing0.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/winring0/Win32/WinRing0.sys )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) + copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/winring0/x64/WinRing0x64.sys )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/libusb-1.0.22/MS32/dll/libusb-1.0.dll)\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) copydata.commands += $(COPY_FILE) \"$$shell_path($$PWD/dependencies/hidapi-win/x86/hidapi.dll )\" \"$$shell_path($$DESTDIR)\" $$escape_expand(\n\t) diff --git a/README.md b/README.md index 4f78b65ae..e1bcfaa3c 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,9 @@ There have been two instances of hardware damage in OpenRGB's development and we 2. Open the OpenRGB.pro project in Qt Creator. 3. Use the MSVC compiler kit, either 32- or 64-bit, to build the application. 4. Run the project from Qt Creator. If you want to use your custom build standalone, download the latest matching Release package and replace the OpenRGB.exe in it with your new build. - * **You must run the application as Administrator the first time to allow InpOut32 to set up. It can be run as a normal user afterwards** +### SMBus Access + * **You must run the application as Administrator the first time to allow WinRing0 to set up. It can be run as a normal user afterwards** + * Early versions of OpenRGB used InpOut32. This is no longer needed and should be removed to avoid warnings by some anti-cheat software. You can uninstall Inpout32 by following the instructions [here](https://gitlab.com/CalcProgrammer1/OpenRGB/-/issues/669#note_461054255). ### USB Access @@ -202,7 +204,7 @@ There have been two instances of hardware damage in OpenRGB's development and we ## Projects Used - * InpOutx64: https://www.highrez.co.uk/downloads/inpout32/ + * WinRing0: https://openlibsys.org/ * libusb: https://github.com/libusb/libusb * hidapi: https://github.com/libusb/hidapi * libe131: https://github.com/hhromic/libe131 diff --git a/ResourceManager.cpp b/ResourceManager.cpp index 0856d0297..87f368247 100644 --- a/ResourceManager.cpp +++ b/ResourceManager.cpp @@ -1188,8 +1188,8 @@ void ResourceManager::DetectDevicesThreadFunction() "

One or more I2C/SMBus interfaces failed to initialize.

" "

RGB DRAM modules and some motherboards' onboard RGB lighting will not be available without I2C/SMBus.

" #ifdef _WIN32 - "

On Windows, this is usually caused by a failure to load the inpout32 driver. " - "You must run OpenRGB as administrator at least once to allow inpout32 to set up.

" + "

On Windows, this is usually caused by a failure to load the WinRing0 driver. " + "You must run OpenRGB as administrator at least once to allow WinRing0 to set up.

" #endif #ifdef __linux__ "

On Linux, this is usually because the i2c-dev module is not loaded. " diff --git a/dependencies/inpout32_1501/Win32/inpout32.dll b/dependencies/inpout32_1501/Win32/inpout32.dll deleted file mode 100644 index 8889280046028c78b7a379a7e284399b6e1ab0c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98304 zcmeFae|S{YwLg3&Gf7Th!WlGy$S((pibg3KP~s2_k_kZxPKcQ}LIU1GI*zoZ@f^S_ zfuv_bbFvxb-qQQhZ)poR^nU3r@4d9ON?VH)1`|+Jet4A%*G8M_4ns8*OajE5?`Q2Z zlLWo(z3=nB&-4Bx4|C4hzt&!R?X}k4d+oJ%${yP$*(FJG;AfhWbO3MqS0tW)`_YNy zF*p8ZjP!iQ>r)Td7Qa6Ak>C?gx!2Zx^J{gFf8G7n$G`E7Z>sLUTkWpXzTtl28}8zV zE8JiI=Bm{*GBZczCO}{Pw;wKf`OS-ylfNAq&rbe#gm+~8X!84bZ;bxib^>GYw>d>+T24C!~cp1 zUft?7-$cf55FF4za^t-c?-BosB!7o3*q`;RH_>ux&Qs7Gpd`W>XDexr)zNEmH z6!?+?UsB-z1qJlNy**gVsZ)bHelEGp?9%;`Yd1yt%xoXNJ5ohDYKR@9f91OyK9O8H zx2eT=Xp34F=Q=}D)+WaWnDiZUL z@mHLZ)OeW69dZET)?8Y5=0|;mKq^p^m$GcCJY;Jw&K(1coW4*>t+6;aiybKsI)Kqq z3!|o}cAJ@91l)YV=Rpo+bp>G*k$l{XI`qS?$l_cX=o6J{l@}bj!$=fei^O(;L?Zco z{xRf^@<}7}2y&vmE|?L9+v`NgUllx0wTE-F(2$@54_&7`R0)3vkrfC}qHL#| z&ZrxLZ=vWgRK6DVBx(l9sD7%92dwJR-BKupo3sS4Ok zM*^5;ajvV}SK&9a=OT<3@!PWC{gOh^Bs1HQD6idOb&B4fsx1*L6hm+l@nr4pV}@B)-5R(?ZfxVwdS) z)!X^ksIlSPNkn*HIY~6QoUcJuptWeMKoJGqOG7ra+!i!#iX^&CJkS~$*vB0Z2ALH) z@$EC;@tf}e@hsrFq9*@Xew2?MM&4ov@B<|e^8+;u{LoKmhI4b09q;2l6ixC&ZZf)@ zAAv3Dzu|}AHT>`b2=fJg*p0}M{Gf!NMa<`UVmaypPf+b6dBRK4kK|5Y%I}AbO+P$I z5bUpW$8E$NxkEVo4dwt;*HV5touE4Y=bS<`1gHE6*fbs{^2T-(qp(cDDcOQkAnCh@ z8KpSaP3%$2G6koAZ(6birxfSj8j_$`7U$m4{7CK$UTBek1hSmCL2$}a{(xxsNKPrv z&Gn7s6zWjXtAC4Aa)4`sQ{G3T6UZkx#d`VKY!Z`Usd*bp?7<;<(dtPc8-zT)&7iy} z=q`t-yAr~sE~7+X0qY-hfwmZ*#I6U(;#m_T{VaHU>Bur5!iX|{Ei+MuEXg%7E07

HRkK)BNb?$D4;p@u%G#4G1NV zri{?=&ZLI74{LagKVQ`FEsk8PJeqZ$zW(ZX=KB9;JS*1=sii4uI)*H&P?v%t>>>92IC7lqFXHrSDT-H!5svN>U%|f5>xfXkeg}oz* zebxx5pFccKY7BPz3+Kzuu*38*jG z17H|Ra7qA}<7cX%6+k7sfyM#!x+~d`Nd((abMF|M9HiF_0dPPt+(rsOx$@8v_Vz^5 z7weO$zO13H$q`*6YOy9qXiaXSHSXco^qrmP%Y*8(Sp={=r_ZW zt7b(UxfoXNKv&~Mu?+fo1=M`1xeG@%%1eG|Z1Qz4Zs_2?m6w^6~$L zwzAnXQ3ogtHgl9iFUpj|q_Hwjs2qygo{Y-D&;^1~7Ifd&@M=7~3(puT&!SPtO|*FT z06I+?k#XLLj9YW5048~YFnro@63}w_FuPTAvywmlf-E{U=E;<>?$J^%#=39A#Ddyd zk$=V$^H-@d+nAf>xw?KLe+Dyw(6}07W(ED@nFxX*SbMyXRGR0a=4j4||DGM6GeLDc z@UYhJxvGBLGNyUd110yprrICYE_$wNuI3z`PjGGu7&5yMf1Y@DS&Y;PRruO96^^>L z!ksjLiwf@=s_+I>c%mh(IR%x(hAX*&zk$rjN}^UJL#!Y^pro8sZPQ8hiTo&5f^s;j zjcdFjq1Woh=!H9-HmpulyH(Jmie1*PIO^`|`@R0YU3KQ2XinEVYt#pUI%Rts zyrPSAF8&OFM_KvKQ9e|#g8I=Bt7PZPnb(QgMuophX&O&#GIBWd&yRNh0D1hzJTsfPsVV9YN!nl=3d;ss`!7f_q2tO^EJZNm1)3pq}hUQAz7AP>tVxgCw=S)PthSucyrQ z={%4rN%3QRMGl2Gy7?b5KfuTMki<`dzyOa1r5-?;?tLHvUytq0KHRqR6Y^wrGk2w_6#pU0e;bm$A`cs9)haS0(?Irf;90C*?8e~Xm*dM zFMyW(6rlX(?5*!()RQ}w|VZN~0S=vve(SNSW<yA25nj{ zy24%MtKh#w99XA<{|Nb$Ak!!Yjq0VU?Ak2^Zxhl{$UfDoNFAHZJXC*&cYr9(yj}6h z%zK{6EW=mM{|?<92*lWGo=C?k^5=+)=^Jxp8~UOgt`ATw4hWTtgp2}W46o zuwc-fJO@EyxpY52dNZ0;+gIY0ZBb137y=!W>t`632{rak%&o%8pH2c*)fQdBG(`ceWvcr4Y27PV(Y8xdN z4TO9~(^h;&ybUw}-vF7wr{O&w@nS~n?C>@~4Mh!YtKogi%vK@XA*cj1do8{q-s8}e zYw!i>a6)3`PzoQo8{843LPL{H7Nh}8Xm*UuJM(<2puK8Zq6nu@Ix55z+bAp z+Ux|B7YIsqcPHe5D3yQI<9Iy>+ME;m#IyPcsorkr^9>x0l+e~EJNcyL+dmvWiY+xqT$U_XL({9 zZ!*ieHl#CeCuR?0Q3lHF)vKgp%|Jj+W!|j#7);%&yPB8JGnF4kOG`=HQcFZLTtMps z5O!oUoPzBv^8xX?^Le~>K9|bzVqU5Btav+GJMo56XgyEirp^I0BXv5yiT!s| zV(VEjUPtP2JTn|pv?KK`d_kF7GH5iNMv>hPaF)?@7M~XPx4KahLt{2HL4XXOBnZLf zza(QWNrGNT86=2;jbHc*i2}jCMifL(=;s|q{Q#?%p$FT#(`%JaqH#I02g*y5w$&<| z5wm$A?ADtXy6G{K9!2!<(PJe&)<#}#K<-7_aRx|#5~RhFmcV-D@3a2=D|uJ+j}&@g zwKSKNx!4K)gUv?eCC{tsb$PFr`#4Qc^uweZS>+|nzPxs?EANou?T5*}zMqv{y7;e1 zi_hr$gWdtaJroU$dnmexm7$c&ekAWWmdWLOlYr$USQa|^%{yp9$iG{Fxea~7PQ<_K zv4%W;4zcF!W(Xl~hu#yWd-FI{PAsSjYR&;QF~*Mzu0jxcW|kFBqXE-A9-|jOfjR>s zB6|apkA-CZ{#+0}h7WS(3&i}aCq9~`0Zvy)u3Yy?4dU^UAC1G7rHy4{nvNp< zgq7~Bi^GkWJDunMa9}t zY}4n8DI^Wf!#TDA7bt;l%#_`q_OswSK{UA2t1{XY=2+f1-)=PRkWf;ofxDq-ikt0 z6?TVcXTZ#+SoBuN6)d9J*^8J5f}&f{cY%Bp43>XpLBZrXm;|bujL9^yZ1KAOc_!Wk z^-gUWx|N`Q0$GA?GiQe>^gcoXC|0Pmg8D8jQ9pLz)1!6OP1NT}Y7d*oe}ycbe)UgP z{CUc39*@5p+=@0FXrQ*<4K)%7Zl~}z3g1NG#Kel<2tm;6A$QXaffx1veFQ_3`AH0} zK$wzM83`YO^8zt`D;gC;gKeO%Qy653`C#|OYM-ZA%#5+Y4OCcuXE9J5x#>Jc|dU;VRbmSmAG7tB<1B5;EsrQpd|kc6nj6WUHmA} z)9VLP1Dh~4h(AzOVP+HSv$b>WJ+%cjY08TwS&@x1bJk6(3N}C#_|3qCI$a%uq_hQk z$8^u>xP{1<@jffjd|OQ3W!BJ-HpXuW z?f~>e<+KwtjXx;ZOPvsGMha}r2@xCxipiLFV|@mGmuo;p&PWnt|Iex&_$$?(LeB!@ z3BkR8yIM250jlisZN|tvbC#IyvrYyAL zE8Jl<=N3UlQ|n@riH_zeV++w;G!n5CCW087*0ygs0>)X;zU3i=7aZVS7=lWIKx8Y* zg`9j4I0R@xgaxWmvIZJV-c55=e4Fdm@PEP}G9(yS(@T6V5RIYWpYI{g_g7h44%T9h z_4D5WLG!qv+mhtc?*Rv~eN!*k>^@LW5XD;d<&fM7&Vl{f&p)Bywd=kNKc5Yi9?0)S zP1}I;3L?3m>!?Q5B8Oc3FPEuj5Fe6*4MfeQV^E_eH}xvvb3mGvV4HqS+^)EH9+aA+X=2h)^c~InhKAb5pR%R3`xC z?LZksRT@nqy^2+9EoDyXnkrxiVs4;T*>5W`he5wpafTjSF~r~*nD(1OE@D+9n3*=9wG93i3c(bF;c_-H zZSXWCvdVlrc#Phyb0IhgL`8t)4S@q9Kn4PsVhbq;EP5n%tt4jZIK7ZEN@}KFNSP$n z0aEAgCdqB3l-(q49jR2%btiaQFr6rCi93X{l^UspkAZ}inEOb>DdFEDf}jCr=Gj8DraEvv2$zC8m?u>elS2u?ZzC{UNE zrAcX_z5j%?%(_-u&H<(+EfYyv+6clm(gJfwJe{vWJmvr^Af>^*Bn`z_kqT*0HN7y1 z<*;2_5OQ$)EN};LtDk>N;~R7ikj(J=_$V5jhjD2@4lUKaRis7ZOWLC-`^-AtNooWq^RH$nO=y<9ED32P_fLZY@Y%3}UUj5#zxQ zbX8;vhpc<7NITX+pbqQNj^{~?^VAvl2Iq8~pipa7SE zc4q-BwCev5)Ik9%^hods5%`Z-8j870#Jdv$u$Q>bvf_k_Lhc$rFQNe<;OS7pWDRR2 zlY}vQ4W5x^32Vss%=RLOq|0V|QR*mTgWO(}E43HhJgU9u76j+C7tMkxrHExxxyCjs z;c2ToR$Ea2h7uk{?BYF6uuXInn-h7|5pj6XnFmG2!Hp?wu*2I)swKXR@ZrA@Y8HL% zXJwrcXGEZ5(^Cl{cVwHu==Kp9=__TaVP$SZ5+!}*9H3|6G}ivM=TO~A)7x24NaZ*F zFrLQ5m%h4FYBD!{9fm9>lX=EZ=9%&qJB&#W?Ul9B@Tb`WN&%0#OzULrZT+eGhc~u; zm}Z~VL?}@~SV&sz%_WW?jgOHMr;j&~stk~b9z~1H5*bx5(7j!bg8I&l-_1Y6E)s;< z0zev#x}&j@RMQ%kI2z)0?In)JrZZY4 zz-^W>PuP0MqDfGS;u&Oqbl_7S#_AktS74>y3yk8UC|^e!$ZRgquiBNZU&EIvI^4|O ziJGuj7z<$?Va@}y^Y>x50Gl5axX%L`cSXJsb%MgR8K zePG_h$3nO2w?LfR9gTwxm?LjI2$7*B`sA$$`Kw?dTr&~uF`Ep-FzjB`a>&l`1JH18 zp=w*`=l_afBoI;4Y%OW`#k6xF$HFS!46qD434wr7m;*^wU$X#I#*6&?X%t}G+c2*% zpnfG}tK^R%wFR_2N+16TY#}6|Q8m+Ay;uL4BC_-jhyBwzQ?!>%fen8I3d@*G zh#5C_q!RYTtk`$1rp*a+Hr33(A~Mk@@Q!z3>0gdjXa#H&UfFM?!`xfx?4T_{NzH)e zSNF;e<9Zkh8|K}lf!+n)fnVOFY>$?Z?QpJ{js>bLHZF`xXUi1jg_y5|d!U$T>2kf9 zuGc$3aIB|W(oC~y8Yl^)Ro?z zB0YdwsDP_`3?k8zrfAJF)vmiG)0QwtIIm^Ai`aG$d%OpI=stf%^W;awsIecMyqmTx zJTYVTbYidcIXP&XW;e6}Ryh#y_WLR-BK4Q}7>E*J|tJ;DotX&;rf2Fn{N4spj{=y2Qs16d6*Isd=zsTpWsK9b)7K(CDT)n%J zAHot5a)n5jI<2Cj(ubid7rD%LFy@XCVgtWsVXJ$W-0^MW=1x0w_1GM@~M$_O| zy$stC{;C5m41h1w!_&cfzF-~@foLd_J` z5`I&+P#we){EycrrCUkh`IH)Mv|itzS_dzQqNA~p{n4W_h(7EnAqip=#1xSxsK?N< zrf4foT{JrxlIqb)DD_sF8)>=0eoR96ckdE%qGc!NI7d)QznKb2@mEQCSLXjYIh}e0 zt`N(SUX^ba+&TTKX1RCZLvMElr3Oi=G}jH7*~gK`yr(h&@|515wa`;Y`8U2> zV~YGkX)9p*uqIbjv2iDTSI5ZY2}<#>m}k-YrUdNB{L6Q*`T*6FMeWs!f&z66JN@Jt zr{3nYzw3Fe?&Bw;PWvIxk*DN>0_c*qcuIa0T6q+ERBk#$+cmVwd6l%&)l|(%!# zO)Dq;s!a*MhYz-7rBMbep3_*el9f92%d*l$XNFnkqo|k_E~n=S`(@8N^|?v z!z54fd4=CihG`cnKBF*_41b%#QwpC;hPP07OyNILI34g?5H{DX3d!cFfU#*+Je?X@ zZk~cp2pAX3JgR;8%RcYHn)%%sY^n1i}Uy@%F50rE)P?JXaZ5q+zgK0mTDbYdOKz z&u3LYcHNbJ_LQ7ITY{;$3Zs1gV0&@y_2ki&Lux1Tj7!aAOC0t$^PO|}D}R8zF2NR@ zY=wVCVK}Z}o2yo7x{(;;NvHnVAncDb;q5>^u#?D#%BUDnYa+#8ha1tBtfr%pIhNLA}HGLDZX~RIP1e@#e(4d~GZ6IIkH?z;;JHN-;%cl2f5e7dX-&>T=dnw=BlaHNoE&brbfE*v)bWuykbhy(s zy2lWl(D$}6n<}VTVQsyXlLG^7t$?%OLQv($pvm8+2EBs5tfGJXZUS&PD}DrS9hXxhlf(jr^;pQT(aH;p?{etx+q7Hw-&+7yeh$Ee zKMDZ)t0p@XUj}D3kS0KT8TMW@#imXg+Ib?I?$6NYSgIS|vqoiSd;-622pXRt;Ok{) zO}(tsOd4(Aoq#3RSytJ}XMh4R0`de^A@*O-W0l@`ep~8@{Z|(PtjUchEVc!|%EgD_ z-DzmM3~h(dy~hy)JO8cxr@-8p$)Ce(H|T$ z?wQD(+%G3Hw)rcnQTQ)_Sc%XQm;^CnR>B1-z$UG?INi~pgzrFr2hKy%iq_;GEhx>3 zc*Dx}HXlnfXQdlu&1Uv_a3C$=Qjill%9>RYJ*H=bCQbcorX7zvAfA4)*fZc zLI+W8UyJv-a8zk3MAnwkOxu7B z6UF%AUgcn$kM|1Sn1DKqmF>)X%`S+8QO|Qk+2RLmWcTi^@bPB!D<(czNGjo%?J%L5 z-hJ_$kgWpAJ{}s8x*Mr*P4%GP;^)9ahD#`rN<(1L(ktab?y?czK0 z8b~IHtk>_cDO(5eWqNm*-d*v>=i0D7NzrnY7xVLv*6M?xVcP;Mr1ybq_M(##=>?{? zm;c*5OkF+Ry#b|(ETJe*Sg4b+W9~D&d-=1&>Hlb@qZTH*uE4ub`F1HJth*5@Y)s4b zDBb*sGK-Bdij_ItPa-z|DD@ne4ZM?wFxFa-j~nradxyaPA_KbyAC{)Rwt zlt9nkZqxSQKajJx1G%LDQg z3%)5QU+3kt}?hwkzW^ z0kLd*xhYhtsqHjpCc9C^=J9rY^d%#p*_VKC0(mOm9jt7oV>SPtXkc;-+QJX=(% zmvs#dfMQFSNl;^E>Pjq9#43xAIVYBHn3g$=`7$i@i=1-D{2W?=#m6Gx zh|JGI0;0e{5}PmUk2@s8CN{lk8Zm~mv&mk;>|5-E56v7V@oyk8F+dVB+&m*FAhykq z!2b*L24)#H;RL3@iJ}sY&;hl ztU-a;p>Yan zQyf0Ae6$B*HJj?Rms9y^%-rC%w&8&c}mI8<#kx2J{oW z1KQnK;P+rWvb+rR{;c|Oder6PpG-t&6z4h{ORc=rA2QtdFl(gjqI*PRVQ`sJDC!yC zxYB8EHqE>?GT;)BlM{#=tWuXmDR6;)Ig4P`Uzf-((AxWjoFjZ5THYP%<8jo-6A=cN zLo|SO5m3K#4-}4ilg=ILc%5ge&Qg_@^9LNz^RWZhiKhd`^4Ni~^i8In-;sro^;G7Y zk(xV#c=$rpd@ncWX6G(}&g;!5}vG$udV98TQ< z^ou+lb(dPaE#YW;6NTMsUZk2SFC0-`uzQZIAD7ow{b4D zWsxlu-QjKcF|>C6(c8QYtg;~z9z(JARzjDKR)HVj7 zPc)o!H@o8Yc1fD=c@v{zgs8hB|Mg`&cAPZpP6VM@ox$m(S^Yg&!JT;@>a~Bj@U~pI zR-LSGUL&dF+4`XHEOhfI^aXZ|`8SX`hMm$rtWd3;+x0<1>+;MNE}8ehb72A`WxMD; zY~l`*M62*yr6o&XH)S#w2ARl>V#vA`S(EDoFoYC;mT6t6;NWu5!!tcM@^ z4|L|>pfPzBS)!(Nq|zG{!I&w*D`iggfa+ys{rcl;Ka0=R2S3xU8<}MQHO0^9g9F-i z(^JV{fxC+t46pUCi&AlP{FFj3bKj^(Is&3>h%m7^|CgG#rP>K zYG4qe!y;%DCgBHi&`>1|YYgUoU3zq8VGlm*KEkFpMtCJ$i=2%njrL0TF?=g8c0ge` z&<2{xmLewNP|1yF9L7^lWlKM*XsG`f zAm7ASMEj&=O!%l0K7@esLW!xoaJ2hh@I3;|UVvd`T>$gs(V1A0Mt(k>I!Nn^-`-MU zgI#>O^1?iv$Bu(woh=PnNR*2`lL5`P(9^%}9IR(0C9u?MC(viuR?^#Ly}lE!MO}5> ztOIy;ETFlR#B~UKD9u>lj4W_Pj7fm=SS`D2eyuTceo@hb+C_GecOgsniEwut?>dn6|Kfqy8*Ehkj%$g0K^C{WAdf z%AN)A;I1O#yCJ~*39R)3bne?SBmTM>7(qtZ)r&vTr@?g{1rMVjc67X*=*gx5O4rVs z>w-fvF_x7C3oWVeaR#Xi7&XBPR!DMSzSCQ>HbrS7Lt<|#$s#P{|A_$PVM}&W;1)Pq zRkV*SkXtv1x3hI4-uc+&=)%eGdKZp2E^yTvPHzy=MR6`t3W#wnom7hd5kpAAsTFQhotTez^6^;w!UvDG-X!h1&}ZC_z6*4uQUtJq`lrzd zZi6ni@jw4zsNe_qq=HeaU@;&Uu`P!Yx|6ul$J>yBZ6U9SmmBcN z>+tb^6H&(#pFGLaI-@_+N0+EAnA;i)P-PDNj1$zlAP4V%+$K=qwmwyA<0)bFk zWRq`M1gI?R1YtjGRjc!%>lT{FLVq?-$T)G8GT4Q>gTsnKn%PI`eCz% zSdC8D3#!4CWygtoi)cduLS-lr9S#7S8eeteGZr=(%$~@kKZDJ;QIN`HIOZzTPO~l4 z!c+o=Dg+k7^%JAS=88&SLgU2$ADH0OA)KGEVSF#}&G)mJo<4PY6&4EbfbHOSrB3wo zr6zi5o)n-_Ot=zZ6x%?;%{nlHg@2|q7$iM19ur)?6H_hLV-24rYca*zgyC}%Z=&e6 zYZ7DV#0zfS6MDwP98SgLI2cZzJ`-#EQ^9 zp@COQI6x;}%=Q~|aB!3TxZY#tAJW?#Kb35@MwPSq11NcSxJ%9bDcDp}ug42sCMogP zBlF3T-;viAi_9k*y7l$h(APlXD>10U9_z#zx{KtpuZ{IwU6+aVohPQI7&uoL-)sf! zaPnvbQOwQjCi0(Ryuyh-u{RD&oCiV7Z{fJP6wdK9LD&rqkFmYr(JZBDJJ70yJAQ4U zDXqH)yO9d27+qE2=RZF}<(&L6l<$ykM?U^AJ~0Jg5+(uG1VZd_qSOqWC7jN`LN(ts zRCC)KqGp;jG$tku-5QW=#$uM5kk&y;RYJNFo{9Kmo?LuK%ADmDRemydWtCSL)lPFQ zCcL!fN5L%k{bS&wB4x7YHT8FfE&l7|>JPO{GYoElF~%^juZ8d=+nM(t91EN!=9) zV~#uG%p`sD78(h$vtUsk2MCB*>M;|O0(gv<^)TZI&{bY^%)eP`pjiZ@IY|hNm;_Mf zF9SBVFcZfT{aBo2jgD&5(W!I<+L?c{?*cnbOBTF)Sgdaq;*YR)dfQLL7vh_?Tj>}h z@|@^CapuIi6Q@TX)h_j2WIf1*OJif`sqHc@_`PR#IiU)buWh}`z(f`Qq%OO;X06OE^=%b&BivT;NlTX zWt`a7hx7gTSE(^HKG`$UVrCkVhTPS!$3A_FS2oL>{6(}^pJxINd>b}@R8t-6UFa;T zKrZ%sbryM;XfuGY)0P&$v&C-WR6To>e;b7sppnVe-dT>{szCR$Haupc_`!ZIGFYbUZzO&T;+&5gH7r(14{S@C>2T%c-oZj{5?L++@|*)rzsXq7!B`M!@I-qV!n0Q@N&cZQnw#@ z09xm6b*|3sYF=KuI;FH!9gBd{GzX~}8t9`! z10M}nZr9vU?dWN?d7uey|4}8{M5hw@zXga+vwM#y-#M~;XZLfW*dn#0;Yv`Q({N=C7OPj*D^2SW4>ZYr zs{2XG<5{D*7Ela^B~ZEBk4RwV>MpZB+}*|aXtB?|M;qVpjBS=Sc7e!_hEn!hkvKPB zB;75Nu>ZRm10Rx{l(b3-JLvs{5+11Y8W^siUR-8VtS}{YS|z*RN1Wc>*+LSPj5rpygDRBfm^;YG@ zg#)<0f%J;^ybp&Cef(u%)5J1V9oOL{3xyQVY*{$a>^(0IFN&O~vwJasF`O#Lgb%2x zUxAAQ{HvxDvXZR4EE#2I)v>~|oy2WCRgYfkrlYdET^8;>zN!y>)qMpx=>2Pz=NeF@ z60XBj?_aHK{ga6Qn)2+AXawtj0-jp^-@v)m{%%c6K_Rj`EbfM!+^;*I77#jXT=fGPSK>K@up00O80Zqu@wU{=vF~r8cND`#;5B1DJ867stc|O|A`1sT8!)z9p0U{qH3Z#$OYj?U%iG5 zE#94u@^z+vZlYd)tbLVbYYB7Y@W7#DU+B zyATOFsP^x}(dHzQ5ms}WPHxWH2>yC%3`Y8sQs27?gawanWACzlEhYa95urXK*(+o9 z)x1xLU$T2x$LJWH9zPuURU9qAV$&?c+I({wCBQesd;0rJeHB&w4)CGgHdDV`U{r5s z{p{UMc6-^*<}pj+$0AKsGOxWv)QoK`3^!-hGRR0ed!wOXruu+cc9xZ$ZMV%Visvt? z)v=?RR#XHB!;5*|vnTrFHwtl0usp;yp1!C7c~U9Mr^o_`di@SbX}Su+F)zo7@|$Zh z-&WH=(>vqW!2y`Q^5XK|6m>Md+#oVgl2~;#uljUe^20gvSw)SAOi zQ#;J+DK1iWgwI19^2q^of|olqrK%z{6KULLW!CFoLglB`@}}sfGFUB0d%c)umTmW8 z)z@?$^+826m%#7ye_vl`yqDlwQnB+g?OsUn}s620!^&Fu35LJmX{mc5i0|+|QF}wyE9^6PyeB`MH z>m~mIqFU)r5a3Zxj#5rK4uIXUNuSMxDp1oF>gITyMl{DO`g(w^4B2@M9(-`dgm=PS zh(W|J5P?k{4aY@}^pG(soP&hMt5mNNz8~Mg;BO??Z?m96D}J{Z>&;63{%=HA0-b~- z;`gHzVcl7Dunl=|45B^tm0rvpa9s_SJz%3-f;D;Q$Ib;GEB{IWpRob}l(&7vPP#4?W>ONM)-Sxzb;+Z-V1bW|euWig(fCK{(6Hje|0* zRU6NWoGZlH)(pz2!H5L+%w+n9w8mlQu^KjKy+T0EY}(kW7DsGIklud>;)-K>^^B;qL*b06E`k3jYW6N{2*V zMrcfVXcQ0NGXOu$f+^Y^f)G{wX-Fp>IMBvd@hmFKmkpINs=MN&jd^jL6TAExl9J|^ zVX`LvCMmDYc+ybRZJ43?UaExq6wT%U3 zj|tVv=FhdaHO`?wTBG&A9j9?a&S=}Pu?vOJ6bCDvYd@mAI6texue|uJwEUAzy;WE% z<*b`Rmqf8rr{{8A27G$$zxQ0NbLxj|dUU$y?Ya;DtNWM0&7r{{NBbS0B>ZT!Z*<9eqp zIbw|PeihEIG3$yOTmDHg-YDA-u|p${#o&^FFO&$$LAe7cd>yk={ulHjE82kC#)|E(eWSHaUsgUo9v* zTaWeaS@IvRT5c4N#o4a2@iV*|Rnh`S%sDtVjs%n&&GoA)%*xI{{02~#)nm@tMThbw zzVr%pfk?X+v9ZjX#0r+pBN2}cnjAl zhO&aC)VuK$iQYA5Q$D^3h~k7eTzTPF*5%{&g9v*%FznDjUUPtCCJT7l;P$-lH#CgQ z!7zdx*9F4}V$*aM!U96-!8@M>`|(W}=mV_;9uBN9bwUA|Z=-YKUrEf@U|K{7jVJ3^x_OPLG`MNXzp?PgridtZ4N;H zJR+`^lKT!}awOpfkd*su+Kf?A^_Ke{w`n(z>QX1Sao2tGQ?wfpIrhHC?V1Z#cDTWe z>e5a!>?g;zO^lxC)T6do-ytxzq~^4wKt}=0M=;-`(AmC2w9-=d)G{Ox{5KHWPVip= z{NL$qDe>lD5z4}Xn>ZV>66C^B4mxR}!FdQu6*f~e2BuRwRw1>{!V@f-ITP=W)H!(4 zG7kzOlhSun!6%Pq*^gjP7%j~6IdKIY%GG7)(Jc75oCDsLm6>iRneQSae-#_dd)leD z543%vus5GLN`}qIR$DO;!=#ptSp-iBqijHFI)#La$fUd2^|&X6`3HVEx?K<1Ltgo6`O9?mRO_qSbjgzh&q=R-A~_tvGb_v|?JAxe4P1^~po?Ri(N!9fuA zEr;h@vgXmRx(^DR$FtW?ecbox#tq_IP`CI%aYj!3Hj&8%vX00Va3K5}YSpQ8 zk+8r!1D^T=Mw(GP6IbH&n6lDz5$U^$*~lzIDw1W+1v|0Xbjl|v6-iRt`-;8P`CF+0 zd{Az_ZKaDM3D_AvSp-=TZl$Ke`krR$QVT9(2TK=N8A@FZPcM+P41J|zP{imPWK&yR z0Z~}%G~X6c=2~2+m6QxRj+9_>!Vyf)vWeUCjzkuZJzpLv&BDTB%PqhfUWiy)3wiLQ zQr>kA{p)g;kPRU}$k9siMj@dn4$AB%Nx~5)5+ZEj;bym4aQ%8Rngt6F)q?qLns_ATIiCT_P!7vOfp z%PjUpRLF36Cdn|k-`oF~Q6w8h4&3tfpmr(bU{{4#W7|iH{b{E-&y_$06L6XK9e#*D zi~L{o$L~B>u%2DNfW4acW?Q#2vd}eOFYPz==JN{d?vZT+co{CdKfyp+^TJB?EEqKrI<580US&{zGa7_OlUjhB8z+|p9ApykM5 zTR4i2YF@GcTRT?hnwJu@w%_3RzpAUry+@2_%XAk;OKl+_sT&yM~rP4VJjP;1Fy=nKLIi5!YEvWWjY?#&HE#Z?;0QlyMk3;icGp{ zRJ))YseHA|2*}1m4$>w#4is>B0$>Lj#fJ`2*;wwn4`deeiya9EhVP)%4=J5T&Vsnyd{Zl0^cD z<9V0{lfj|E94Wk4letKss90b>XstHQEN z5$6T=G?9|Lw?N;A@RSpy8pxWKP|SlMYnmXdP|R<<4D1_DeL{-4K#=tfA}i9+_|6fD zPdg$BvMw1xRPO?) z(y5R2vVNHJz;rk%l;3;m91YN!G-F`DkB?;)4(6Fw**|S?^gG%pJ(lG;ZB)y3+;dvn z%qA1y|0>V#tvtWimc^a=GuTt5l8D2#N~%Dj;a0$_hb>03tY^lUooL?)GW4DupQgDt$11);rym{8!d>K z#f_!KtRUHzF{XEb{X-a}#{@0@5oww)%KhSP#rfv6H{e@n0S3^Jdj)jn(S=P%p)<=a zu}3aD*r+_rcrGNFv#fs;ai*tF36pykd(h!|P}Y`1nuPq+-@@J`@g9h5oC97os?Seb z-dt?pH>luzQrUS7`BO*7?||%B*|v(o(8@jahCu}-w9z!#FFQZ=AxC10fQzagl-b`q zjHex_ko`TW1x4J~4I~qM`JikdLpfzI%H;%JH5OlvhPYdNSwF3zel)K36^zH;IQ2<} zhYhpnK*q-AVwx@>OXe_pW;{c)t;kCjs!KY>Tqp7AG$qT6uhnj2AG( z!j|NjO>^7zH{o8EyKpc%aidEQeEROSh2R8OIoqs*pH%t-E>$Q=2dMB%!3a0N*pHQB3~T$Hrln(m7F{` zJnb;!cs|A%YjdIAq39p=RN+D!F)uhp2cfiE3R2gg)gk8!HM5dy7cHApV?3QdyAMmg zIs7}~MOQx2ZI8SHIRd;6kxBEIu)sAFMOM)2xlG1fHX*crw zhl*G$vEx4zD={eD|3JHyf5+VOf&o(Y0oPvKrv?j}KG?bbiRAh2hxB#@;~=KR7-BuC zg5dXpiqZ2#Wm=cX;)=eJ6kh?zth&qd2NfF`GJMT5enOQxJ%7+1_g_2JVW$zf7#FC3 z81UcXPyPj9$>Fk&*7{ydg{)JmR;#p z;pP}1Enyd z!1RZ$KCO%Y0iY}R6MzSBDBXfD{csNM_R~tyCu!&tkbbBS$ogo_E{R<&nC{QRWCRnt zkGxO-%SxILV1dMGIP5gu1qQU03&KE1{ar1i(Gr*+7iraZ;V&sQk$On< z)g6BRGMT`suTH`$$lv}ctRwZE+M3}@keU$%f42AvDyyR`|GAY(g(Op7#lIym@qYmU z*n#|(gs8Lp!mk|_sW+lG*1hiMB~&qA4OmHG;Je85$d@9jdn0%R<;U@2gocs1x|d8T z@cE0Mw3fACO>&;P_kRoLDa;KowNz$>AF)l=rie=pp^!$nQ%&=_$eao+NZLQ|SA|;^ zU^>9Xk9-$u$BxTu~d0~p)Zr3{m z^kYNNBa5V=ydsxPZ%@%XQV55C8OpWI%A>d22t!;_kJRR&RKPfcI*;HN#qR)q`|;b0 z-!A-i;Kz!e?J|m=>%yDk&G9~u_j$Z~@b1C;65f~a?#H_yZ%iVe8;Ce?7Xs$uJ@)7oDB)KNx2i;Y(0=t9M;*sB0>k~1+@fwPN9Lc;9^)3wE1p|pr$Q|y4%+D_V zWB~OxY(_0+-|s=`nfL^(WS?BN`XrC~Bn(`TgEDX1j_(8bb>i1jVxM-Rd7)kZSWxd1 zLA_s$08O|h@(lOY$0_R3d(GO@F@>p@#^d0sIV7`YT3#ed20Dl#z za;dMpJQ!>ky0^me%{z?S9^_TV&BQXuIun})$bCot4Q#CwCsJU!e$U1vC+6-L4U>}X~)E&3wZ4F+b2oVuOYY+1?D0U-@ocPY)wH5590y|>rYGc z%_sLKNo@D3`KS+&8P|nJ00%pIZ0c><_TCRs$=XNyTICTbMkj4(&`GSN0Dxt zA3_s>NOYt}lKemG-JM`BvHZJpI(k*9C zRWLg3#x6wWT33~&CvGll$0=r;I-6$cGn3n$lk;9vU5iwCk#>DW=u%v+2z?s2SA=@; zXZK*tfY*^T4d&5!HvfJr>2lgl;=A!_&<$OJhS>X|Gm+zY3!-(m#J@R|6Il|6BX6>< zRd{Lw`@#W8dmEvp`XorFR_iBsIBdvNnIyS)=AdR7tI<*V>f}cHC;2n`VvjF zt{X_~6=1isM%M1ZX5z2@NW&cVC=s48d@Hx zg##CsG6Qr(_{#U`EKf%&fh2K?|Ir$r$x0)<%GK)&s$J?B+?qzJ0i{o{R1&8x)75h{GAMTq~U#g{+Wi$Dcb$DKb3820dDSrcS0WS!rXL6mCw%y zv4#ow_-RbzXra)dDJT|>KCS4TpTXoAPZxiI;x%&x3hK2uFP&DyV#}=KznDYfuH1Z( z9|wGKp)@E)J28><0usD<~fU2`69?kl3y~ ziw3+;4ZvI<7lq(@ZE*lviRh?8G(O_kUoZz-0TvPcz<+-X`2#q~2a`mCe*3X4-P@+C zUn!`RwXyi~mB337dI|^~zo7s}4zuVODf(b`A_?|O_>k2Pa5xA^CGjvVbvhHo-|y%D zE-Hy7iH@7MF`t)hP!%f1&9nRmFId!H{2pqeZn%-)3Y~#@>vcMp8|VBdPNC6}qj&$6 zl7y&b4J!-Ws|_cPVl2k0*adA)MFrNcRl%2jLsoqVCoa{VWl6AX6jH8u_OMzQ)sae3 zFx)`BWo^2Nm1SXJwrEa{Di?WP(|Yxz5Ynu?wo;EbtKL?GzrwJa^5b?%CHyl0$CVS| zR=lyYR+?VJM?tmQsP2bcq|u-J@VarW7%C@;$;AzDS{B3xNBAR-SCALSk~BB=8Q?~O zzubw4O$$Pu`6nOk>jV6{dn3j7%Y~9dlGb0(_krQrVd#-b9rz<%P&nwDk71L>J#%VC zheQN|@f+S+IE+|*sQ`OK;X(kcGPO(AghydM#svPsHw{~I6pTNOC(GO}RzHcEeOlh?xj0$~sPU`7J_ zar|TOFS~@}ETN7x!XCTf@d-YD=NB4)BM|VALdN;H`UvYr!d@Vk?82LXPeq01sHlji zS%^?Z5Y}z!aO?&6d6dpcp)7w9A27=Yx&xpEbQVZsRQFh&lZEq@=&a$Mf->U^v0Dwb zf`#vSVbPn4avrZ+37tX!$3lLp>3xByx&=bT)szpyq>IazK z?iW#dQ=#79xqc3M$?DT_{4|cqvjP0MkpJvR7gXsGR2dJe(6!x)wQULvC0Etw(O5W( zesjA}I0%43_?sL_BE4}9HIpk3AkceuJtnS3LM~sa8{ePr^ z(HaavP+F_99S~@3IzCM;SKx9@UHnd-bF^tazvQQVYF`F{RXN{2XP|BmNA~IC~5u*DhF)T#418*U^93KVM zIhN?A3(?IP7F{=qu1konb69k9lA`-F>fX7HCRX^H*UuU$wx1HsKPR^L!U*-b{-rS-r`#9Chyo1yL^JdN{GJn9SKIXSM z)z`e7Q+t^gb1Fo3ajMijms7pXvp7{@p3JF%<{YTSdqZj`g_u)0RJb{bQ?=%JPK`20 zacYb?oKxe?ft)(bEalWBb1zOEYxd#PRI@jyrkg!DHPh_Eskvq$ry9)nG0m@?lyAPt zsng9@p;8hy6`+2Z&l7eN9Rrw8a@tbT9^ka|NxPlXQdeyLh|>}aqWNu3yM(mMIPEgh zF5iy5e)JW}c)#CgqJ^(khLyZMfi!}{`^iVt8v|xVbF{Zy|{z`M) zadCZD=u>?Id-WLofyZ^1d5)abK7s2>p-Tdzw4`P@vgO``ocJ>Koa@ym?Gdyq- zZgidJT#~q6-7aE@||E5|l`r0NBJz&jj2;7#HO#P0rS8m4D>;Ms&39(L0Y z;@4*uBye7ho7WK&%<`Fn;;pn`5zK5u97B)-J;5o)`~{BT;Rao1wVP?t0ocRBb(64f zaTVQabePwvfA#)?-+LP!i=(~lsv%vkr_mlr%{elW_z9*30o zDc|$g2zQ_o%rdrLBQORPSJ@ew7oxw#DemOv$YL+0@&2S9=3^+dTM=G@{Y)2Ff#Wp# zer+}QP`!NYZeh)F`;0x<5^=wQMp(Nt1)SO$>~D{{-=O$#-KN^h>V|D#1)cyBLy0xuWoVx z2XxMWsQ}(r#HBtG|MkW6j>UKFX5ytsd%PdNw}ymQaY|WB-e4XMN?NwHIDt`DEJ>#o zFg6KTTHz{i0D?=!cp9`;eE}0NEV4V8MexXXB>eH}|keF}>^V~gH*5V`^!hwY5 zH;-~X-=iOIyyYOm;3G)H^;T!|{ljo=EUg!4V=R;f?9(g`w3FCLfX$DjQ&H#=9 z4ge|vTL3syxP&u>zj;1Hk(p{K)7}7IKp4>|y6atB@9y z1vy^00s1ol1_tYy&O^_K$TiKm{`!1~3)jZoU!M5ErQxHKrsKGTH2}BI zOkWgVoK+TWR^KqV_q;(@4SHa_L%##x;C050o5{G`hxxbt$)3l-W@vw=C+03SCgWAp z47@UF{&f``R>!H28fCZ7LIz=3G#*;xDRBvQ(N6Y2z<0tWOg(zy5`XLvb5van)$Oc~ zA?zNl{MXfZa{Qt_7bpp}r!3y2EK+}l`9=bF%#{Bc>N7TjCSik^Smek7jcN_f#r(M= zJMDd(i~U^4or}4dVtivwF+QO5Te(itC}?$sJp5ZuuVf2dU-)qC4?}dNtWR67C zCeqM#mg>!v>{MQSz2$&UQkiOM2|K26ijdNPA{ydiigi&AaWXn^M}B+ahJ3hC_3?sZEPL)qQW_ zC24~^(L5N(Rf(oEW|GH{XwH70Hp^Q;&#?#3a6m}7^w-ZD!@hHjc^QTz^QZdoMS`Lw0CmNd(qwPdP%clSn`f3*>0TN~@EF5~BMhMu&?@A{P zXs?OpKB$9qea5=&O=qmtrx1LiIh`EQ1Sgl`9txkR;&fi%3g*cksZ)jp=l{5HnIZ+81#T{I?-|v~=iE?aa-#YcN+I&Tl2YGP7dYA|-@v|n%!HS+NeG1#U2Dgih|z~}fCL_X*OD;^$|NHZhUL*_oDO0O4YxTFqhWOM z3{0Pgk&r{$-lDy=fgCCVeCKF!`y;-DUxv28&Y1gdMD}Zj_fy}VIkNE28rtHED-RE_ z?Bez@KTXl>MGaF}cIJBz#bWpyc%_{?JYd1G2ce~0K8`SB%!)IZSMP7QYft2!af#kW zJyR|WpdH&w=6T3I`pHCkAJR5BBzBf*)M4CH>p&5C$B_$YT=)%eSdT3mRaHGw3E3?j z=vdR}L5--+6_*}EAS6JUhhyD`q|n6J&=XE@9%>2dB<9(;c~)gkUqrQLMpZQ)YWb!X z4@^fND?_#}nUj8m1;iPY>uB1~m)IrTVmioQA{tVT8vs2IU~sVC)&5|MUBfR=#TiQ- zwwV>13hV@D{vwk39C1|RAy%&Hc+vhRO3pm62n8_8sXR=eq2rv%*x@jn3b=LtX5p}E zBW~aBn&IR`rHN|5J^mGAUW8KPR&7s1oYDll(ug~yqwZ3r8(!@!IaoUC&c2AdOejJ^ zA?14Ds1%Rc#0;TbWrTxemRX8>bJ*%Yqi|DTgC7@gYWPixY7f`V5%;@BxDN=dx<^ynmi=FH0-0>@}VDkTD z60FBicF-qUA9Fypaxx$LlaT0UT+MNHK|ichnSoSuoyryphNm%h64w+PI<9eo=m%^J zfA%~iDWtjF#!k^?N5$`m2D8^eQQVVv5L@3^}!9A zc?dDibY@qT6D|i?_y7%_^PGu??{mY^l7ogJ7Usa}7H5W<_U!uJEwRNJlk-lJyN3&Z zwjyuiPi4wwo9FY1{mz zFZ>9{xh44Fc`(sFi1l*ido`G5z+rmD!|m5w?JFN{zk%$L{HCvo0!3eW=z0P_J$0jmI?0_e`#CBRj{pMX|J7{(jm z2j~Y#0!#ut4_E`(0XPHr5pWY=_XXSodI9<7N!!O=2qDMJ{y zb>kSfn`!lSo0c(d??={~$xm2jPF_a#cu{0_?qH)ql&a5|q|^KP`8mTbLa)!!i@K$f zK5j~$L6;@*PYUN;Gl#K)A9ld3~>T-+8bikgWtrljcd^3sf%nNv8gx>OP2lal71>&&Z<`a{7LGvAWa@y)MO&k&|t) zkJW)VhKE^Gau{DGn=vw(_DA|k?pJ{ilzaGphq zm|@MF7&*%hjcJAoBBDDQjMLckvG^D!KQ|wr6I?LO7$=g_?1VouGRLq6^u58jh2`iY z@-qx|dCJO5$8 zxAAJ*uDy4Mj-5oEyL9#G*1d=CGtc(y)!VNREB2R2WdU-9Ql$>m1O;QhRhKqCJ!8Ve%&hF3+~@Rp2IHj3`BSD& zn?7UaEXJ{*U`|0{0SIkBr(jM|fro{t4X#spOAa{Ctx|370{M_8hxw#GKtT$#GGO~0c9oH@xrX^};eAM8$I37brCN6SN ze;XqcJ~%owa!@@cHh`5#TRMkki;{D5Gc!_>sd|ahlk-Gb$*BFw!1J}4s&Zyda;nIX zt`mictZ`>%jMFFUr-(98j(Vz{nN$3nV={Hgc{))_PPQRA#lZQn3B5<2D9@Oio1=$~ zE;&n-hDM!*ih(eo&Eitv$0Z)=r}Rl$I`PXo*G{^f|^9hfUAt`3`0h8X2w)5c;|R>pOKwP8P>t4Xq<68%%UkdM!hX1 z{6vuk5u9e_s?2UCDY`qInx-L1FPc6dnmp>+tlQVMagXYSu-e15Y{pA@_ALCC({&J0|ZId$e z24iw&eF0HPauHCv&?X*1`!PA$I`nFNP;sD$4Aeu{rAw?NfA#t11{Sn~yc`r)s%}z7 zij7+fjdc0BXg8=aM49@Q$K6NLo$-v zk}qsLbY-1h~aB}j$u*rk=EJwqK z)_YwxN-ZZlOP6gx9>^_6!-u*}){i%m!#r!5vRr#gLnp=!&ABw@)b&IZ1a)sZt_Cwq zbViCkCod<>AWF>Oav9dMr^rf=D8AD}_ry4(Jz#pm1m@~<#_Q3WWhbLYHfB%E&Y7GY zgfg^{keg9-c6P>KNX}Fu_>HvoNxCpSdMDJsIDU8!%}$NW&BzYRfoHh0&J(zS6XvE5 z1LOmLzL@Xue-GL{h{2Tfv417ZgMSTu6f*UH0_Ms7Y(pqw>i_JRC;PMd7d2IZ2g+Xr z$*lj!H9$~U_lJXUS0ayve(~O zUh(FNm8(|2_4b-~*1r4R`|Cbf|KUd;Z`inL^OmjKKKXR}j-8decJJBy*}nY;4j%ga z@R2W$9y@;G&Te|6^U*XO?Z_WXsai{E{J>4zVGGGD$@ef8&S*K2P4^6SmtZr#3f z_ulXK|M;`^Z!a(&y?}V41;&3m|NrUu|2F;qYJvA?dv1aEpU%HltIEn!(T)N3mhklw zMdK5ZW(qzgI=WA4Y9DCu#YAIo0)RC&)=AuQn;DcdsZKu_s}VxS>2k4w!8-^wjyL9E z5;DM;$%Qchb5RN_G*_RI2{k%dpOOx>pKhGqh=m~84M@)Bw1|hoXAmxh$sjBW2apYa zQz#7bPkzY{6PIi->QiAs;psCtU3|JxpJ%}h)um?ZEQWYYQwbfNlg-)287*qEf&4P? z$G|-UcjN|pHrWg|2`qaNL$UPBnH*=}78Qg~$kXWukDGw$S7iMnG!*H8T~uu*_`LtHeKcj-_llcrg5H@}nYQXMMfc}%a_-bQe(c(Ty zEor~BsAPVtGvl@yKzOS?I086#RY#^I>^ z8-_FACY&M}<2DCio6f^F_JofLZD`*(9|LH3#Ai)Q5oT$awby$-Mq-`4&d>@GC2hivQy<#c31L;tq<-vhzj zUjuBzZ%n^GCO_W3a!Nz{#^uv(T0{HB;eSxn(7v(%~deblT+X)Jz>yZihpPT%#dehyBAi1MNCu(3po2mUem~bHcC#s?W(}o)cKc5pEj* zCqDK=vEtYD!$u*KU>}z;RhN?%tINaYV+uysI3^7HJG^x$qqB>`K2N>vP?(cb>&@RY z{VMqA1$bi2M{xgFqP+5_dE) zz#az&f;+j6Pm}-4?3nj(VI+l$68&u5cqB2uozqlwlRZzX!A>O5{9yFv=N9K-gZ&C z;xXw{@}ejL9DU=6J2H#_|6u*3@Vwi zwZXXyvzTL`lAl-$KF*?I!-ETdI8=(8&S)vlEPx1*3&3^+LwBtyt&|T+PXU0^Txd~? zpptztfb2^E6wV^RGXQ$ zI9lR97#Y$OP(uF6kLXDs%Bhm#qYv+ z1K8N2DMg(vBzfxsuX%GduNE$^B5}7&$jkyxT?6;KR(`!w#9Ke`TlgoB3bCjgpU{1% z#r-C@Kf2=5igwHoE6giKK05rFZ*o3{VBjC}_2{of%$TnyeC_|B`;%wRSKVb8@k~Bt zd$;pR;wSf{ zQduut_+(%WkLDdUTk)0})V)w?Zny+0H&ug55r4UbaiclkDyUCGEr99{H6AL>oxP#r z=!?0znQ?0e^;4+rp_V|UIcXBqj!*-kc7l3l6VeW~0%~WdYc?`&U7$KarTNvJ4U8L| z1eu{ug?a`mRmv}+(q*N+P@&Y(sWH8*W~)kW>9d*}tGsQ!ePi=qxqp8hTdM1RNdGrb zqaa@SuV9wtqqaj~kY7^K?KJpA4lh#Gt^4RcnDtH=Aq#SOe>D)fM&_8fcvAl9FDCr& z`5y~;kQD%0PgxVuSWj(D4HyBS_OuwV5%4A8SHM#s1Pd4h$O4dm@}mL_2TTTFJ;iJQ zoCN#=AR^Ke-qCKk>p}rmRbB$7z!$|xm0t^$`m3=}p>Q9+ezaqBFo9MD=};Fw zU{72?=%*fn=i1jp@U#d%!^Ob=@bMrN;LQ)gQ(eFF2)q-#iBM=2sKl4}fSAf)m{DL> z^Vq2ZMvF1hYF;x-z$79(tJ$9E%S1ARnCKA;xi&z-Pz~B*i8I8aK28~i%(m*ZtrfGO z`H{|B1W`vibL_Uc77n?Ta;;h7XPdLu#tduVqVTpT`BGQ zKbKVxUs4almUM>s)+ON*mQx*<1aNAzB~nhc=hWDYlyvg*sD#Eu;O@1+k(u81uGZ?N zifJWiA!z1YfI81@oW{Bt81emJ#G z;hY~vxPj0Ww1UhIIIa5-PDMMIFkwl8G8XaDoaBi=xF7Zy$9~`zHo$%a+Fk+TEwHGz zUPQQ(?*|45Lo&uMvY@bS|@`-Ro)=!_OPl1_eLbNHcs8%%@E2%6kc`bf3;Lg3EE z_&2mBypMX-6zx)+?9CJ>dolheAjZ>K0BMZ$FliDK&g3w8_|-9!m<%QbY96o|kb98} z8zW<2Bn+(qc*%!cXvJ3*Zwgxo@Ywq(Cp?4dJbcG0p@1o$aqQRCc$0xd^p{5*h)G)w zDWQmn^tGPh(ADM%A=Vcfh-QU=R`YTY=-_T4bC^<5AAb_0XQVSzkPb>uGWK7iVVi~2 z=z(pNk{AfEPJh;cqB$lx7Xvxnc#VUP*fhff$g+qn-^7P5l1gs#6gm+9AX{ot=7T{B1=KgS0%UX4?v7K zJ%UjleSb)7jQcNfWe^fB^MLaS0!XkeOSlB-#x<9_@l?&J2lxgkcwwOFW^r zR$i9y4P;MRQ#TzV-m7{-3~{uZeZ}*caawx)zN<#g|m3nflqqxNdetCGkR1 zE~|mXD;@f$i)-!lEqMzD7HMUU`@_6J59V?=&WXKi5vCj@RfbE3yJZaO}ik=y?lll;@lx&7~on8 zny(o*;VFiEU9C0Nm^g%eVD3w%jCgXko6Qdx?}O!{rOtMz0NCg0zwTat~j`R!dahcgQHT;7QpJRCj2cLwFX z7w{3F0x%z-2V4cvCxq$^xQT_vNZ2HdT1n}XxqI?y zkd6|rpOlm{ZbF(~H)e8v?wEWxO{Bl#rA*8?lc81s1hJ5nZ?*6SVxGs#V zinA-XQflxX`7UEulV>lK@fIrFU1leVT{kM!m0VdjGwtFuw~wu)x-sgqFB+q-4ee7= z79!Bt$p*(=Y^HYikni7B52^%_IcZ^#l|yU=vAom~T4_e+@SFxb2MyNIb(pv*S>tjb zp$K<`Co)W1A#R}4_4S183=;6eUjoPU(P6}7k|CyJdO(MZ#fcfZ$%E4@f;AZMLJS@k ztHV8S9WMOy9G`usSlA%M@WFAZ@KQLKOqjX5$Bn}1hcxj#1r5`rsl!`SpJF#qSI>lWBobg}LmP_6>cJ=}UX+RTIH$H3q*CI7g4e zx_2;EzGJxcZ$Iei+b+ERC%;2LJrJG0@@g>jH1`(bkAkN&U+X6Y0uxNkKK0yObUf1! zY9{7^k(imLVJ?U@3Fn4oqzua_0a8qvkq>4j>Vbd>gPSbOVUyv03euDe6RHS4EkYWP z8KxfQJh;l_X1N*AWiuk=BO9^mV4KUuoyWNnp@b)Me}3>;?|&+GyHeoO4`EDXMseY% zBNRbhdTC~x2RD?DT!hTWLkn6Fw+!lPr3gdF$a;gjA>Ck3z_UDU}O_TfruXs_xD4mq;lwxJPGEMoMGG94M`IhoMI$rAhsUdZqd! z^(X4xwBh@ZehgK=fM*<&A4w4!5yH@08sZ!nrO-+}2+kUB7u;*afY z6QO-W-U__08F3lovwK0@Xo{b> zC;JRp*t>VJT8N0VPXsEMk;0f`AB>IRiuiTyC35fdgY-SkAD8Wp;&y%-)T^#Cm>OI%n)N ztp|+kGjP$wxr=_4#SfERIUX>2Ty*RZ>2tfMrFAGf@a?mECph1dpIu^DbnAt6>o-n% z<;FV$QX=~MO>FVPpn*N-UmG^S^kuV4?RwoQT089Qk-oq7t~8!6e|P`$9hPQBIlbKR z{JHDnFY0$k?tWuz;KlEDv|gE#pW!j>{oZycYQf6Fy=>twR_f@4YT@9}Odt^YvfWu9 ztC_SwJ#J_Q#pwe;D2zTJm!+P(Q!QE!)G&qBF# zQLA3-N3==ac*fz+(sMT!E&4dIUC3M2FYHh#*Bb*2swIOj$+x{)cIf549oBE%Ur|1^ z>fWhTVPDxG!EwooHV2~D_SpZ+#W_)Sis<6}efQ(4s;eC5e!J?GH%7ZG`EK=&okg?v zjJzyHkQj>1UL-d81d@ibHW<%+TC=R<&jDOU&vl=i*U!N5|dt`go{o z?w;R&d;jH%R&CDjZCx<-pli?UIl>#&H}iWOclhj@bmZu*k^a9((E9cQdRtmw|DA1L zzEB?9FYNZYENx5iszxMZ3r#jHVMM6dlXWK&JGr|IB}s$&Y*AQpu1@U1K27Lm?k&QN z`fXo5Lm#a=d_?qt^Nh0h z<{E1@47zb)m+Q{)$=g?^dVl@N-9wUhOW3kuGv}Y1_-()&t~-xk&HrWcTQhS4cfR;R z%Wdg5GhaHiJ+}9|TFq~pPK_GV-fsE5J`+2xy1jDgTkQ_mU7Qsa`+cjiS3|sKZf$u! zc>jhAbGMI~IzjAb|7xN8n*O3M#Ca`;_CAs?mAw4)t50t|pWbKfkKgZ}H~-l^rp|NI zwigc@nq%Ad5+e!?G_pJ+pH3fkQ94|0IlUdA)y+K8#}hrGqaH zTKZ*|ah|t><(&uTiVJR-6mvf|dfV*Jr=@>EPMX-+t0_ zcF@MxH=eyXw06ga&u0F1)a8wu#eeoZsg7;mUeV)r@Bp?*xD()OX~&_9-W;LKzi>2C zm!{|tW!&8;#q1cHX8gEORL;sk5VTOguuMqg6-h)f#&KA;i(>Q{StKgBL5mfI8Vz7M z&M-{jMpP*)7elHieKewyQD$wLg&UqQ1(r^rg?sDzAyp44R-!>V!{i+OM6sGx@=5fM zhX{x~65~rUg_8{;sv&t8lO|7|+;C{o=O&AMQ=Va^Vn4PQdA4`&Ru{T8qr_=1qG6gQ z3;rxCrHR5{HU1r+Ui)XV&-6y!zej z{?mKUnPncj;QjHtCH{-tMfcz7>ajFycges>>B3Xb^%~XrUTMqje{|}-sOL|Dgy>(g zWWGfg&Q46)bo%Vt!av3wDc+Xy`mrwe-%`>YOkLvuMNqSU)qP75!wH2xw%1t_(Q8w46RzTsQ~9l=wM&H2Rj#cT)D3r4_AC^5b0!irXPWWB}hSTDZrJjGQR zNtm^RkV?3Lt3xYcYoUkJZ$r$#|EbZW224*sIx>IFg{_~-*}?)!OjqF)cJiAktCIii z&9TTWciW{7ZfBp7Zc-eYW`B6w&PE*qbz$pNZMF=UmT)gM;cCdLpCdyTzPhaJ(+~VQ z9Ln!{*SoFjtm^bn{m+&v&VLhpvTQ@}hefa4ST$nX&wkxco}Vtr#pDhO zNyfU4ai>kk*uSrJ(&Xgs2muVKm=#%Owaw}f?b)_e51l=p#-jqFemVJ~gn^={j4a3` zN)-pOfn?djT^61(KEnVB&ynFGYZupBR4*Ah4&sp~CqtArCuW43fQcsgTW4}DJX&BI z6sN_xB(+9tiPHXIQ9gD#v!Rpkn1j8wEAIXNUdYI&_PdnzSf3T#qcZx=ngj1Qd%t+u z4ELDlw`VQg)Lu{`cg+a7*Jj_wj_){yo7cY^>~3GQuj7uyu1kaDTaIsI_Ptcwd{02f zFSfh%->sXyJbuv_!<>R<*={4cJol^Y`J{!DE~j=d1$;a7Y6tE z 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 diff --git a/dependencies/inpout32_1501/x64/inpout32.h b/dependencies/inpout32_1501/x64/inpout32.h deleted file mode 100644 index 65df09699..000000000 --- a/dependencies/inpout32_1501/x64/inpout32.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -//Functions exported from DLL. -//For easy inclusion is user projects. -//Original InpOut32 function support -void _stdcall Out32(short PortAddress, short data); -short _stdcall Inp32(short PortAddress); - -//My extra functions for making life easy -BOOL _stdcall IsInpOutDriverOpen(); //Returns TRUE if the InpOut driver was opened successfully -BOOL _stdcall IsXP64Bit(); //Returns TRUE if the OS is 64bit (x64) Windows. - -//DLLPortIO function support -UCHAR _stdcall DlPortReadPortUchar (USHORT port); -void _stdcall DlPortWritePortUchar(USHORT port, UCHAR Value); - -USHORT _stdcall DlPortReadPortUshort (USHORT port); -void _stdcall DlPortWritePortUshort(USHORT port, USHORT Value); - -ULONG _stdcall DlPortReadPortUlong(ULONG port); -void _stdcall DlPortWritePortUlong(ULONG port, ULONG Value); - -//WinIO function support (Untested and probably does NOT work - esp. on x64!) -PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle); -BOOL _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE pbLinAddr); -BOOL _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal); -BOOL _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal); - - - - - diff --git a/dependencies/inpout32_1501/x64/inpoutx64.dll b/dependencies/inpout32_1501/x64/inpoutx64.dll deleted file mode 100644 index 82c343fe10de5d96cdc86082ca99db9b0be2aebc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98304 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 LV>9qSnt`7HBkO?C diff --git a/dependencies/inpout32_1501/x64/inpoutx64.lib b/dependencies/inpout32_1501/x64/inpoutx64.lib deleted file mode 100644 index b3d0dbb749367861cb4dc106beb96c63c4f3c0b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5192 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 literal 0 HcmV?d00001 diff --git a/dependencies/winring0/Win32/WinRing0.lib b/dependencies/winring0/Win32/WinRing0.lib new file mode 100644 index 0000000000000000000000000000000000000000..e7adf350ac510faa09714608bd7ec89f89bb3cf4 GIT binary patch literal 14774 zcmcf|O>CUS_1P(*H33or!IY4!9VfQq#9rIGYrAT*{>8D@c3fve+?LjHy-TuaV_Wtn zB`s1f9CGLZapK4UsZxXxN2FeIh`3ftCCC{hP8<+N6p6k!^UZv3{=VJKI{l=V&)>W^ z?{8+_%zLxx`pw4f=JoR(Ln-qa9vRI}43A8Vq|J8qIhq|Fmzb*^0I&^k>>$AL9KeY! zfRpb_=xGNK@IAf>-j#6rQvibQZVA2k7J&VF2_8u}RRtjEyDnk81VGS#PeSTG0Kq_~ zgwxZ=7omSq!o(~9!I_UGbbSIqFz};E{f*H5p@gB&u|LA_T?y&Wus=ff2MJ@}Vt<6(cLeL}3ri~( zSBvYjbC+gT7gmZFSJ$spwpJ@!*V3@QzI=Ic(WQWYC=y9fyl{EBus%CgoPzv(xi(v^ zUaD=>ZthJ^{(io&_6Ousxv{hEMMaHoly~^^I8p8z($us5@Fvr;0R zxCFBmsh0M39U9h#6ve$whk~``FH~z5p0(sxOE)43g_WrS8yXjpzp|@o3x#+P?Plb; zb3^Ln@U#*6*b9P|PYxdndDkL)ZFQ}7vb*?>u$<{?HcIOi6)|L_!T~l;`arc795;Ww6b!B^3 zEbDo1F9XYZ&Hgp&R`7N+(dg+)t!yf}Ha{0@8N~CRN|iOPDeGzCc~7m)+B{n@tgA)9 z>?EJg$*DJwyFsk7=~$D5^(Uobq}Nw23F|L3iy1KWV+A}k+R|%mIqW>Mz4cb*nqCkE)|vbk zpfG!rT@;V!gS|}(v$rsdx)*}oEfVQBN42%W9MfJnE<|H-Q0gHEd*n0+i^k%hHAEKn z=xG)xyjYm$3qFa&?mtuA*puhCIeg+3Xz_5!%<*7zyntIb z=FSx@kEkpzhQ`b+lZ!)T zaWU0pMwx6}vgR|t5uN!>VCr}980HYi0k%#6ynhm)y$9fXgm)1>JsstEy@*42git*N za2@lU(m24qet`QafX)GcX{24m?^$H}@fmB6USI+`0 z4+6Y-4&b8^fcG*0AB+NgjqUfb{Q$V!n5!S9D$!h2Rs9Z z;5qmeya-TPTjy_6Bv=J>73D@&Bd+WJdvkA*0I;h5d5j1 zov4{9nVEjcBeP67=%h(8L1Yp9R7y)&w(@g))as;1B9-!V_oWU_YUDlo%0@dOpb%-E zC&d;gLTua~g}dnB#*iZXh|QS-osEdQNi(%93Vz~5VD(}_5oKwl-XYC%h`A3K!CUT2 zCPA#LI7oPqI;!I!Ds!}Kt+S^$)0;Lsp?JdCN`&y(yW|OZikEvpj8P7ZcNvM(rpR+R z@5VO-aY*M#WrIBV+ZZKHsBdmF%JI<|O7_&QFX+{07C1O6VrQ$T1GHN2Jl`?53KcAz48V#|31y9#1w~t> zp4LIFdS0c7bzmVk+A0_W9eK1J!Q9b^U5+uDkq%*XvQQm}#4o3hOu4>uf1>EqdDnutec2y zUbbDDmo}|VSwM3#>@&A0ZML&fag2%ra=QxO*r=wYg9DW)bi6K3tXzv#CV%wTVf^Didg zL{3f7Zx?8hF1Aqw>qar12;N!yd4`U$^)<|l-%*PPVKN=a|oCv_%l+1s zs%lZP6ljR%9}RgpuruPtINli>_Uf{fD3@|UO?x>v>OWP9)#;HM8%%{RLv+)=PRffY z31uU!if5v_+nUs*5yl@~+frkLsUByD<{yoWaMIcNcS^FZ7wSnZ3cp-d^D!|gKl-Cr zvaUkz!^}?dI28#!cdO!(*fpGcp&^e4VhH}w1ODWf%nWaRh9`~qsv}=da@X*t*H+Sq z<9}JOd`^;?;jPbf^&ds7^BZLouaorf%>*A}W4Sdl-r2zEyBB3rbyeO4$2aEjUAiH* zd2a{ye>yu(dgQ90LKhD$N>1=J{$$FqSZ^Ehg2oWcKN|6L(wd(3$yFvhi>g`4Nn<=_ zNmeULUMF!$j}b!?#(2sjR~hUqrsii?!X91JlAVnsy8dd>>Oc-nr_4Y5W$Qq)53@UP z>ZJP18?N+tg3Diy7^d@&hGuv|P4Q|#wl=-xS)Oz*yX;EW6J1^|a$6r`rYDT~x?i?7 zy!F|h4Ma4m4jq-!&C5{3SpLz-C}#s}i!w#3-}-(G#AP(^-6V-AEm7sC^6u7@_&-T6 BZ*Kqq literal 0 HcmV?d00001 diff --git a/dependencies/winring0/Win32/WinRing0.sys b/dependencies/winring0/Win32/WinRing0.sys new file mode 100644 index 0000000000000000000000000000000000000000..feaea414a8b4991a2de419dc0c81a9144256807b GIT binary patch literal 14416 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 literal 0 HcmV?d00001 diff --git a/i2c_smbus/i2c_smbus_i801.cpp b/i2c_smbus/i2c_smbus_i801.cpp index cd9c9cc10..05b702f5c 100644 --- a/i2c_smbus/i2c_smbus_i801.cpp +++ b/i2c_smbus/i2c_smbus_i801.cpp @@ -10,7 +10,7 @@ #include "i2c_smbus_i801.h" #include -#include "inpout32.h" +#include "OlsApi.h" #include "LogManager.h" using namespace std::chrono_literals; @@ -38,35 +38,35 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, switch (size) { case I2C_SMBUS_QUICK: - Out32(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); + WriteIoPortByte(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); xact = I801_QUICK; break; case I2C_SMBUS_BYTE: - Out32(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); + WriteIoPortByte(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); if (read_write == I2C_SMBUS_WRITE) - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTCMD, command); xact = I801_BYTE; break; case I2C_SMBUS_BYTE_DATA: - Out32(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); + WriteIoPortByte(SMBHSTCMD, command); if (read_write == I2C_SMBUS_WRITE) - Out32(SMBHSTDAT0, data->byte); + WriteIoPortByte(SMBHSTDAT0, data->byte); xact = I801_BYTE_DATA; break; case I2C_SMBUS_WORD_DATA: - Out32(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); + WriteIoPortByte(SMBHSTCMD, command); if (read_write == I2C_SMBUS_WRITE) { - Out32(SMBHSTDAT0, data->word & 0xff); - Out32(SMBHSTDAT1, (data->word & 0xff00) >> 8); + WriteIoPortByte(SMBHSTDAT0, data->word & 0xff); + WriteIoPortByte(SMBHSTDAT1, (data->word & 0xff00) >> 8); } xact = I801_WORD_DATA; break; case I2C_SMBUS_BLOCK_DATA: - Out32(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); + WriteIoPortByte(SMBHSTCMD, command); block = 1; break; case I2C_SMBUS_I2C_BLOCK_DATA: @@ -76,17 +76,17 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, * However if SPD Write Disable is set (Lynx Point and later), * the read will fail if we don't set the R/#W bit. */ - Out32(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); + WriteIoPortByte(SMBHSTADD, ((addr & 0x7f) << 1) | (read_write & 0x01)); if (read_write == I2C_SMBUS_READ) { /* NB: page 240 of ICH5 datasheet also shows * that DATA1 is the cmd field when reading */ - Out32(SMBHSTDAT1, command); + WriteIoPortByte(SMBHSTDAT1, command); } else { - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTCMD, command); } block = 1; break; @@ -98,7 +98,7 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, //if (hwpec) /* enable/disable hardware PEC */ // outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv)); //else - Out32(SMBAUXCTL, Inp32(SMBAUXCTL) & (~SMBAUXCTL_CRC)); + WriteIoPortByte(SMBAUXCTL, ReadIoPortByte(SMBAUXCTL) & (~SMBAUXCTL_CRC)); if (block) ret = i801_block_transaction(data, read_write, size, hwpec); @@ -109,7 +109,7 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, time, so we forcibly disable it after every transaction. Turn off E32B for the same reason. */ //if (hwpec || block) - Out32(SMBAUXCTL, Inp32(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B)); + WriteIoPortByte(SMBAUXCTL, ReadIoPortByte(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B)); if (block) goto out; @@ -122,10 +122,10 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, { case I801_BYTE: /* Result put in SMBHSTDAT0 */ case I801_BYTE_DATA: - data->byte = Inp32(SMBHSTDAT0); + data->byte = ReadIoPortByte(SMBHSTDAT0); break; case I801_WORD_DATA: - data->word = Inp32(SMBHSTDAT0) + (Inp32(SMBHSTDAT1) << 8); + data->word = ReadIoPortByte(SMBHSTDAT0) + (ReadIoPortByte(SMBHSTDAT1) << 8); break; } @@ -209,8 +209,8 @@ int i2c_smbus_i801::i801_block_transaction_byte_by_byte(i2c_smbus_data *data, ch if (read_write == I2C_SMBUS_WRITE) { - Out32(SMBHSTDAT0, len); - Out32(SMBBLKDAT, data->block[1]); + WriteIoPortByte(SMBHSTDAT0, len); + WriteIoPortByte(SMBBLKDAT, data->block[1]); } if (command == I2C_SMBUS_I2C_BLOCK_DATA && read_write == I2C_SMBUS_READ) @@ -244,10 +244,10 @@ int i2c_smbus_i801::i801_block_transaction_byte_by_byte(i2c_smbus_data *data, ch { if (i == len && read_write == I2C_SMBUS_READ) smbcmd |= SMBHSTCNT_LAST_BYTE; - Out32(SMBHSTCNT, smbcmd); + WriteIoPortByte(SMBHSTCNT, smbcmd); if (i == 1) - Out32(SMBHSTCNT, Inp32(SMBHSTCNT) | SMBHSTCNT_START); + WriteIoPortByte(SMBHSTCNT, ReadIoPortByte(SMBHSTCNT) | SMBHSTCNT_START); status = i801_wait_byte_done(); if (status) @@ -255,13 +255,13 @@ int i2c_smbus_i801::i801_block_transaction_byte_by_byte(i2c_smbus_data *data, ch if (i == 1 && read_write == I2C_SMBUS_READ && command != I2C_SMBUS_I2C_BLOCK_DATA) { - len = Inp32(SMBHSTDAT0); + len = ReadIoPortByte(SMBHSTDAT0); if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) { /* Recover */ - while (Inp32(SMBHSTSTS) & SMBHSTSTS_HOST_BUSY) - Out32(SMBHSTSTS, SMBHSTSTS_BYTE_DONE); - Out32(SMBHSTSTS, SMBHSTSTS_INTR); + while (ReadIoPortByte(SMBHSTSTS) & SMBHSTSTS_HOST_BUSY) + WriteIoPortByte(SMBHSTSTS, SMBHSTSTS_BYTE_DONE); + WriteIoPortByte(SMBHSTSTS, SMBHSTSTS_INTR); return -EPROTO; } data->block[0] = len; @@ -269,12 +269,12 @@ int i2c_smbus_i801::i801_block_transaction_byte_by_byte(i2c_smbus_data *data, ch /* Retrieve/store value in SMBBLKDAT */ if (read_write == I2C_SMBUS_READ) - data->block[i] = Inp32(SMBBLKDAT); + data->block[i] = ReadIoPortByte(SMBBLKDAT); if (read_write == I2C_SMBUS_WRITE && i + 1 <= len) - Out32(SMBBLKDAT, data->block[i + 1]); + WriteIoPortByte(SMBBLKDAT, data->block[i + 1]); /* signals SMBBLKDAT ready */ - Out32(SMBHSTSTS, SMBHSTSTS_BYTE_DONE); + WriteIoPortByte(SMBHSTSTS, SMBHSTSTS_BYTE_DONE); } status = i801_wait_intr(); @@ -300,12 +300,12 @@ int i2c_smbus_i801::i801_check_post(int status) if (status < 0) { /* try to stop the current command */ - Out32(SMBHSTCNT, Inp32(SMBHSTCNT) | SMBHSTCNT_KILL); + WriteIoPortByte(SMBHSTCNT, ReadIoPortByte(SMBHSTCNT) | SMBHSTCNT_KILL); //usleep_range(1000, 2000); - std::this_thread::sleep_for(1ms); - Out32(SMBHSTCNT, Inp32(SMBHSTCNT) & (~SMBHSTCNT_KILL)); + std::this_thread::sleep_for(1ms); + WriteIoPortByte(SMBHSTCNT, ReadIoPortByte(SMBHSTCNT) & (~SMBHSTCNT_KILL)); - Out32(SMBHSTSTS, STATUS_FLAGS); + WriteIoPortByte(SMBHSTSTS, STATUS_FLAGS); return -ETIMEDOUT; } @@ -349,7 +349,7 @@ int i2c_smbus_i801::i801_check_post(int status) } /* Clear status flags except BYTE_DONE, to be cleared by caller */ - Out32(SMBHSTSTS, status); + WriteIoPortByte(SMBHSTSTS, status); return result; } @@ -360,7 +360,7 @@ int i2c_smbus_i801::i801_check_pre() { int status; - status = Inp32(SMBHSTSTS); + status = ReadIoPortByte(SMBHSTSTS); if (status & SMBHSTSTS_HOST_BUSY) { return -EBUSY; @@ -369,8 +369,8 @@ int i2c_smbus_i801::i801_check_pre() status &= STATUS_FLAGS; if (status) { - Out32(SMBHSTSTS, status); - status = Inp32(SMBHSTSTS) & STATUS_FLAGS; + WriteIoPortByte(SMBHSTSTS, status); + status = ReadIoPortByte(SMBHSTSTS) & STATUS_FLAGS; if (status) { return -EBUSY; @@ -412,7 +412,7 @@ int i2c_smbus_i801::i801_transaction(int xact) if (result < 0) return result; - Out32(SMBHSTCNT, Inp32(SMBHSTCNT) & ~SMBHSTCNT_INTREN); + WriteIoPortByte(SMBHSTCNT, ReadIoPortByte(SMBHSTCNT) & ~SMBHSTCNT_INTREN); //if (priv->features & FEATURE_IRQ) //{ // outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START, @@ -431,7 +431,7 @@ int i2c_smbus_i801::i801_transaction(int xact) /* the current contents of SMBHSTCNT can be overwritten, since PEC, * SMBSCMD are passed in xact */ - Out32(SMBHSTCNT, xact | SMBHSTCNT_START); + WriteIoPortByte(SMBHSTCNT, xact | SMBHSTCNT_START); status = i801_wait_intr(); return i801_check_post(status); @@ -447,9 +447,9 @@ int i2c_smbus_i801::i801_wait_byte_done() /* We will always wait for a fraction of a second! */ do { - std::this_thread::sleep_for(1ms); + std::this_thread::sleep_for(1ms); //usleep_range(250, 500); - status = Inp32(SMBHSTSTS); + status = ReadIoPortByte(SMBHSTSTS); } while (!(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_BYTE_DONE)) && (timeout++ < MAX_RETRIES)); if (timeout > MAX_RETRIES) @@ -469,7 +469,7 @@ int i2c_smbus_i801::i801_wait_intr() do { //usleep_range(250, 500); - status = Inp32(SMBHSTSTS); + status = ReadIoPortByte(SMBHSTSTS); } while (((status & SMBHSTSTS_HOST_BUSY) || !(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_INTR))) && (timeout++ < MAX_RETRIES)); if (timeout > MAX_RETRIES) @@ -494,9 +494,9 @@ s32 i2c_smbus_i801::i2c_xfer(u8 addr, char read_write, int* size, u8* data) bool i2c_smbus_i801_detect() { - if(!IsInpOutDriverOpen()) + if(!InitializeOls() || GetDllStatus()) { - LOG_INFO("inpout32 is not loaded, i801 I2C bus detection aborted"); + LOG_INFO("WinRing0 is not loaded, i801 I2C bus detection aborted"); return(false); } diff --git a/i2c_smbus/i2c_smbus_nct6775.cpp b/i2c_smbus/i2c_smbus_nct6775.cpp index 80ce9fd99..23c47916a 100644 --- a/i2c_smbus/i2c_smbus_nct6775.cpp +++ b/i2c_smbus/i2c_smbus_nct6775.cpp @@ -8,7 +8,7 @@ #include "i2c_smbus_nct6775.h" #include -#include "inpout32.h" +#include "OlsApi.h" #include "LogManager.h" using namespace std::chrono_literals; @@ -23,45 +23,45 @@ s32 i2c_smbus_nct6775::nct6775_access(u16 addr, char read_write, u8 command, int cnt = 0; len = 0; - Out32(SMBHSTCTL, NCT6775_SOFT_RESET); + WriteIoPortByte(SMBHSTCTL, NCT6775_SOFT_RESET); switch (size) { case I2C_SMBUS_QUICK: - Out32(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); break; case I2C_SMBUS_BYTE_DATA: tmp_data.byte = data->byte; case I2C_SMBUS_BYTE: - Out32(SMBHSTADD, (addr << 1) | read_write); - Out32(SMBHSTIDX, command); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTIDX, command); if (read_write == I2C_SMBUS_WRITE) { - Out32(SMBHSTDAT, tmp_data.byte); - Out32(SMBHSTCMD, NCT6775_WRITE_BYTE); + WriteIoPortByte(SMBHSTDAT, tmp_data.byte); + WriteIoPortByte(SMBHSTCMD, NCT6775_WRITE_BYTE); } else { - Out32(SMBHSTCMD, NCT6775_READ_BYTE); + WriteIoPortByte(SMBHSTCMD, NCT6775_READ_BYTE); } break; case I2C_SMBUS_WORD_DATA: - Out32(SMBHSTADD, (addr << 1) | read_write); - Out32(SMBHSTIDX, command); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTIDX, command); if (read_write == I2C_SMBUS_WRITE) { - Out32(SMBHSTDAT, data->word & 0xFF); - Out32(SMBHSTDAT, (data->word & 0xFF00) >> 8); - Out32(SMBHSTCMD, NCT6775_WRITE_WORD); + WriteIoPortByte(SMBHSTDAT, data->word & 0xFF); + WriteIoPortByte(SMBHSTDAT, (data->word & 0xFF00) >> 8); + WriteIoPortByte(SMBHSTCMD, NCT6775_WRITE_WORD); } else { - Out32(SMBHSTCMD, NCT6775_READ_WORD); + WriteIoPortByte(SMBHSTCMD, NCT6775_READ_WORD); } break; case I2C_SMBUS_BLOCK_DATA: - Out32(SMBHSTADD, (addr << 1) | read_write); - Out32(SMBHSTIDX, command); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTIDX, command); if (read_write == I2C_SMBUS_WRITE) { len = data->block[0]; @@ -69,31 +69,31 @@ s32 i2c_smbus_nct6775::nct6775_access(u16 addr, char read_write, u8 command, int { return -EINVAL; } - Out32(SMBBLKSZ, len); + WriteIoPortByte(SMBBLKSZ, len); - //Load 4 bytes into FIFO - cnt = 1; - if (len >= 4) - { - for (i = cnt; i <= 4; i++) - { - Out32(SMBHSTDAT, data->block[i]); - } + //Load 4 bytes into FIFO + cnt = 1; + if (len >= 4) + { + for (i = cnt; i <= 4; i++) + { + WriteIoPortByte(SMBHSTDAT, data->block[i]); + } - len -= 4; - cnt += 4; - } - else - { - for (i = cnt; i <= len; i++) - { - Out32(SMBHSTDAT, data->block[i]); - } + len -= 4; + cnt += 4; + } + else + { + for (i = cnt; i <= len; i++) + { + WriteIoPortByte(SMBHSTDAT, data->block[i]); + } - len = 0; - } + len = 0; + } - Out32(SMBHSTCMD, NCT6775_WRITE_BLOCK); + WriteIoPortByte(SMBHSTCMD, NCT6775_WRITE_BLOCK); } else { @@ -105,14 +105,14 @@ s32 i2c_smbus_nct6775::nct6775_access(u16 addr, char read_write, u8 command, int return -EOPNOTSUPP; } - Out32(SMBHSTCTL, NCT6775_MANUAL_START); + WriteIoPortByte(SMBHSTCTL, NCT6775_MANUAL_START); - while ((size == I2C_SMBUS_BLOCK_DATA) && (len > 0)) - { - if (read_write == I2C_SMBUS_WRITE) - { + while ((size == I2C_SMBUS_BLOCK_DATA) && (len > 0)) + { + if (read_write == I2C_SMBUS_WRITE) + { timeout = 0; - while ((Inp32(SMBHSTSTS) & NCT6775_FIFO_EMPTY) == 0) + while ((ReadIoPortByte(SMBHSTSTS) & NCT6775_FIFO_EMPTY) == 0) { if(timeout > NCT6775_MAX_RETRIES) { @@ -122,36 +122,36 @@ s32 i2c_smbus_nct6775::nct6775_access(u16 addr, char read_write, u8 command, int timeout++; } - //Load more bytes into FIFO - if (len >= 4) - { - for (i = cnt; i <= (cnt + 4); i++) - { - Out32(SMBHSTDAT, data->block[i]); - } + //Load more bytes into FIFO + if (len >= 4) + { + for (i = cnt; i <= (cnt + 4); i++) + { + WriteIoPortByte(SMBHSTDAT, data->block[i]); + } - len -= 4; - cnt += 4; - } - else - { - for (i = cnt; i <= (cnt + len); i++) - { - Out32(SMBHSTDAT, data->block[i]); - } + len -= 4; + cnt += 4; + } + else + { + for (i = cnt; i <= (cnt + len); i++) + { + WriteIoPortByte(SMBHSTDAT, data->block[i]); + } - len = 0; - } - } + len = 0; + } + } else { return -ENOTSUP; } - } + } - //wait for manual mode to complete + //wait for manual mode to complete timeout = 0; - while ((Inp32(SMBHSTSTS) & NCT6775_MANUAL_ACTIVE) != 0) + while ((ReadIoPortByte(SMBHSTSTS) & NCT6775_MANUAL_ACTIVE) != 0) { if(timeout > NCT6775_MAX_RETRIES) { @@ -161,23 +161,23 @@ s32 i2c_smbus_nct6775::nct6775_access(u16 addr, char read_write, u8 command, int timeout++; } - if ((Inp32(SMBHSTERR) & NCT6775_NO_ACK) != 0) - { - return -EPROTO; - } - else if ((read_write == I2C_SMBUS_WRITE) || (size == I2C_SMBUS_QUICK)) - { - return 0; - } + if ((ReadIoPortByte(SMBHSTERR) & NCT6775_NO_ACK) != 0) + { + return -EPROTO; + } + else if ((read_write == I2C_SMBUS_WRITE) || (size == I2C_SMBUS_QUICK)) + { + return 0; + } switch (size) { case I2C_SMBUS_QUICK: case I2C_SMBUS_BYTE_DATA: - data->byte = (u8)Inp32(SMBHSTDAT); + data->byte = (u8)ReadIoPortByte(SMBHSTDAT); break; case I2C_SMBUS_WORD_DATA: - data->word = Inp32(SMBHSTDAT) + (Inp32(SMBHSTDAT) << 8); + data->word = ReadIoPortByte(SMBHSTDAT) + (ReadIoPortByte(SMBHSTDAT) << 8); break; } @@ -199,9 +199,9 @@ s32 i2c_smbus_nct6775::i2c_xfer(u8 addr, char read_write, int* size, u8* data) bool i2c_smbus_nct6775_detect() { - if(!IsInpOutDriverOpen()) + if(!InitializeOls() || GetDllStatus()) { - LOG_INFO("inpout32 is not loaded, nct6775 I2C bus detection aborted"); + LOG_INFO("WinRing0 is not loaded, nct6775 I2C bus detection aborted"); return(false); } diff --git a/i2c_smbus/i2c_smbus_piix4.cpp b/i2c_smbus/i2c_smbus_piix4.cpp index 88ec64043..fe2cf8754 100644 --- a/i2c_smbus/i2c_smbus_piix4.cpp +++ b/i2c_smbus/i2c_smbus_piix4.cpp @@ -9,7 +9,7 @@ \*-----------------------------------------*/ #include "i2c_smbus_piix4.h" -#include "inpout32.h" +#include "OlsApi.h" #include "LogManager.h" #include "ResourceManager.h" @@ -49,13 +49,13 @@ int i2c_smbus_piix4::piix4_transaction() int timeout = 0; /* Make sure the SMBus host is ready to start transmitting */ - temp = Inp32(SMBHSTSTS); + temp = ReadIoPortByte(SMBHSTSTS); if (temp != 0x00) { - Out32(SMBHSTSTS, temp); + WriteIoPortByte(SMBHSTSTS, temp); - temp = Inp32(SMBHSTSTS); + temp = ReadIoPortByte(SMBHSTSTS); if (temp != 0x00) { @@ -64,8 +64,8 @@ int i2c_smbus_piix4::piix4_transaction() } /* start the transaction by setting bit 6 */ - temp = Inp32(SMBHSTCNT); - Out32(SMBHSTCNT, temp | 0x040); + temp = ReadIoPortByte(SMBHSTCNT); + WriteIoPortByte(SMBHSTCNT, temp | 0x040); /* We will always wait for a fraction of a second! (See PIIX4 docs errata) */ temp = 0; @@ -80,7 +80,7 @@ int i2c_smbus_piix4::piix4_transaction() while ((++timeout < MAX_TIMEOUT) && temp <= 1) { - temp = Inp32(SMBHSTSTS); + temp = ReadIoPortByte(SMBHSTSTS); SetWaitableTimer(delay_timer, &retry_delay, 0, NULL, NULL, FALSE); WaitForSingleObject(delay_timer, INFINITE); } @@ -89,7 +89,7 @@ int i2c_smbus_piix4::piix4_transaction() { while ((++timeout < MAX_TIMEOUT) && temp <= 1) { - temp = Inp32(SMBHSTSTS); + temp = ReadIoPortByte(SMBHSTSTS); } } /* If the SMBus is still busy, we give up */ @@ -113,10 +113,10 @@ int i2c_smbus_piix4::piix4_transaction() result = -ENXIO; } - temp = Inp32(SMBHSTSTS); + temp = ReadIoPortByte(SMBHSTSTS); if (temp != 0x00) { - Out32(SMBHSTSTS, temp); + WriteIoPortByte(SMBHSTSTS, temp); } return result; @@ -130,39 +130,39 @@ s32 i2c_smbus_piix4::piix4_access(u16 addr, char read_write, u8 command, int siz switch (size) { case I2C_SMBUS_QUICK: - Out32(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); size = PIIX4_QUICK; break; case I2C_SMBUS_BYTE: - Out32(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); if (read_write == I2C_SMBUS_WRITE) { - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTCMD, command); } size = PIIX4_BYTE; break; case I2C_SMBUS_BYTE_DATA: - Out32(SMBHSTADD, (addr << 1) | read_write); - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTCMD, command); if (read_write == I2C_SMBUS_WRITE) { - Out32(SMBHSTDAT0, data->byte); + WriteIoPortByte(SMBHSTDAT0, data->byte); } size = PIIX4_BYTE_DATA; break; case I2C_SMBUS_WORD_DATA: - Out32(SMBHSTADD, (addr << 1) | read_write); - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTCMD, command); if (read_write == I2C_SMBUS_WRITE) { - Out32(SMBHSTDAT0, data->word & 0xFF); - Out32(SMBHSTDAT1, (data->word & 0xFF00) >> 8); + WriteIoPortByte(SMBHSTDAT0, data->word & 0xFF); + WriteIoPortByte(SMBHSTDAT1, (data->word & 0xFF00) >> 8); } size = PIIX4_WORD_DATA; break; case I2C_SMBUS_BLOCK_DATA: - Out32(SMBHSTADD, (addr << 1) | read_write); - Out32(SMBHSTCMD, command); + WriteIoPortByte(SMBHSTADD, (addr << 1) | read_write); + WriteIoPortByte(SMBHSTCMD, command); if (read_write == I2C_SMBUS_WRITE) { len = data->block[0]; @@ -170,11 +170,11 @@ s32 i2c_smbus_piix4::piix4_access(u16 addr, char read_write, u8 command, int siz { return -EINVAL; } - Out32(SMBHSTDAT0, len); - Inp32(SMBHSTCNT); + WriteIoPortByte(SMBHSTDAT0, len); + ReadIoPortByte(SMBHSTCNT); for (i = 1; i <= len; i++) { - Out32(SMBBLKDAT, data->block[i]); + WriteIoPortByte(SMBBLKDAT, data->block[i]); } } size = PIIX4_BLOCK_DATA; @@ -183,7 +183,7 @@ s32 i2c_smbus_piix4::piix4_access(u16 addr, char read_write, u8 command, int siz return -EOPNOTSUPP; } - Out32(SMBHSTCNT, (size & 0x1C)); + WriteIoPortByte(SMBHSTCNT, (size & 0x1C)); status = piix4_transaction(); @@ -197,21 +197,21 @@ s32 i2c_smbus_piix4::piix4_access(u16 addr, char read_write, u8 command, int siz { case PIIX4_BYTE: case PIIX4_BYTE_DATA: - data->byte = (u8)Inp32(SMBHSTDAT0); + data->byte = (u8)ReadIoPortByte(SMBHSTDAT0); break; case PIIX4_WORD_DATA: - data->word = Inp32(SMBHSTDAT0) + (Inp32(SMBHSTDAT1) << 8); + data->word = ReadIoPortByte(SMBHSTDAT0) + (ReadIoPortByte(SMBHSTDAT1) << 8); break; case PIIX4_BLOCK_DATA: - data->block[0] = (u8)Inp32(SMBHSTDAT0); + data->block[0] = (u8)ReadIoPortByte(SMBHSTDAT0); if (data->block[0] == 0 || data->block[0] > I2C_SMBUS_BLOCK_MAX) { return -EPROTO; } - Inp32(SMBHSTCNT); + ReadIoPortByte(SMBHSTCNT); for (i = 1; i <= data->block[0]; i++) { - data->block[i] = (u8)Inp32(SMBBLKDAT); + data->block[i] = (u8)ReadIoPortByte(SMBBLKDAT); } break; } @@ -234,9 +234,9 @@ s32 i2c_smbus_piix4::i2c_xfer(u8 addr, char read_write, int* size, u8* data) bool i2c_smbus_piix4_detect() { - if(!IsInpOutDriverOpen()) + if(!InitializeOls() || GetDllStatus()) { - LOG_INFO("inpout32 is not loaded, piix4 I2C bus detection aborted"); + LOG_INFO("WinRing0 is not loaded, piix4 I2C bus detection aborted"); return(false); } diff --git a/main.cpp b/main.cpp index 6af67f654..3e7dd0aa4 100644 --- a/main.cpp +++ b/main.cpp @@ -146,6 +146,80 @@ bool AttemptLocalConnection() return success; } +/******************************************************************************************\ +* * +* Install SMBus Driver WinRing0, If not already installed (Win32) * +* * +\******************************************************************************************/ +#ifdef _WIN32 +void InstallWinRing0() +{ + TCHAR winring0_install_location[MAX_PATH]; // driver final location usually C:\windows\system32\drivers\WinRing0x64.sys + uint system_path_length = GetSystemDirectory(winring0_install_location, MAX_PATH); + std::string winring0_filename = "WinRing0.sys"; + BOOL bIsWow64 = false; +#if _WIN64 + winring0_filename = "WinRing0x64.sys"; +#else + BOOL (*fnIsWow64Process)(HANDLE, PBOOL) = (BOOL (__cdecl *)(HANDLE, PBOOL))GetProcAddress(GetModuleHandle(TEXT("kernel32")),"IsWow64Process"); + if (fnIsWow64Process) + { + fnIsWow64Process(GetCurrentProcess(),&bIsWow64); + } + if(bIsWow64) + { + winring0_filename = "WinRing0x64.sys"; + } +#endif + std::strncat(winring0_install_location, "\\drivers\\", MAX_PATH - system_path_length - 1); + std::strncat(winring0_install_location, winring0_filename.c_str(), MAX_PATH - system_path_length - 10); + + std::string driver_name = winring0_filename.substr(0, winring0_filename.size() - 4); // driver name: WinRing0 or WinRing0x64 + SC_HANDLE manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); + if (manager) + { + PVOID wow64_fsredirection_OldValue = NULL; + if(bIsWow64) + { + Wow64DisableWow64FsRedirection(&wow64_fsredirection_OldValue); + } + if(INVALID_FILE_ATTRIBUTES == GetFileAttributes(winring0_install_location) && GetLastError()==ERROR_FILE_NOT_FOUND) + { + char module_path_buffer[MAX_PATH]; + GetModuleFileNameA(NULL, module_path_buffer, MAX_PATH); + std::string::size_type exe_loc = std::string(module_path_buffer).find_last_of("\\/"); + std::string driver_source_path = std::string(module_path_buffer).substr(0, exe_loc + 1) + winring0_filename; + CopyFile(driver_source_path.c_str(), winring0_install_location, true); + } + if(bIsWow64) + { + Wow64RevertWow64FsRedirection(wow64_fsredirection_OldValue); + } + + SC_HANDLE service = OpenService(manager, driver_name.c_str(), SERVICE_ALL_ACCESS); + if(!service) + { + std::string service_sys_path = "System32\\Drivers\\" + winring0_filename; + service = CreateService(manager, + driver_name.c_str(), + driver_name.c_str(), + SERVICE_ALL_ACCESS, + SERVICE_KERNEL_DRIVER, + SERVICE_AUTO_START, + SERVICE_ERROR_NORMAL, + service_sys_path.c_str(), + NULL, + NULL, + NULL, + NULL, + NULL); + } + CloseServiceHandle(service); + CloseServiceHandle(manager); + } +} +#endif + /******************************************************************************************\ * * * main * @@ -177,8 +251,12 @@ int main(int argc, char* argv[]) std::thread * InitializeTimerResolutionThread; InitializeTimerResolutionThread = new std::thread(InitializeTimerResolutionThreadFunction); InitializeTimerResolutionThread->detach(); -#endif + /*---------------------------------------------------------*\ + | Windows only - Install SMBus Driver WinRing0 | + \*---------------------------------------------------------*/ + InstallWinRing0(); +#endif /*---------------------------------------------------------*\ | Process command line arguments before detection | \*---------------------------------------------------------*/ diff --git a/super_io/super_io.cpp b/super_io/super_io.cpp index b352905c8..3dacada25 100644 --- a/super_io/super_io.cpp +++ b/super_io/super_io.cpp @@ -5,12 +5,11 @@ | | | Adam Honse (CalcProgrammer1) 2/11/2020 | \*-----------------------------------------*/ - #include "super_io.h" #ifdef WIN32 #include -#include "inpout32.h" +#include "OlsApi.h" #else #include @@ -31,8 +30,8 @@ int dev_port_fd; void superio_enter(int ioreg) { #ifdef WIN32 - Out32(ioreg, 0x87); - Out32(ioreg, 0x87); + WriteIoPortByte(ioreg, 0x87); + WriteIoPortByte(ioreg, 0x87); #else unsigned char temp = 0x87; dev_port_fd = open("/dev/port", O_RDWR, "rw"); @@ -60,8 +59,8 @@ void superio_enter(int ioreg) void superio_outb(int ioreg, int reg, int val) { #ifdef WIN32 - Out32(ioreg, reg); - Out32(ioreg + 1, val); + WriteIoPortByte(ioreg, reg); + WriteIoPortByte(ioreg + 1, val); #else dev_port_fd = open("/dev/port", O_RDWR, "rw"); @@ -87,8 +86,8 @@ void superio_outb(int ioreg, int reg, int val) int superio_inb(int ioreg, int reg) { #ifdef WIN32 - Out32(ioreg, reg); - return Inp32(ioreg + 1); + WriteIoPortByte(ioreg, reg); + return ReadIoPortByte(ioreg + 1); #else unsigned char temp = 0; dev_port_fd = open("/dev/port", O_RDWR, "rw");