new file mode 100644
GIT binary patch
literal 5683
zcmb7IUvC@75ud#yrQ?#6j?!6{?Kmc6J8sh2<{w*j(4r7|M~Req)R{-QF3#v3B^jmL
zq&_Gy5Jd<eGpOw3EoEJ_Z?wy|0`^B}AN!b(kbZ>}jr|mL=8j9Tat?3_@OEeBw==W5
zGqZbV*hZ^32f+STUel{~wtU;t4dgKZpgy%~Ep`W-J)^whvZNGa&ckHT$46Pweqxl@
zSJ<CB-k&`0<3}EA`>^p$eX`N^KY#3P0D&HC_?%NmU2yHP>vT_9dM&58)tZqiea&UX
zEg4Nv-1VBlR8t8t6{TubS^~rngkp4~YPC#A0et;^5@OCnmFU@9m4=bEnueRz7G1kl
z0-rdZPptN*9#_47>Z_gyJui81Fo6ElSG_j;v7Lf{{U<(v0iRY}y=iAMd}=>|Ge+eQ
z1K0ue{3Y^++;zGqtlRlw;A=_-hOSuoqAmeHP?zFkFg;eYOKyn6g(cjToGx*Xqr30?
z>Jn+8kpR`pFj==M4F=ai)=Sip^)fc9e&(_)43jped$HNlQE9kjNn9-Qcb*?xVLtev
zN(;bN*fwl~G_eCt_u7rJF@npomIzj5G|^z72OcmSwFO()E=V|Er+dL%TOSRao;^BH
z;qe7f30P8=4SlqUlS7YA@%a_@t^BPFu@&}Geu)dUumtbL0^RxLx>XXJy=>HGvMTU6
zU*kE(UvP<^$NvmJ#Si!g{5w9)6~$dPDw*S4qc9x*Nk}-|pVzI{$k!NX^WoOhl6w6K
z-0lH9jg984^7IP(ME*opl!d*(pGr($GxK6m<1CCop@udjO3f?zl?=*)8mL(&HH9N;
zxHQs(I~u7+dL^MA1@)*^<uHi$EZuIgBs}K|hBy&A#^8DuA4b;Mvn#8Zipq0}s3Z}3
zIagUlLAhZzSyBxJMCj$lx|wxYxvt*;?YyN|Rwd^wQ3nTphlKtPy9YGfxj^gzs0~b^
zva8<U6!x0IU8~swe@5E#d}u!_C!VzVp8si^OR(YZZnrmp%dpv3dz%PKVA|9hHw@V7
zpX+V1ex}#vu@T#bt*7Y`RYFjvx5=dur#$4yBaRMR{%1QITm?*Ac)SJR@3zt2<1GgM
z)?=>?584CId3f%!Ox{wiP_{9vc{8WrBTtV4J&KApTf2#?+E48Ay$&XQV!)HyV(q5h
zOdz0{%S`d)7ZZ>Of^7%BBp#3Bv(`^O>EN6@)E^Mr>DDK4ni$MsLZ+~QP<c{tt?bMk
zpZ#JA5^@})l;b~%{~ge#!yF_h$UQCN8Z{d}qdwmYIMbBXFd&x#`nYR1ZT4j+^a86{
zvqt=(_3{zx7{709JwIkWA6U<$f8*Bk+7DaLJ6)6Jt{<_^rT@cxVa$9XFkd)gz7S!)
zFf?x*HIE0x8_&KtX1*AhFCH;pj4)qxx@$3<y?xYtEHp1dh)xmQa#41Z+C;F~S~6T?
zaur#$yQ-O@bknZtmRVwWXzJElqXV9wNpb}g)Puja-+4?47c?^X9#SzFw6&AEg&}=7
zsvq~T;60TGpmE)zWMAO_)K(|Zo(>p5wtE-PXCJ(0%kd}PBeFFd>_NNFcRfA{pKh>?
zrzvFL#gkJ8%JL0{8NTp`UVGEu3>@^J&oRFnt>s^O?5Ps8Tz=rGjf;m>tXsNhR;_TS
z(pJODm2!*WF`qW?et3U-C)>IIvH!t?UuU=PesurA_U7G>K${J+q@U=SMx%)p9Fx>x
zW>CIL6Q-><;82G1aL$tK;NaQMo_I9E_e{G|@6YzkTEk{$;GfTkcskeDdS=tS6>_<Z
zY^1h5<~bKg$$)7W%_c49p<4eh9S9UAduGLUna`&M+S5w&CT2`RxFE2K*<8GmDe~Nx
zKL)_7!ja$i2jNe!hvWfP92&@{(Aj#}oxyH3?7ma42=05>9dhT)((NJkBzCL5*(_IS
z5OwOL2s`yE4WLe)lx!25Iy9DuKun|i+7sfDe4A(%Ff##@eLUh&uTHXh-<a$X8*s|S
zLgoyA>(TM?DbrMGnl!~=dc^|gsNTgnVRs704!d*ckn59W68of_gg*I6qTvqFuu*sM
zigwPlZkz1r2KdNz54Y(@=9=A#y#~5xu2pXNzd@lMs?-+D%4!ae$1tMAc4C;|2^&Jx
zO4?nqDnat6OS)Cd<uIf%lk2%0Xz#m~TppaWcMdOa;YmBju=GaDxiH2cgr?%i0^A8x
z2UAr$fs7*Dxf~O>KuRQv{=n9i(B##y89Hz+q^^g}`(aZGn{wFbVPk|%C2W>Ktz?F#
zgKIh6EX$MpcaPH`;YFMFj~;kae3g2YVhZwE7}hUQ{3<n~)4^{4dprg>?mZoU^phZv
zh`XF}aPar<L&-nBqZ_3j!=(*xlt-!s@yBWez9F<qJQ?1B)10rcZ(e-!g2hP5YRsxy
z&2WSMx8&gcAX|N{-n_00p2Ksd;f3toJ6NpjqB}DYW9T&YuedWx3@@p8{Y2_2NoWG<
zPY;*R>0Vm?g}xj*aI<2rV}uk4eZ*rmuEtpkt(1O$hxXX%-iTeID~#2wj1Ct*5nL<M
zy0!jhuD^g6EQ`y4*NNc%_=0DhhpB*|+P|bapBHrtV>S3`Dc3BuU_d7iAVDuqNZ2jV
z(k`X~L!z<@9W6ukUBZgrfqfc&PoaZjMrQQ7HWtf4wGZm{*xuk3h{HTNRki4L3Y^b7
z56=)GQ<ch6&B8~WdUfn!@}k$L2~dJ19@Jf|3Rum9;!Ss7=i#w%Jl6Uw<uN{NJ*!Pn
z!IxC?KCPruMk$6w($3}ZHG$qSo$h;fen?>KN}%D+<PAJ#s8bM~B6XbZyLSFM4z$-B
z!*^61B7-&)tPNeI$pDE7S|GIq#hU<{LMXnGL_mesxPZo^phck-BO%l}5eXGqCk1pe
z3VKCo#W$=_s}cznS`z}Ah=N`fTDgGoNT|??NgO(mjDju-ttkObMM8zvw1B3gpx1=f
zDFK~|gbJ;A#}9p-j)GnnT2%p6BcVcTMnE%B(D#Mb83CP%gbJ;*0y-N7EeWj{`Qfy*
zNT|?yOhAuCLCZqxoPf?nLWS1j0(v|Ostc|20y-ZF6<SXS=!qz(A+(+p(36o+q4ku2
zo{EB2gx0qN^sPv!(0W=xPe(zQh1RzP^zBHf(0WEd&-@TntDZ7$HCj?XwcEiLjeV+h
z_X0vi0;^d_WQh=xB_yySg_1oYNRr;|B=I}fzKvyNNJ&JEWHF?$I1FWE>*`2G#xTW)
zGP1Tfl94$~)S-;*T_f4_ZU?I?p2+()CY+%0Oh)=pjwkcJjj1E#_$Gz)p<E>zlR(I`
z0evW6A{xV4$oB&JP#(+}15?QHFxj{DF*(f|Lu@3cc^hMLnmGo`NS-BnOumFPZu>~S
zM>NW{GjxZ<kAC#^hPDvTx^*_}7+hA@;$ug0`1P<JGiww<^tIxh1mKqfyVXqJ^FO@j
n{&w>tyq?gf*ReDES?aGTCgBUL;?|b&hQKtAFRQm;kOb+!4tZ%z
literal 0
HcmV?d00001
new file mode 100644
GIT binary patch
literal 8456
zcmb7KO>Y~=8J;C6YBeOKrL>l1$BtFCNSd@xWXo~VPncYO+FWT((oO;z;7X2LxoMh(
z;s8mE0JZ|;!-oQi>Y%;RfzJ60&9TSa8la~FMGw6eMSP0-yzg+N8PWn`9d_rPeV+H7
zXFujy?x@nKblo2a;k3(ZL8G%+ekBSj=yQY+)TX`H%v=+_JC$<1@8nV$r*}8UZEVV}
z|I<qOO5OSMX8d^^-})$a))TSug?E2rJ^A3{cta5A?TtiAYIx7|JLP`wP84*yPELF&
z^V}{wx%`)u7X9T5QP3>A-ddia+x0x+Ww+mGR`R8<rR(+s)k?elQl%~2{*`9MaXVL{
zNVq|_-4cFfs=w9=GWT8=LFMH$gWBZIW^qn>z3?9^-<~>g;q#YomA?Ab-+y!Ob(sO+
zEcPz;D+vXZhZ-xC>NaiUN!kv)&vtG)@8ifBMxPnXf3~A>s@tQ334y8qL0<Jzi8H&e
zd!eiJRNY2Y?P@&^RABr#yN#$Dio6hCf0q-P-d&I4xvSOH%3{>6^cVf}{Z6+e66%Q)
z>RNv<mR>x_f4UQkojA9*w<`wIpYE)SKdtA*KmRweD|Y1!&Q`lqEXwH*r*I*WTx5iJ
zS9ljDpQGW>sqJkC*=DEI=hKM+oWfwDX8UqV#&mgFxF1sTj!gCL9;3Dh*1}R+IM|i3
zYen5kic!^++$Pi!psFG$Rac#$j7=-T#=CIz`LwP`)q2~f+uZ;~)pgC`I?_lN<dM3Q
zh(vg)CE?VaEwLq1*>^>6`^8J;%04`u_NVxK>`P=~EMnn+^_qAM`=u0=_O_o6*RJdn
zXXZwUuAEpB9sz$1E&ITX@E6n>r}4*wEY9+-c#zpI=*dFec_;l&+I5%iaG`1j=j4o5
zG~uW_Q>UR5a#)&&>4$0IE_s}$MrqEDq>-upJUFL^=1DzFA&-kZZqy8F!q4}ycalwt
zyg$C`&?WGK|L`LfwY$;mrMK?P<}$c@L~Hd@Rj9Uuc1_IYsb8iL)OC<X&=9kQOnz?<
zQ-i_{BVqwKt&TAdP#qEz`5BvHCa}YZm>QZA%mkE~2#JZ&FgDFhJp#J_I4eWbiV3I=
ziK(mLzE@bzlVPTYW)xEo9-*mo!qPdxObwk-Og(snrp~OTGs{d3&DuH<nmQ*fos*W%
zNn0mEQ>Sa`bS<5(trMZC6ElQyrl%~OQ?^corcP<;l$K6u>qKbk%vm~fmd>256QQXS
zGnH{Y^OnxMtrMZCvta2gSUL-~PK2h;X-ns{rE}WWiO|$JW9gi+bk5j15t=$ZOQ&b)
z^lY67O`SzcXVKDGv~?mhb<SEkXDywxwoZhm&N)lxoTYQl)``&6>03H|OQ&z^L}=<f
zV(C0$={#cVL}==qw{*^1I_GVj2u+<wEuBX#okwk*2u+;}md*uB=Yp*hp{es2GfTsn
z@E9}8!^!TLVg?5xF)Kstaf^A}Vjj1d2u<b_7V`;<`Gn0xXfjV&%o7&#gv~@~GEZ8}
zlNR%&%|vK2pJb+XnJ1a4=lCZTQ%~FoiK(6BlvVSTRr8cx6QQc<!az%gfz~_CeFH@s
zg@*=;0A*E>MxcwrKoyQH$-(;$1GQtO6jX=A)Y4#}3abs&fRceKC^N}G5n?pjKoxcv
zQBCc&WS|PVZ=eV<bjHF!6?PaAQ=eQiPz7Zs87M-n69%fV%!Gj&P%=;jWhNOYLah@9
zs<6z2ff`UUPz7Zs87M-n69%fV%!Gj&P%=;jWhNOYLah@9s<6z2ff`UUPz7Zs87M-n
z69%fV%!Gj&P%=;jWhNOYLah@9s<6z2ff`UUPz7Zs87M-n69%fV%!Gj&P%=;jWhNOY
zLah@9s<6z2ff`UUPz7Zs87M-n69%fV%!Gj&P%=;jWhNOYLah@9s<6z2ff`UUPz7Zs
z87M-n69%fV%!Gj&P%=;jWhNOYLah@9s<6z2ff`UUPz7Zs87M-n69%fV%!Gj&P%=;j
zWhNOYLah@9s<6z2ff`UUPz7Zs87M-n69%fV%!Gj&P%=;jWhNOYLah@9s<6z2ff`UU
zPz7Zs87M-n69%fV%!Gj&P%=;jWhNOYLah@9s<6z2ff`UUPz7Zs87M-n69%fV%!Gj&
zP%=;jWhNOYLah@9s<6z2ff`UUPz7Zs87M-n69$UNFi=FMfg&^w6ro|D1``HqFv&m-
zCK;%~gn=4N7^uM{12vdrpav5LYA|7-29pfbV3L6vOc<!agn=4NGEjp_25K;2posL<
zg@Gc%72}gh28s}uL5IZD=N1NvNS|96C?b7s$v_e6b4vz_up<29eORa%<ahYT>Ms2t
zeUPPHsdxA1&!_2EDt#-UuMtkvzFdOiUM|xnpiRXU_%?F6O6?kL>a=ON{#^4iJ}(WX
zZp%BH_y{t!D|7z2=H;M01webbI4yIZWW^MH+QKj8d(<Z<ux%!{H|30=76#GAmyy;a
z-VsXrw|E|(Q|M!ji(z+)^K$N!X)%?Cy9vzS0y8nP`7`Rf1PuYBDfz{IrP&ehQ(NBQ
zo*DYmA$Dm%93Sm>+8yWK=5P#Dp8AK?%OlnCS>bzEFB{d%T)m9(nbphwqpO#D+aYNW
zMykuyW0Vh!@&T6*M#=|=ln;jGE2HJ{x$JwZuNdVkT)r|=zH&(U%CLNOw0!0<%2$o@
zRW4s0DPKLLe05m9Hd=n-G0NAB@-;4B8!2Bqq<n2yzCKz$`xxcxM)^9IuaA_kA5y+P
zEZ-O{KlvEt8%FsCmv4-eZyZv-f$|xe%0|n3s=S^&@LEBi+4!ra-REcdk;jgn>tVXl
z$5<Baba>YoOQ-rCnQrX4oVC;81!OFp>U(6mvFB{gPKURWv2?2Mk?F>s8{bZcSCz4J
zs_&8M#-4*Cb~?PjjHOe3k4!gqU(eg=@KQ6DPW3%9-PnD4)J}&tow0PP&rausyyD@%
z5JX|g!Qx2}t*vf~I4S0&EAXp?{??PtkJn{N@GdQq7*R&-uKUM>2%dMq8cf9aRQ({m
zD|{J5)r+a#lKh*0F^kzV5LiFx^lxCDCK2%$wTb)jM^tM_j>Y;w-j3y@cyGhmc#uc;
z4J<X_%j-sRd&3de2TPyrtY1&A^8jNpkUQ6%)o$(8*m>acUZ&rUz17pk3Pb61*of3k
zR)|)k<<jzbwQy4iZ@ls5*1L<FZ{A9N|MqVew{E=k=G$A>Z@eY^IX2S4)J|AgZR6WJ
zT)gLmt>BXIOWCj!tcrtU(9!!L9oyUc;+OYhVkB|cskR1lJ7IIR<AglE#G&B9{J`G{
z+u>E!E7Rykv=uvX?`cZ1>-eX`Hl5Ccw8>vK1t-kygw;;pN#u-1$9`!cgsD#HA!w`{
zw$Gm{uE^zkKM^926KMZ^x2OJe?=alMD+v+hGzQyJ%~>=Xs`*r_s(YVBbJ#l{mR=cR
zkE7X0!gjeqBx<xM5gM%q5vb9kBwN%?4dPP3hlxG#?^7Qg-=f&z&LVd@xAuFe)uLmq
zL1l7>x&<V!oGqS`CqBY0eju5ol1!4w@>b4DiS&JFLUS72VRIe>>L*m04kwhH4kk2C
zIyAgOMB8tkKj;4_j9v+y(F>5Ew|{V%ejKiKx|uQ1&2X)HHTfM51}de$6jm=Tr^bK|
zx`zYs%CcXN)I3)x1yOT(8MibZ=+^SG+MN-;*RL+071z{rfalIXhK?0+?fHye38SZi
zZe=E(Q^Xh4ZkX*w6}_Z(KU2Gs+LhHVP&>R&Q~9de)v#)tAC~6zQ(9dsPs%@hTo5Vz
z^rwqK8?2T+%s<RKF8UpH!M?@ehxz@uz?bg7<^`3wko3Ase<{I7_+=X5S9^PZ{f-Za
zuYOIdYC#6)Nv+?GJo?mcJn&c_?UrOtIch=5y0e&F%sN<_^Pahe*`l-3pUq|*6hix4
zf7Z>&6lOw-UZ5jX)ceJO<lgpkwU-0s9fix)@Cq)`SwfFg@g}?pCyy!@k6okd(%Zh2
zd5(U1MD1!vzXV9U`{32T5JXoN8)I|Tc+zk3-{hS|=*KHREp>mBmy5l-c@Ajuz2Nme
zSP3HBEc}Ocy0Fw0yEOIFq8%;uBItC5U+CjrbP!Z8icP;r6Ko1o?xy&V=r>)Oxo6Xk
zg9YYm2TQCx-SWg~oKO5rkz#=c)ri72*59RE=-oX<L7JwCMVd6QX;G_%7M>oA`Xm8L
z;)3Lf5053LQ=UEXG+@#Gh~i_iU8DyIn@+IkXKBVwd9{pMV$OAzm$9}=3--P3XFJO;
zsQ`DHBk*$2Ia9$5PmQy>vBHgP6s&fISI!#R)bjCKCTvnlT0edY-`eOJv<o+rH*WSf
qZs9WXe+BT{8L!m-OZ;0n>7_+jF;;+^HJogj_9b4?u8Q59Nc|sVisEVj
literal 0
HcmV?d00001
@@ -50,6 +50,8 @@ typedef struct {
GArray *tables;
uint32_t smbios_ep_addr;
struct smbios_21_entry_point smbios_ep_table;
+ uint8_t *required_struct_types;
+ int required_struct_types_len;
} test_data;
#define ACPI_READ_FIELD(field, addr) \
@@ -335,7 +337,7 @@ static void test_acpi_tables(test_data *data)
for (i = 0; i < tables_nr; i++) {
AcpiSdtTable ssdt_table;
- memset(&ssdt_table, 0 , sizeof(ssdt_table));
+ memset(&ssdt_table, 0, sizeof(ssdt_table));
uint32_t addr = data->rsdt_tables_addr[i + 1]; /* fadt is first */
test_dst_table(&ssdt_table, addr);
g_array_append_val(data->tables, ssdt_table);
@@ -654,7 +656,6 @@ static void test_smbios_structs(test_data *data)
uint32_t addr = ep_table->structure_table_address;
int i, len, max_len = 0;
uint8_t type, prv, crt;
- uint8_t required_struct_types[] = {0, 1, 3, 4, 16, 17, 19, 32, 127};
/* walk the smbios tables */
for (i = 0; i < ep_table->number_of_structures; i++) {
@@ -694,8 +695,8 @@ static void test_smbios_structs(test_data *data)
g_assert_cmpuint(ep_table->max_structure_size, ==, max_len);
/* required struct types must all be present */
- for (i = 0; i < ARRAY_SIZE(required_struct_types); i++) {
- g_assert(test_bit(required_struct_types[i], struct_bitmap));
+ for (i = 0; i < data->required_struct_types_len; i++) {
+ g_assert(test_bit(data->required_struct_types[i], struct_bitmap));
}
}
@@ -735,6 +736,9 @@ static void test_acpi_one(const char *params, test_data *data)
g_free(args);
}
+static uint8_t base_required_struct_types[] =
+ {0, 1, 3, 4, 16, 17, 19, 32, 127};
+
static void test_acpi_piix4_tcg(void)
{
test_data data;
@@ -744,6 +748,8 @@ static void test_acpi_piix4_tcg(void)
*/
memset(&data, 0, sizeof(data));
data.machine = MACHINE_PC;
+ data.required_struct_types = base_required_struct_types;
+ data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types);
test_acpi_one("-machine accel=tcg", &data);
free_test_data(&data);
}
@@ -755,6 +761,8 @@ static void test_acpi_piix4_tcg_bridge(void)
memset(&data, 0, sizeof(data));
data.machine = MACHINE_PC;
data.variant = ".bridge";
+ data.required_struct_types = base_required_struct_types;
+ data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types);
test_acpi_one("-machine accel=tcg -device pci-bridge,chassis_nr=1", &data);
free_test_data(&data);
}
@@ -765,6 +773,8 @@ static void test_acpi_q35_tcg(void)
memset(&data, 0, sizeof(data));
data.machine = MACHINE_Q35;
+ data.required_struct_types = base_required_struct_types;
+ data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types);
test_acpi_one("-machine q35,accel=tcg", &data);
free_test_data(&data);
}
@@ -776,11 +786,49 @@ static void test_acpi_q35_tcg_bridge(void)
memset(&data, 0, sizeof(data));
data.machine = MACHINE_Q35;
data.variant = ".bridge";
+ data.required_struct_types = base_required_struct_types;
+ data.required_struct_types_len = ARRAY_SIZE(base_required_struct_types);
test_acpi_one("-machine q35,accel=tcg -device pci-bridge,chassis_nr=1",
&data);
free_test_data(&data);
}
+static uint8_t ipmi_required_struct_types[] =
+ {0, 1, 3, 4, 16, 17, 19, 32, 38, 127};
+
+static void test_acpi_q35_tcg_ipmi(void)
+{
+ test_data data;
+
+ memset(&data, 0, sizeof(data));
+ data.machine = MACHINE_Q35;
+ data.variant = ".ipmibt";
+ data.required_struct_types = ipmi_required_struct_types;
+ data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types);
+ test_acpi_one("-machine q35,accel=tcg -device ipmi-bmc-sim,id=bmc0"
+ " -device isa-ipmi-bt,bmc=bmc0",
+ &data);
+ free_test_data(&data);
+}
+
+static void test_acpi_piix4_tcg_ipmi(void)
+{
+ test_data data;
+
+ /* Supplying -machine accel argument overrides the default (qtest).
+ * This is to make guest actually run.
+ */
+ memset(&data, 0, sizeof(data));
+ data.machine = MACHINE_PC;
+ data.variant = ".ipmikcs";
+ data.required_struct_types = ipmi_required_struct_types;
+ data.required_struct_types_len = ARRAY_SIZE(ipmi_required_struct_types);
+ test_acpi_one("-machine accel=tcg -device ipmi-bmc-sim,id=bmc0"
+ " -device isa-ipmi-kcs,irq=0,bmc=bmc0",
+ &data);
+ free_test_data(&data);
+}
+
int main(int argc, char *argv[])
{
const char *arch = qtest_get_arch();
@@ -797,6 +845,8 @@ int main(int argc, char *argv[])
qtest_add_func("acpi/piix4/tcg/bridge", test_acpi_piix4_tcg_bridge);
qtest_add_func("acpi/q35/tcg", test_acpi_q35_tcg);
qtest_add_func("acpi/q35/tcg/bridge", test_acpi_q35_tcg_bridge);
+ qtest_add_func("acpi/piix4/tcg/ipmi", test_acpi_piix4_tcg_ipmi);
+ qtest_add_func("acpi/q35/tcg/ipmi", test_acpi_q35_tcg_ipmi);
}
ret = g_test_run();
boot_sector_cleanup(disk);