From d5ef740d2dc0c30ae62af8571d2b94a18c5310ac Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 15 Oct 2021 15:09:40 -0300 Subject: [PATCH] pcireg: Fix mechanism 1/2 detection in QEMU and potentially other hardware --- clib/clib.c | 41 ++++++++++------------------------------- clib/clib.h | 3 --- pcireg/PCIREG.EFI | Bin 47219 -> 47219 bytes pcireg/PCIREG.EXE | Bin 51344 -> 51344 bytes 4 files changed, 10 insertions(+), 34 deletions(-) diff --git a/clib/clib.c b/clib/clib.c index 7376beb..a9f4165 100644 --- a/clib/clib.c +++ b/clib/clib.c @@ -329,20 +329,20 @@ int pci_init() { multi_t cf8; - cf8.u32 = 0x80000000; + cf8.u32 = 0x80001234; /* Determine the supported PCI configuration mechanism. */ cli(); - outb(0xcf8, 0x00); - outb(0xcfa, 0x00); - if ((inb(0xcf8) == 0x00) && (inb(0xcfa) == 0x00)) { - pci_mechanism = 2; - pci_device_count = 32; + outl(0xcf8, cf8.u32); + cf8.u32 = inl(0xcf8); + if (cf8.u32 == 0x80001234) { + pci_mechanism = 1; + pci_device_count = 32; } else { - outl(0xcf8, cf8.u32); - cf8.u32 = inl(0xcf8); - if (cf8.u32 == 0x80000000) { - pci_mechanism = 1; + outb(0xcf8, 0x00); + outb(0xcfa, 0x00); + if ((inb(0xcf8) == 0x00) && (inb(0xcfa) == 0x00)) { + pci_mechanism = 2; pci_device_count = 16; } } @@ -531,24 +531,3 @@ pci_writel(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg, uint32_t val) break; } } - - -/* File I/O functions. */ -void -fseek_to(FILE *f, long offset) -{ - fseek(f, offset, SEEK_SET); - -#ifdef __POSIX_UEFI__ - /* Work around broken fseek implementation. */ - long pos = ftell(f); - if (pos == offset) - return; - - uint8_t dummy[512]; - while (pos < offset) { - fread(&dummy, MIN(sizeof(dummy), offset - pos), 1, f); - pos = ftell(f); - } -#endif -} diff --git a/clib/clib.h b/clib/clib.h index ee199c8..774b2b3 100644 --- a/clib/clib.h +++ b/clib/clib.h @@ -125,7 +125,4 @@ extern void pci_writeb(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg, uint extern void pci_writew(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg, uint16_t val); extern void pci_writel(uint8_t bus, uint8_t dev, uint8_t func, uint8_t reg, uint32_t val); -/* File I/O functions. */ -extern void fseek_to(FILE *f, long offset); - #endif diff --git a/pcireg/PCIREG.EFI b/pcireg/PCIREG.EFI index 18cdf05343521e9243933dc15478695f8ff922d6..43b550d130e952696e3dab4f657f93ec3efb9fd1 100644 GIT binary patch delta 392 zcmezTf$8%HrU^Hg_hm3ncATm_(SU8z41vi3jIx^z8RKOcCr+Ly=OG>0!N9PC0SI1* zConMZZ+Csgzx_bxF^^tb&&glpJQ%-Cww2$+7&rNYyodC!HkjHSaj0tfCkHD8GWJbg zs-Vrdbn-<7RmQH#-xa(WJtjLVnn=sT^;O0K^=)%~&A$y|huGvviXMy+lW!|ZG9I4% zRWVTdO$*G9RWV?-FJWrKCnqXJFjh|9r4-4yWwMB}G2`sb9?JUs^(I0L4G=G6{`>#G z+x1W9vHd@IfIiCk|NlRPIza#4(2la+g)Z06|8 G)&c+mf13LM delta 390 zcmezTf$8%HrU^Hg*?Jf!J5E)eXuvjUhQQJ-b4Cl8%*tvI8?QKlYaMGwaC$+s0H84peV zsu(E!x&>y(su-}^moT+qlM|I97%L|4Qi^2UJXu89m~qx-4`qG+dZ6PQAYRD)_y7Ms zkZ1P)-~syREu8xc#JvaPLL{~USuF=jRrZ6$S3r1T9=)t{>KGV~F)#sHlff*7*H+!G ye>#srw8{L38SoXTrPK8fP|lWtA83842vAD`SPSE3R%5xS$tt~1HnaETXaN906`Ilj diff --git a/pcireg/PCIREG.EXE b/pcireg/PCIREG.EXE index 66cfc40cac05e555a2d12c382780da0f24980763..24a2e0f3f8b94016c227249b4aa5555880661c75 100644 GIT binary patch delta 3768 zcmY*c3tUuH8oy__GXuj6^JI7k;|Rk;1R4aybWm{ZYGpV=jfgq+u(#D_3~Hv}PUzej z+_cZiM_VRsTG?t%kL!>v24R+|(N=EkFUznF4ic#mq08)duRt3=e)oRo|NnoF``vTS zJ+paB)MorQC9NuC7%Ox2FNpTcB8IUQGmLUeUP;mIX;ljTYpwj@7Q%!Q8DX!H{$wj9%%hqY=V_^B%eL_(Zi`SSuY`1rpQF}JuAu9Z?Vfz5es9TDni)TXhzs&q|>2XR!ru@ zN?E#o%NQqTgkO#HGk8sQ4GBY+EJHtOj8iZIHPQz_A2pMBU_n%tK4=?_sbqwHBfSWG zR0ZjSQ&9zEKd4ws&VfvCyGr1QlfI0W%+EzTR@N?dEU#r9%RI~8&t?j`s)QSm-UyZK zB(et9u?}K^7IqSA$P9lB`sg%J%QfVmkSw3bzMT<1CPDYf)5wF+B+nja%kZ|d9o!Jp zur4~kR_Eu2?A=abHAYmy33)!b48w9K@xy#Y2H6T8MGm%>_P`)TT z1bbpEc^lKkkms%5b_IVje8kV4#g0@h5N61nsJTyKPavzp(PFp|lQC^xdf4c_%&v`l zvCo)iWk`SMb{V}l-OqK4y}VoU(@TCU#i%a28E<03E3iOiW4+dqCW2}X8HO%Z8tH;z z)slqgjXrL8Z+&gv!6YW&J{NHP5a7O{K3EYur$n6~O@H5EfnjMKcDsdP3p#038g17% z_ZfvpWKMe7f@ummrSi#+fn%%`m&sNSm{x>ydbNhJ7I>pggBv2ovC&p7hP~vZ0GH;S8c0TBcKQorYDcB z60)K&b1HgcZ(qK|e}LVN!_0`t_>*)vC9D#rqU4kaMC#57vvBZPSq~=4n;h2@8wAC z9aTaVrpOReU`Z!0j+SH`$&fvoK_&uXN%x@smlUxi*SP@KOATXHokmoAj7#H29^<$O z;2s5rxNO^TJ%5=0{Av}#8Vs^YWJ9c$|A@ZxUtt3xYrq|6slQbWE>2Z94x^xn6P7JcrT}QRH`p?E{s<>p0F5$C&$_u_uTZ!y}S2S`8}#e%CqCL3=3OWC+!l)_D=p} zPx}R@AYOTu4qg@oJr@}NY=XR>b)wiQY(S<7ndlZB zGg9j+xHUe9RKmviB{EYyMC3M5nN9eH$D6a*H%%kk*fNA}g4O06b+HL|Wc&F5e)el% zzd1Eqjewz`6+h$n+0A5VPi!^55^t~0$6fJ#;d2iM+~OKt1eeSUXKpg0x1a0BngSJr z0rx<_H6$*T=`q3`(N6jh(y~7gYn47pEi6ZRKKK)66a0uJjJsz2RgWJHlE*;6JrrMRD|UDXV{*YMpEIu z#EJFa#*FTw-d?k_lG^3ob(E}2#4a4N!aB5`8Iv@L7V@7U+92^?p;f1^AC0kmL||1p>1~o= zCR#2Lm2%7*;U7k{OyZwKYswg(JHo$U-JhDi^NiFFO?fHAZzPB1R^3 z#VF_)TB_eAGx?N$OO(l%f~(iP7$+a@5Fxf&)XH`vYmPFFsI_{Ovl74t@?@`0TA8oichYy-_sKgAzB5p5Nzq}l3RXOo4hcnugG>YLvm`I# zkFWoYY4GSviwquhhoVADIu!G@)^Mi1H8iO1!|RZ`53OE26dTYM?(APdT}S zxPmFUDjC@eS^32VPkvY{`0|e^HtTlbb*t_eJd}SONr1QVHjT9I-#&Nq(w1&SiC3BJ7dw}ww{CterCUYA& zMLVZ99<5h+42@lNaeEs)s)l0?(xLJ*XmLyke(TsDMec^pWy`Rozm#$0K5&#zC8gjg zFDDz|-SR?1<&XRk{PG;b-#mgt)AV)E8n{yKAj{#}Sq@SMb+cxZu3*cozY#oyFPc4# zv6O?{~wBjJhRndb1% z^oHQR#%*!r7PxL}rA)RvxP9vj>ZB!4i%B)i;s~oSgQ?T%(iMj{!(Iz`;@oIXuj$!@>Q%NxI delta 3831 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 YWWR#>N5&bJ6(A