From ca4f747cc23d1bba666e30165ff4abbadca88db0 Mon Sep 17 00:00:00 2001 From: _xeroxz Date: Wed, 19 May 2021 16:33:30 -0700 Subject: [PATCH] added ref builds and dependencies --- .gitignore | 388 + .gitmodules | 3 + dependencies/vmtracer | 1 + refbuilds/vmptest.exe | Bin 0 -> 3072 bytes refbuilds/vmptest.exe.i64 | Bin 0 -> 93008 bytes refbuilds/vmptest.vmp.exe | Bin 0 -> 24064 bytes refbuilds/vmptest.vmp.exe.i64 | Bin 0 -> 356898 bytes refbuilds/vmptest1.vmp.exe | Bin 0 -> 23552 bytes refbuilds/vmptest1.vmp.exe.i64 | Bin 0 -> 266794 bytes refbuilds/vmptest2.vmp.exe | Bin 0 -> 18432 bytes refbuilds/vmptest2.vmp.exe.i64 | Bin 0 -> 217640 bytes refbuilds/vmptest3.vmp.exe | Bin 0 -> 22016 bytes refbuilds/vmptest3.vmp.exe.i64 | Bin 0 -> 242218 bytes refbuilds/vmptest4.vmp.exe | Bin 0 -> 19968 bytes refbuilds/vmptest4.vmp.exe.i64 | Bin 0 -> 217621 bytes refbuilds/vmptest5.vmp.exe | Bin 0 -> 29184 bytes refbuilds/vmptest5.vmp.exe.i64 | Bin 0 -> 283178 bytes refbuilds/vmptest6.vmp.exe | Bin 0 -> 25088 bytes refbuilds/vmptest6.vmp.exe.i64 | Bin 0 -> 242218 bytes refbuilds/vmptest7.vmp.exe | Bin 0 -> 20480 bytes refbuilds/vmptest7.vmp.exe.i64 | Bin 0 -> 201258 bytes refbuilds/vmptest8.vmp.exe | Bin 0 -> 144896 bytes refbuilds/vmptest8.vmp.exe.i64 | Bin 0 -> 1371776 bytes src/demo.sln | 50 + src/um-tracer/cli-parser.hpp | 580 + src/um-tracer/lconstbzx.asm | 36 + src/um-tracer/main.cpp | 210 + src/um-tracer/um-tracer.vcxproj | 76 + src/um-tracer/um-tracer.vcxproj.filters | 34 + src/um-tracer/vmp2.hpp | 72 + src/um-tracer/vmtracer.hpp | 118 + src/vmptest/ia32.h | 21527 ++++++++++++++++++++++ src/vmptest/main.cpp | 17 + src/vmptest/vmptest.vcxproj | 162 + src/vmptest/vmptest.vcxproj.filters | 23 + 35 files changed, 23297 insertions(+) create mode 100644 .gitignore create mode 100644 .gitmodules create mode 160000 dependencies/vmtracer create mode 100644 refbuilds/vmptest.exe create mode 100644 refbuilds/vmptest.exe.i64 create mode 100644 refbuilds/vmptest.vmp.exe create mode 100644 refbuilds/vmptest.vmp.exe.i64 create mode 100644 refbuilds/vmptest1.vmp.exe create mode 100644 refbuilds/vmptest1.vmp.exe.i64 create mode 100644 refbuilds/vmptest2.vmp.exe create mode 100644 refbuilds/vmptest2.vmp.exe.i64 create mode 100644 refbuilds/vmptest3.vmp.exe create mode 100644 refbuilds/vmptest3.vmp.exe.i64 create mode 100644 refbuilds/vmptest4.vmp.exe create mode 100644 refbuilds/vmptest4.vmp.exe.i64 create mode 100644 refbuilds/vmptest5.vmp.exe create mode 100644 refbuilds/vmptest5.vmp.exe.i64 create mode 100644 refbuilds/vmptest6.vmp.exe create mode 100644 refbuilds/vmptest6.vmp.exe.i64 create mode 100644 refbuilds/vmptest7.vmp.exe create mode 100644 refbuilds/vmptest7.vmp.exe.i64 create mode 100644 refbuilds/vmptest8.vmp.exe create mode 100644 refbuilds/vmptest8.vmp.exe.i64 create mode 100644 src/demo.sln create mode 100644 src/um-tracer/cli-parser.hpp create mode 100644 src/um-tracer/lconstbzx.asm create mode 100644 src/um-tracer/main.cpp create mode 100644 src/um-tracer/um-tracer.vcxproj create mode 100644 src/um-tracer/um-tracer.vcxproj.filters create mode 100644 src/um-tracer/vmp2.hpp create mode 100644 src/um-tracer/vmtracer.hpp create mode 100644 src/vmptest/ia32.h create mode 100644 src/vmptest/main.cpp create mode 100644 src/vmptest/vmptest.vcxproj create mode 100644 src/vmptest/vmptest.vcxproj.filters diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..72de34f --- /dev/null +++ b/.gitignore @@ -0,0 +1,388 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Nuget personal access tokens and Credentials +nuget.config + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace + +# Local History for Visual Studio Code +.history/ + +# Windows Installer files from build outputs +*.cab +*.msi +*.msix +*.msm +*.msp + +# JetBrains Rider +.idea/ +*.sln.iml \ No newline at end of file diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..44cdb8c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "dependencies/vmtracer"] + path = dependencies/vmtracer + url = https://githacks.org/vmp2/vmtracer.git diff --git a/dependencies/vmtracer b/dependencies/vmtracer new file mode 160000 index 0000000..2130f86 --- /dev/null +++ b/dependencies/vmtracer @@ -0,0 +1 @@ +Subproject commit 2130f86ea886b5a8b81d368b3b6a6f2412c37194 diff --git a/refbuilds/vmptest.exe b/refbuilds/vmptest.exe new file mode 100644 index 0000000000000000000000000000000000000000..3859b4fe940e309cdad606eea0c7ec1084f0ff11 GIT binary patch literal 3072 zcmeHJO=uHQ5T2wZ*w)0N9t11CmcY_Olm3X5lGuo?wivNA)kEzeo6SqQxIb~LqKVQ^mXr&dl%7a5^tk8 z7olTK5&&=MLA?NbYiRAn017qhk53Vsmu<{)gfdY<)VtdUK_mB+eu5b9gYU8;+kgN^3I2;(BpP$cW@@S8A0uZ%D%2m$u zINReuVy`s$iR;3>eRza)0$>3Paj|~Fd;vcM_WOw~|2?7kq0%gN<$s@m4-Vl7P#3mO z!Uy!*!x#KJyaoSjjG>Qy7uP7LL1M#YU1KF~3Dq>>QeUK3V%$*7tZL-r(uJwhJ%bVx zwrpf&%`|vin&UzmJ`rq<$wF{Fqs=i)V2HR>w2UF4%yL~8J-Vt`rZ97Mk7DXWvd|-? zK8fkFq2`b-tT$fiCAB-V|IZTB<$g+K5>EN)eyJvlEtD zQZ=6EV#`_Y9xdZl8{1Cu64#hUYh04WxKT1Mb4y}H^`xS3fxYEqO>l`txAMfIKYvOr Xx~-;IbgMbM9*cT&L!;rl_>uVyC#4L( literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest.exe.i64 b/refbuilds/vmptest.exe.i64 new file mode 100644 index 0000000000000000000000000000000000000000..30deea34a44685c1fe2a2a47f3b27d471d9a9064 GIT binary patch literal 93008 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 P=g|5<-bxF?$?yLGQ?w5z literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest.vmp.exe b/refbuilds/vmptest.vmp.exe new file mode 100644 index 0000000000000000000000000000000000000000..60c276e74f089de6a42cd355f0b8885e353efbe5 GIT binary patch literal 24064 zcmeIacT^Nv*FM?=5o4)?7)BHo#hg)842WVorY4(45r=H1XRq3qHZIC4c#dAeRehVz4N~7rnSC5e!si!*Gsy)PMvf1-p_vaKD$m;J96B5 zg^5C;FvXu%h7G)_(rhgGakr&kXp(w^OZJ)om)L)-12_?CdMwwenxv4KvoA!ExIS zJJ%XMr%K1Jep9A#A6X;S5QXB8m1c@i#cXf6tw_;AQNy@)6NNEa%qm;!;FJGgk`cf2 zcbu0`%b$ufXlD@cGEsPk%7ZG$qSY{o{K5SyTlnk0Ui%b^`z)x7LQ(TytqR5Z%42JV zV%9&~|C`@C&GB6@2Xk2QJggAgUTFt6@ylAF@a`1&$K*Ma6^a?G8yfx%BOLN;ApUil zW#}jA4jZI?=6v>FuYufe-ppBiI&?JN(4bJ^uR8wz@$#1B`pyWLQfd2ooMipR{i74U z4&?a)g96dbfZaZP;eHeF_m9^=sp~%){^#p|8v)7;P$*)^exyR7j2L20qN74Vn|u|D zT3Z4a{kLcTp9%iIfPkDsIpjR?H_IA-m5EV4$N9hlf9W`v{vYRRp?x*}p5olo|2S70 z?f-nax(#;o*QKr;RQIf7r1LK!Eln=W;B@8GXM#tNZ(z`bNeg@f0~Rcr5EL*saEkAQ zK;KybK@*T{=J*E9nXsT|j|r~6Gkhlp`O0lbSU!~kIJN!rHPp#{1m{G~jZ&VpndvW` zw>IQpIVZBc-?)#IBW)HfTJ(p{R2=`&T%q99*J*(vC(1cp&XJtBy!kxmE}Jf0@m1kH zP@xEcB9(33xXsASSYcMrnA7F|elNxce{Adjy#D`(z_p6&JNwM()1t?&Jue1^Yx{l7 zYBSIC!@8meogUdd9JoNjl zbUS?P`-ubh*SzYtWRGWYP!(ZJ^SFpPYrMWB8bwX0``r1;ZucV{^Q~_w8?Uo+-90vG zZfC1bJG-xJHDGFBWQ^OUN4GNk+T=IhZf=uA$8KgUsQs+@C*_z82}N@|-||WHeiE?h zX3px2oC7g+HuP`tqkX&TcREhrcX0HpFrTecha7$1c>Ko24`;VtALq2=Sc5gMG{0YS z+>$tNlij7-cV8}weARx~{dkjVJ$xSfH68f%PQCW8H`Y3oA9#Fb?Yhn9xrYsz8?ZQS1h2ung6$c9m?;YdM{i(b(QFM&Y7)++U z6$&pJWCs-^hCpH17DJv6P}{dI$~Iv|v-S#w8|_7=rV=axWZwaACt#9Bxm`yJd(7-g zMab*a6;dc4>6*6T4O+exlq)`&(!5Rzg$MOxq>7Pj=@fTE>siZOS6Q% z>YkCtv>F2RcAI;m(|L@M>W*2z;^=vObatZ>U`&x1D6AR}jD>4=mEm_1AN{I~D4-+U z<+Z(8Z?sIs{p@B!)<@*V9_|%5NAPVPQ|r**hhy$T6NS5s93J^Wl8};6*OTc|zzM zN%28_B(eEyeDfy2gcd*ww0;BIbucsENT*CxchPEe%C5;e@Z^&@y@3(yfaeuh0DPj5 z=_wEiAEk_5zh0%enq8co6lGzr345fG zDAJ1cSpo-%Iq5&s8~zZ5OJ+I{{lFuNf|dY#4tOfYH9r*Pp&&h+$2QLa7QpAVkvgTS zGI~`$Fx4u1r;-3oVkilU(=@1D5+j5^h1DKH$YLn!=q@bRLOZzS9dl$4e4)3q>4C3K z%mrTWVAv*1;zj$Rm=_I048XKU08?*Q&fqrUo;SGJjY8p#)d<0i(k#6F%uwpnNZpQ| z(;c)j&lb)Xz?J#=q7a)U#F_~w3+lDW6C>UWam9_Y%C)B3avsCdOtCCGEB)M-(mXNe zy_i@~9dm_b_yDoM0D=i~dM4}D^Z`N-VoG(ri>hWMw9NC7~)7*R;j3JKrK9(wXAA-1GK z8Sy|__K=*RrYE(Md@v8xq%Ba6N}(}zV=O%31`zL8$+beLMQa?o&}8%vdjefj>yWE0 z)BFjpL#1421+1twu*=SiG}CChI42_e>QI*BDhB!|O$7rx)E~fw$ zec@pGj8O<?r!wr2b79McmQWY8lXIAsVhw!U_g&h5PFa$c!KHHupi^z z)RS;M4W~f!T41?~G#r!{Ax1^+tgj;mcu^|nt4>Hy+sPAo$(?fXjxjBu3dHRK1|D=6 zrn^xYhovjs0~{XY0F3BWTXwQPyWSsUqQy9+1vT!8q57TcL5{{qUT)M0LOIIrK@Vz; zCTfHvfT>m?rtIOhJPe9^V`Tq~xuF3!?B7CvW4hV{eQUSjIkv)lio`G-SRh31gnBXb z8p=Dm3d=2lFmyf)b;urlIBt&Huz9<2MyC``Wl<5n0VSx(+4N6dl89ipGJ2j7RDP^$ zlczIPhWyyA>(N>#mZe?qXe8u$-D)v&~8(X zb`Np~QnbFaLZN-~>Vy9P{=$V(<47w>E&puH*^sNz0w9#A@oyF5bm%aiOM|K8CtOUtzTh z9FeApD>UZe!iuE`4z3fz0h|~83ESN0VGE2N1!f7+H2`hNL9H_S;(!k;HcS%rnG@~x z_J!KrQhH$%OS7mm`h)XnV0N}vtBiQ3;Y9%SScurda<3p;%2Y&vP1` za43t`NU*ozKCF5=Csr?74Ur+Q{ubgs)a`0&Bg8)%&#PH7JXjzok3D#Qc$IRy5aA6g z%2HZ3KWA%SQFf!or3>E~2s#K|T<9$<0hQJxbqMPMVBODj#6(=aEhZ^6)?}rJ{LC#) z+Chh#L;cRIg%C25p;gggrpOC8RihQwc*2!g>0<9^bQ{j6tw>9~@9D@NBgjGr&|D}8 z+P6ujR}93lG6}~xe8)^FpueM=5ZNC%s>lwyxX}iH2f*8wg55uO;of1*UKdxDiOt`N zp`|NQmCh1i@jy&`AWRevyl4HJ(FjhG*$}{v-Nq?mHDV8_m10V6 zv*j3D1wNv_z}#gI%N`(LmWoY#G{3_Wp1+G)`uw-V%*H5%t0*H1fo)o8qOF*tMWL+> z{m7fSSVLVWYDJibcqJh%N=Nchh3@yHN zPI(zMgaU&VAvr}f1RBIpS~Dp482*&1RSJjoAdMcWgzBKfPql{35eGB^)I_jgT{F?y zKN(^4USB{XfUk67sR8Sgn9FgHkw|)J)ivhB|>$1X)1{CNtLR=m(So4b7^h6$u1{HA>__7pcDY zq`u%3)dwanRG+QlZm?Zi^G)du1aK@|GuW+z0(6AA6#*q6Z9lZ6wcuO~_2YQVC3^i2T8r|7ayja~$dA2I4ZYo^rO}mw z(5|8&bi@)0FR9;D$to9isYT)7<0_G6ipOp8ekNrni9&ofD&PlLLLRIJQPB`rZq%bS zK8jIN&NB)rp|UJvF0 z#`f0uaHaYT)n;Tbs?FekL=lIGJBn(|ozl?!Go3t{6Uf%#?~qE}+`goESaOv%aal=?rD@|kB3EBq-d3)#lxESTSo8(`-wRz ztlWen=o_LNQI?Y1uvb5c>t0j@RWKFVdcZow>|`rq7b z3FmcBQrATL9HfHKpJtzIrif+9{Y0_%3$lUVA-63~XXjHt&PMLEtfi#P8GO(i5Xh50 z;hh8!1$9OAE>I1oTB1yVl!L&=oo;=V<~fcoZqy#sBX?+vUU%RKHz9m9&kPfAL~c+S zITYhm^b$VPT2!DHy>LA#3ddainFO68gxEkQ|0mM{-Kc>)DI=@G*h0_wSt zIpTz_alV-jsVZuK(5moKMmwBZck4+8ituvO;>w5{KPrCE3XE{0bDXtXK@Gj#dyeL6 z?AJ$(tBEbI4#LV>AgBlRl>q;SHj2f{NS18c5C)(gz|`BF;=#AgK%AU>VGWls()IpJ zXb*dOf^|&t20+u3qIg(SC>XBQbV;TvICP^Ez%hm%GRUrU5hp!pA6QTKSP)m3^f&Bu zp**NfcNwxVP+f1=g9W=mFkOZbNIP+ijf!e;u*AZCH!4NmAPZ1g1arO~%S6neZVjsdZK~4~Bym~-sfcvi z$|xkV)$HxTbM33fsEub?MJJb_{{ zhD!b-(4*EPtb0-g6u2C4UqC0@ti&~)%`!4|QiJ@YY z6cQ7>aY#2YqtYl%*o|uZP=+!(#^yu^)ly|dNokf+xRzb|Kxr};SD-j&>W!7=*GMz1 zQpgbNCUwcfT4j#y03q(ZDYau~dC&m%d3T7TG;oFbfQ?egSdFvA5sq=GjCZBOyzI<@ z&aBr%XiaKH(}ssiR}i^uLllZV?huO({P{O`!@S@~U$~gM!|NXO2F-4C z2Po19#-}cXf&^DM-lnoQl4%!AroRBsi0I>^zh_%I{+`T}yYS@k2tmDFEYPR>aFiEm zFdqI;z!7@8J=`9TcKYQbIzMCqr!lD)Rbhe6V6If&bmEZ6Wik8VWvt+-*fvO_L`EkI z3L+l6^0mS5hIsMdxPOm%$Q5Er^XNU>))M3OcI{c@ZxC5}BZD{av|+Cdh+=O@OWP|W za|;;ZM$zDx2WjAQS89PY;z3h@75T$jqP1vor74X3 zC!TRBx~ZrM#JbQc#%l#c2y14eTMX^u;jUE3)?_q%$4>GV-`?zp>QCA=FL2j8@*%8yCI!WEqDnHeymt5bf!X%Jg)Dx=4vs@Op853 z4P`Z=FCx~JQ7EY9BtFc=~XW24u6s~lWfs8hd zUXtuGMcOD0n_!GkSEA-w!S$6NJGeV%hN_rVX9yEt9^M_mNLOc>P|u6%GOZdTHb?}I zTtS@@6oT&@RoGN76dm=c*oyOVOsp`$K78sh;ZUKYn`6#1A^HmJLhb(3UWcA#&)n3x zCfHEF_5~BD9lfwjCh6^-LJ3TkX1J07R5&_WQQc902bU~yn%bg}IV=KfjV%(JzX?kc z6WpJvcw=5T|9n+h)CHS;Jfcydv{j!7WrP#2%bp7fkHwrjxZH6}%>5-)Gj7eL3HJBx zv1Nt}pE!N>>=*JSk7H==)gr#=;r6Py!oj7EV@~b}AwD11I{U#C2tvi1aIf^SI?wc9 zmpg*G1W5{Y=XYc#oe+PIvl9B{XtEzinuVl2=#r;?Zj3F?JZ0kJ=0XOlM{MPGH6Qm( z*qeqb^6Go^)pbc0b|!HlsS~!Nls;dqg;0fW$dXg=0b)g!-RaiY5sgvuE3|`n@GeEnc26hEG$wb3UY^`wB?MBDmpk0WL zHWa_(F|ijNXT5pZBxt0kF%aWUmYk3LP@Tn41m;4%&&G!Y>O&|dh9}uSw;96WIs*Kq zp+FqqzT&8~fEFrB;OdBXxN1xBaiF5fZksx|g+>E-NAfvxkKS%S03|ioX}>cwJZT)J zQRHb&bEq$C=uV9=iz^Mm%Ev466<%IBSAi!fR0E01lXS3%7QM!sIh-X#OlGiDWX`jW zg=o0QSXg5Q^CYkna2idfbe)sY9O$c}crb%jLLfVLH#+F;sL-kj8ww zr@Zh$X_khZz+~#eTD;`-KqI3lk8_bFLybHwGmxsJ>q|GXh#GS0t{GPHvX zS;HTT5f<{Vm`S4HH*|2LdhnpwGolVT0vrz9XK41K>JTjEq^W+Uh>g;5%PX#^HuAM& zXllkm>`c`xO%su56I1neO%W};0AQ0TCzEOQk2Icmr~k$$osU?5-Qz0;;ESiaesw}JdO+f-mGDdzd-|Y z`#cG$Jt!^^WIhaZ7RZMZ6YlY%;p|#3N=B1-Pb#2GQ}Z}Cn$loq5=$8%4LQa` z(lG=|+(qs}pw~hAbEks{1a~rmi#@0cM)HuF7y`-rp*^~m7gXhoH5K(l zPuxoauuQJk(3N!w0dR&}r4gtogk34CUt`Hkl4_HXXAr@qNj*+bJ@KU%JK!?gdJh)S z10+7IrXT?}eQt+5pUYc$zp*Jc2wYckg`TgDgHU25NknJC#Q)z=1wpE3C7DI((zd?(?dFOQ{pwgaR=MwPvz1;v=f0 zCnyGTTIuHxI-ip@Mwyd`djw6)b8x<7{0}6lyVJHiPEsbO*Tb!xxDu1`A>Td?%lS^n zpK(6s2(r(FHTcAxyDMxQXV~g&st2-#((tm6u*vF{X* z_;$yE`$t=f;m_bZGvPp<5|xYtXYx2BzfxCp)Y@DYafKo-B z8E$K4*d;)ww@c$eh0Ilc;*LHVf_Njem3AIfbQ}SO^%B^ep4x8!SgEKp*YMeIgyFOK z;(u>n=VdtlKF08AH|pPyZ_oJm_Er-N$6w|fK79uoKDYjE_*8itKBFqzhgBZ8{nOAc ze|{ZpIG(rA@Hw|~ysV$BS4e>2e4S~A&wG{f{eun1^8B_whGW@oc^+9mS&rOKK3}zR zep#M8pXGnpRl~zDzpVe&v4&$AH`#7`UqgG-L55G$O1rRr*=RVPU2JWWUPiWxmMrWjQjAvYxVCG7n_G$^Ml6_GOYm zzh;#<9P%_A%k#)0 z)?e03#!KdnJg>~}hD!{3$oeg*%wydv<3wK>H+7a8`pJ1AyYg6$E17?CK9KX1te4DZ zxn1U;Jilz8+%Ee~)=$PqwolG0GM{CAWZuc~D(5XZ4rTr2V>zG5aU%0b##P2a_V33^ zykvW1J!HFO-pP4R=9jFO9N)5^Wk1P&k@1rCl=YJFkoA@GqO6b13pvlP7-#U8?0*?Y zd0u%Qxu1-?%x_s=S$|ny*)CZxnTN6-^7UB*X_UpY_7`pEfH_MdE*%vYHQ zvOaQtm;Eoxk^L*nk;lpLCfh0VU7laITh0$MUu8RFKFK_k?M3y!A5|*qx2;d{;X!Lr zOr7Z=>`_M=3sEmoK}yAjH&^}@sCM1xEb0o4lAp!Ub9p-kwFy0Y$o0f6RGl#tglz=M z;+=G(MujkG>%pD=!VD;t_#uuN?NBT*ZB(8kr90j$77WHqUH>M^molD)CGv6ntq8jm)V#&r`sqnmbM7YeW~C3YSn_;HedM zsw2&)BLg}Rg(cUV-`G+W6+V%!_%`Hn;dh6j`pB1zJ>dX0;RIijsxTd26Xjyp3`0!O z)s6DGew1!INf%aU?&FX!D(pT=b2!C?Zsl;zy9tBb$dNC;)=0N1gh)@&0_v4;)%zYK z5Y*C>5?SS4vatc7A^gOGcR>IfY?CtdU z5hgec4?&H3sMzuRE6?M^?o8y3ecpyEl{SihsmpIAyEaq5u;4) zH6h;z@zXH4SICiC2-e5YBRGYoLw6n)1iiA~;rVdueB2(>5^vj)FXB^r@Qp8XXg(y+ z05rkmtxVjpz<{sCo`5rYJARah{$Qttf97ZDs?!u^+X)tU8$OSr-#E0~q{M-wGaQn^ ziLaPiN;g|D3jsnso#m|LMegvH2ff1}Y)0He`$Z%Ij7WeU?zEJ9wgY$FXd?22^rp8{ zGqNvO_frV!u$NK1#g03?*dE8DeB{R2YaP3`AM54{me3b?Tte7_74X9m@y%awJrJT@ z$QYCYbY?mQ0&oS7b>W?izwqWsK?ak0Wuf^l-nb(*G?-*gS9u;c%7elxaz(4&t{E%X z9|{^SRUg5j)S9o1j#$Yc{h)qP+1ZD4POOvz3@cSG*+U7uV39wgDCfopow1CdhgMT_f((fnu?SrR? zZG8T7^u#YMN*r1uGbDUTzMB*KRT+K3=Ii!V@$QbRH2A5-HV+yInDlm6IW`}2 zY`W1}%*kr^j8bGT9>UK2KO8N14ZEI>e-n2EQJz|@WUVU{*|xKkFQ zb28nQjR!U2%4_Me(sBEk|0QH2CtwSuTqw;GLIWU6Oe{AIegARuouO@#vyrIc@Jj;= zdwz`fb+xcEVYw1>GX^Ar{(8GQtZHXg)rERLVTr9d|1aXDls82%?rkk?RyuC*l;+{) z51AwWuo4JsSHXrD8o?{5iYNJv*&EDnoiL9VEoXuUf^&{u!g3ezUT=4RLoo?1L`sUe zBb^D4!8Ex4!Do)La~&8O7k-Ok@_og|1lY42u)+NkL89J8Tn2oE8KOR2jCjYZVn|{r zT%4j+>rAn~A%>^ubi6ZVrlZx2=Mf+c?5|*S4Bf^^$lnC9F63s2^hTW9`odq#h(35la6gK7!z{SIE46zGM1ZiDq z&I=rP(hAVgou)Iyp0pQ<3ip3FyQu**F9znc3+nw$$8)as1RItjDSHyk*PhI?NQNEw#1EQ z@DUzN=BltJ8 z$&u&=>cH*$8T+O%4pNJ1XFY-z>aWI;BTY5R@Xy$5&kHG^!SPQv9DbuYinJgQykb@+ zp^y}ki+%h<`K-VCaaCbu7o7nhWL%A?pwZ5)D(pR!p~! zJ>*VWMoy*UsSjir9t%!D7I35Ph;%&v4pmCiQbast*o^J*fcKD(YZ!jvfQtn@D)ECC zfwn*y4!6Z9C2va`Lmauleeg&vG{#Va61`r1yQ)p~?0ogRs#xagN14}l_O|hD^nAOlJaM_ZP{UA(@n{Dq+b7(WqngZ?h*<^(8Lc}=)n5Pi33Cssu zI$}OUX@3J;q;2q=8}1aw(sokGNVh=+(X`U z2q`et@%=`fRC`vZv6u#0wTEm_b{LHEr1yCDqAeUwcbIF9*l)?GT;b(+a3^~?m?dq) zSv>y)50DY`#_7xGifmg2Kj(wUke^ZDeyYTE{A>)p@e4KNXi{J;(%T*5f$6Z27GhSg zxi>^QdJ4;@r}65s2qs8{B>Rdhu96rrG0j{!#0AW&njVg!cg*j_yNLHH#E3T_Pl=;D zZr&z-uBObnk6+e)Gjnw1U)Vk~cXW{|H{s+PWBYql1p>t!wHR7)R;zwp1<#*GnNcvv zOI?w-QNaF02cVq_htqdvP%!cf+Z=HN2fp_!wOWiLM7=q+g6UjdvcW$V;fDqr$MQOX zTeFA1U?z8JhxH2+_GRX)s10n#$B`8F-0vWTn3z>XEX#^`XP>IYPnl9|9VFIyXd&(G zXQrbGkZ`9+&<>Vs@vBpaLe_qWl&gMj!pXJaO>^ADse^KdgBL$1OEuOB>tdm+;pbFK zn6h6$cc>%T=Sp?a1dlPet_EZ4W08<7;w0)yBRH+18j@1Xarla(U5Hu&0!waL1TRq^ zc2e{_W14{@zU`S0H1u|vu!}yyom}O*;1uI`hV zqm#}nbQfWj4<@(I00;-3LQ%8u z7YHA|8>Y8&WC`AoKu?il;fZ!&`-8FjcV?+)&z-a}swxeg(d9^vS0DR}G5Pee0d^x|-28qH4#cztz~?`BgWkq07Q&xJLdtJF2_yYTHJd zv!^mr=ZBkIxi?^KSI-?)y#tK>b!YARA1)6Zerlyzy;}W@g8h#e*Y02Dnvk}k`pU6i z=QiuQc*`ui!efIjXab0qifh@(P6O7a{x!0%(}N=)?Vi5)w&>5L*?*ky+qLC+gKMrf{w;!r^z=7s zXR1E4$1ylCGT7q#>%ldt#lGayMcb3#H|$pBb(6nO-8{A~E_LU;pxWOZ(vytL6~?`m z#W$YWvZF_vv!iPlmTcZV*S2-&+&+DFFPyex#Nd7PyKIY@S37_8iJY9np(j@^JkWST zukG#=Y=d^|s}?o3c(!1Z&7?3@m+w6~m;6x7xNx>4{<{5&6QhY&XM?p5IXCf@j1a-Q zG1ICTD;63~ORzM;x||#Db)u7c_Q^TBUv{rv;T-in`bK2=ep?OU7m`m-mbyhdG zUQNvz+c(yM@tn;q(!n=d(-z9Yz+U4Wax-DyLYyP2% zSJr9s{X-x34e6|&9Wd^}_W9=~_(xoKJM@4s6)tWkWid*m7JB4X!`yUCkIyF`&8g|TF>|(M@U>w9Z`ObGYt`95yT*_X0~eGARQ&NSc5uM* zBgR$3H?{7Q6u)v~T(WKca9<1S_MRC++4TA*ALFQ;F6?lj&0*emlwWBcWUE$P6=w336)JJOr(ndtO- z$C;i9&qg)3j@9veXQ1M z%xWdqm+YE-ATIc)w@=Nv z&A(kyTkdTT+i*{#Yd2D+oj8|cU10IG=uL;Wh1<&J)v-Fdd*;Henp9YL?VwXVx6mrv z++8~k?(Vhyn`Moz6NZ1i;M~-_|JiW^U+=j3CL!2qTDEX};Aki7{)AZ2U9m!o;N3`xXxVGc74oA8jpeh`C;s8MBfZ zv#RLyvL*e37w#yWJ!aIXOq=DoV<%>qUU_-1MSbnI2W4Sj|K7b}@`k@poA^Gy;QZi% z2^iyisK=q*JM#L3r5$~j{WU-RLrk4}BPD4Omo|#)F8C%@FPiP_IUp@%*{PN@zs6h_ zcGR2NAfKh#)+xOE!zy@|U!hCGQ6oCpe9!e7pKN;NbCzxWh8wr83d{NMY*X_MwVh4E zB2AsQx;sJI*5iXy`@OzeW!3GY6&w3OT8H}goFr)>Q#X3gx+ELH8fr_PVoAt}OCC`HAEG+D5KFaBZjWXBW<*ww;^NSN@{W zpFM6RPKs~;=VVD*S%Xn5t(SF&0k^G!7gs9`-9BpcS({_Is7#i+wr|ax{maN}V*|GAd(*pBQKzIhyFV8! z&;(StH@rSL;M{y;^EF#qzjup&urcmHi{*oTE!J3z8Ad;@fBc@BGft)VULJF1@t7-F zmV3RfHvFOPV0+={-^CpV7FakIrM38Se}1pIwXKvp#kOYm?;;K^{q59jXYXp8>;68z z?X0SQY_<&T-{EeBh4X0b(&(`xU++jjq&qE(Jv!328ct~Ny5T8fJ=TWiMO!<+YBjXM zk|$PUHcyLaeUT&m+)<}`2_e;_Xvlqw8d7#*uuOMNB^#R>A3Mk z_;6UY+9i*AmdA`bVCr^n+ubhpicLm*Uh`;yg9ZC=_qAgIO=cBbY1Lz5w>_F}?-%?) zww`w0IpAEGu_Agy>*L|^o>=`__Jt33w0Lu)`nT&2)6Giy?ALnx%-Eyb%Gug0zOi`F zVg6wILq6ZT6j&G)J!qM4XM1VcIb>^JztSqV*uvvZb++Z#Sf4w-n?uX?+8&k@2RK|Q z?cqEqz5n3}zrEgZHa6kYkU_BrYWa1Bg~RLCZBYNvu?5RU?zHgSJ$de~h__c7{Ma$_ zU{>m4D`zPtmfLQeYIGqkX+_rJVUI>6CNAsP(YtQUb+aAy${M(HOdOe&6yVS?c;U@L z$IGLfx7h5@b(?g<^vb)ecJ=f2#I6eKtBa56x_?hSlXa6eJEt8!kC-q!xY;gg%cbvY zQ!h{UxvM~Sv3fd`@oaOVXKk}yp2n`gv-+@3CBw?5Z~HB%<}XEMqx*E5=Q9IqLvWMR z>oaFJ8hK3@a5C#-+g4-u6eQkv_=VSo+%^{n2KXE?uCjV#>x``U)*Iu3+9VC}wb*36 zHP!6L^(Gs-CbuiB@b1>+-16tr+Hm#Pc%{RQ3ztt9Y~EL3akl8N?VDD%+ZIPy~r*li^Z>r7yahf5_WpG9$8-dVC5*`xwh9vzpEGAlA6|8He6Ah zqP`yAW-{_8GTOEVDU9d*F59u85j-cN@ay(bLwDQE&UN)jF}?Eo8M5`3*c)LBR|oHP zocz3($&ZWQoL63CJe~jUQNPTl#piXmw9YMD2Bv>-sQbv^y|p(s`i!|SIw^WzkaErA zl)D4&w3r?mbKQ7Hy;TiPN%?cuxG!sF2G46$c+Y;+Z>Ma+a(^F_WO}9GajW|2F+F>Q zo%gbe>DqPabQAOF!Okn|@Y>*f;C11NUBZaSyXHe%*uZ-q>*g4wMcZ!les*DY(%Cu- zmCJK7lZ4$ZW*~o>@=7$7rFqRNJw0P)@B+WWdkseo|76o4*L5sbBK$8D^)K&r-WI0M z3f|;6d*YuaD>bN;P9{Uz;gbh_*Vru`9+kM@y7ByctPKsH4KZ*f=ch@pi&7nNq}tk& zE{)>0I62kW)Nxfad!O4QPkz4rXyJss-I=qS*1Gm6;Gy?RzgByjp4&ZFG~vo~&a}(J z0UIwu3L@%O}G}Uc@5d6PV}{E z0c)*a?Pyi<+2@!huf~FkfQo|+&kYZ#XDii$i)zOo#tPB=q?4~jaOcBmRZFis9B7GEIfb0 zsp0!~H8v)yibuuNU72E;f9Ye_vV+cMmzNHnFa)*rgM?E}b`Zc6M;;-pB>tu?9}NI3%FkHsh*Mn_KrO zi{H92uB5}=fxZ^W9b4a0Xs%Ca8n&r%k23G15t(@bSG-kSaGFxUiQ|wlj+5AN9NU4`46%bv%FK*uZ<%|` zOt(#$xxHm(<~HA&rLA*Dy>8$A{qw%}z3=#sl?0k&XtGn>~4y$Zz8PMJ@<2 z;R65t_#Ib7rQ5a<)x3ZGD?NT|e)bjLg~xvRYySQHjIv7C!#1xk6O zSL#8n#|{4ei!Qq?pH}_t-my+h{x@fB_I5YbY&OFIoIOBfkYQ7HYi+Kn$yhZ?Om^}w z8G&R3k`YKoAQ^#V1d3ov7d8BuZe5CGB%G^ylYG6Km6BqNZFKr#Z!2qYtrj6gC1 z$p|DPkc>bw0?7y@Ban1ql`HGb|JK!wHJKALSG6?Ou58U5ky*83Wo>nH4YWmZamC+>ot4a- z-d11Ly0W3ZC8K?1eRV@S9OpDwHm=BMSXI-!YGqA(X8DNB#>(c_m9)afMrLJ=$SPky zVr?c0)O2J{%o^d>t+jG#OR#2{x!IF5O5kR<$q@3Ys@j@S<*J&NjD}?yOIOxcHm{zT zF=1)O$T1nCC%|HEWgWD5Rc6$5c%?@|D{5_St7>g)t})w~R^L`<{^!;;HZ->~r^8E? zum5w6M`eweU}~J1*VfwD*6O?ev)P2K5u>t@S=n4uS+TsPq0U5oSu<)xR@2(N8oR&e z*b(E#j2tm?^r-P8MvclEhXVBt&2^Qvw$aE@<6yNXtVZrRV${ezC%~$u3bShKD^TyH zHO-7#U1i70x|M5csxv1ptE_FQ8IifHt+v*)i)U%E_LbGGD>5gJ8apm){rdGIGQpSE zw6;`KHPkO#x!lzBPlpXTD^^xloAU#4t3eU#P(ZA!Y+k;yzC!(uA3Guw2d28F+0-p_ zS#4!&CW=_`N0FtgTWeY>8f%&>S{n{9jz{9io0OMXyRsf9=*V%%tm$a2z+rBvURjU2 z;RI<}(a>IDvc1}j$gHkxt*kfzXAr%ttZ%JYW}*l^3){60^?y`#RF<*uj(?{j)Rxsa z$KZO=qD*rRPqcP@gqIWFv&03sR4+hhG&(A`PLifVXX~W@g)B|^jMmw9|chb9&~(mPS;JX45&fkN>{ zM8&aQz2`iDddr-9wPIr;2}k}e$|auZyr+#R(A$UI`zA~m`^`}mI)`Dj`Y<(`mzvno zk#l=vM=RS}8!}oeSJq~rp{S{EZAp09UUzrSN1fGtJ5|fB3#ix~L}5nyNOmy0tYKg*BDcCXv|YycBgld#&xf{Ob;HE5%e>9183rtAOdU92k>J`=m;mlp>uf zxxf^e2#m_Ez=#Y6hNUYoB!3JsTmKU1$Xh^>tGUHHu|@11$1L1Q^=hh{sGi{MFY}LQ zez=dRb8l?7hipVncWDB4lQ(;r8m7a(i|p3d)NpTLOqN1TlOkZMWCK%VEHElN0wdBN z7?xCENPZq{YWNAzk=KAC)vQAcYxwwJv)#LqAChZnxtW$H((<6eW}L-ysFf@40v%~# zel<&#ARU%+jTm@U4AbX0am9U}4!(qXwD z7?K-+u3Q9kQ6fZ4AvfFXGk=*oWFuem^xM+TT}-7&z7k-3rSOJEa` zET~~Qou!UosntM7_6LeAqU9W_`%>M5Y6jJt8LJ23!IhrOcbWfff3vOk`y05xnWy0RG-#^E%iu|P{NQ@1a0eWl3Z$cah^Fd{2~VOaPNJ`JL%1;&NJbU$E@j4 zift+`{GPNzX@Plb8I#wP7VTme&EFL)U1o@HoJ!+RhgYeJS4g+0T6L>kwnv2GKo!?` zMITqXx|!?%AZoMn&Oa7Lq9-^aHrE{W_RUHC!>dZ$;zfrZWFX>mR);YJ z|0eZM`Lbo8@$JldmZE=sH+XHCf8MQ6p?aNqT6`?&mAV}smzZ3jw6w-{JmWnuS2lX5 zzB)MYNjf;A(}?>=f5w?KnxSr+ZXwN47u6-8@#+`;N^y#crH!OnT2w2zo2tbJQ5~-8 z!n5c}#U<-0?$}Ay;#-@38f~`KB5ff$PaTu2=_|VR z#V3(IuWFlj(mtnZHSK}N0Hv4be4C~pQ&YYi>aQXYP&fc@%_m2Ds^%v z`w^4lw1^(iqt)Tmd+G2nRf{el-Key*jnr?DN(YcOs#-UUv`$^|I*1>x0@Ieot5)dU zFjsV1wJP=3+>QSH25x>k=>m1Hf$>lAf_2h#mio%br~ zzN#+$)-KvOo8q1-Hhw}nMvJcV9&!38of~-0Dlj+Xm~_>mc~6t3s%`6N(qENU?N0iO z8W*LLe(xLiA^lj@s!KuRp{=i`_?|DCO2ouJ7njT-_0Pq1Ui&T6Xqw(mPb0awF-@sjl} zq^GH>_v&M`?85h<#!sci-t}^Hr>D{;Ez)6nfn%~!9Tu5~pO~ywRU6^es`4n};ZD^h z!)aWrYMocr<*HWxM72iMd8VO>$r4qYyzMSjx_SoH0yXY9mo!IJ?n!*V%Dr$->vX^N z(jwX3B{xwWwwp5X^I~oj-Djyd*W2k~TC}P+)gh{CgE>IerKZV>*JX-#`|HDiR9*B8)z_73 z3-+=am#w1uoT>#kfW`+GOn+9brkKj2rgFUjd1siJ;r~`Y)8F_!(&@4V7?az9X&432 z6Mc7^fhlq_Fe--uBeEJ8mRev)DuAvO0v(wK6qzv0c-sZ(R2c$HksiRPgn$wG0c#3` z7G&t z>>*2l-O;Px6FvXafn8-!U>6wyOqXH6nDhdsNd%ZGKMgip{1h0KH-P9%2ZrTez>wSm zbma=5Bj*A|P8e*qco5Q2X#+-N1u!g&fFYR+bY(KokugA#ooGK0>8Nx8Mr7+Y#{L^% zNZtp!@-ono$AB0|u#NG59nul`2QVzB0Yh>m(3Q{o8OwD@i!{)(5@`qh`6efaIeQ`< zkrBYK34-cH49f$+klYM((UWg1&jE@YPs>eAw=%s9 z>4+=Mqf`Gs{$>2FGnqUH9;$1@NxO=7@Q`F)^?_E*5DybFxTi@>lv0u0HW zKv%8>I&vXU><5?-6aC- zCO-`@XTqnzF7gI2U7i8Pbw0?7y@ zBanoYi;Fln;c@3gKVV3TKU^0Z9?&Cw&a@~}cyA_Df7Q0ZO9S&UO8*Q^d zs}qP%vu(D*Cd+Ix(J$ezjWuu5>h9NF?^g*O$iKm!JnD` zAL0D}Fz5fHrxZCZ=l?sL^N*fz%;$Gx4QKV&QY{BMG8ZVaAJ+odgZX)=k0WDyoBRyg z_dH6|9=bT`QOI;E0}*a5ML!={s!hZFnAD_f2Jbp- zF^n$@82>u}U3smS@t?{%bf>*T{C0@({2u50zld~Lwg5wNE6|lI*}i@c6uA@QKSUm* zhs$YyHp^br)8yZe1ArPbe*^PZFujo8X3^W;K+H*|x{{?jSZXLOdoceO&cOd{u&Kkp zfv!9WbmSf&dg-ZNh;&%aik#^-A zo)0fEZvRBSBNtIUjh2Tqy&7rEz-P`P=FCAlBKrcvvIj6E89>as2V#prY;k~za3=SC z6!-meo*}>S40(?;`ClAhEMMXA`UuC%5wk{y$QG)%K{aCv%-s01fl>Jxdl!*UfMIdq zCnVSKDD>vOpU-_ihGjRv-jN2N$P(rhBJIjl=8s|iB-SktbxW0f;4MW?fQP8;05u~0 zfMMC4TiL{|WO6Gbfg-neH`mA`jGMr}Bj0c>fcN;!`2tr5c!)V>l>v+gVg6anKbraL znN!c43g#3rJ)SE9%)=JLatpQjfBHqWa?JW@9RT{(`mZDeiN)3Sknc4U5k=0D9+Z_<7s zJUbGj|0T39gnf!k1x95UY$9?h5G^or&;rxjQQY^#kT24YrBabE@-yS}DdHpYI`N4< zCfYZfkH+ANGno8KMj#o1WCW5CNJbzTfn)^!{}+LnJgh_Y*FVnz{q;)gH z@hK0p2U7HBx8z+y>QD2^HZyx-;?Gx7$M37BIo@_AD4pz0cJZf-tp69w9@2qBfhoQ- zyonu`sPXETsQR-VI$kH8t!mp+Qh!QaqnU3MuX3?BEyJ%x)yuTKTZ>jUkUpTBEzKjn zU)3e|k^1u;%go-#9p`vcEWT6QQZsEZCjJzQQg71J9=>X36vgBurHwhHFDY%fgY*EU zO?#6rR=Va?QhzQ_-9*rMEs7tc=uhQYTw;p_b1C}AXHf>}D;-{p+n*vmP&ZTTRq;|) z3l6kB6?v0%?p51LGoK`0hY~NuQ5EO^W{Zovb1PfaZO7ZB52|hP1*HDOq$z_*@A6e| z2GnvbTXYxH_*N?>(>6~9qy|piZSskx#(olJJeV!d8= z%J!md4;AN`DyKMW{xDV&zpe90pH;Qf>0ghlZNVY- zW=g!a^ad3xj12oFwVvZ$9mi^sXN)ht$8hWZzEe&l=>++4yD)j;C0xj`IU& zPuVdL<5Tajps_h!dj4Gi7CuXxF6wTBImGd8&GwoDf2Q5q(YBbsl_fv&_i(i>7EYu1 zw2IB%l+DLFyto#=OVwY>q3$-jXpXm0zv0MsXnTVeoo`ykcm>P7=F7kM+jpj|-?(WL zbct4CcHkPF{u6C4P;tg#q^Id-IR81mnJMpZqiQ;HC{2&+B&;!6rVgh4LZccjGx=B2 zVpR(UkQS<%^CoC~Yx&-_GDpQJKhk!FU(~GC5VxH+gyLkiE%&AvZ>P4}+GVIZ*R&V$ zq6@EOQNIaZ8fc?(yy~ZG$+8)={Z0KY@~ZT!s<~d<{yd(Cds`)1DG5JK*MsI-= z|Fo$$#_>88Zl>+KTC~WU%lU>D?X;PAS#8&vhlRMKC1$OM_=S+~-KU@H}8n*JSW#tM65Wyevxs*{Z+R%cjWK%>pRL+^q(yTiLaD!sNe z{@`Px60c~E*JPcjMVChD=`by-hx}kw*AJw+LDfQYrNzW=mDYwxYgFwtz7^_;t6s+| z(cZ+83sszXI%r%hJAh)oij6nfVx?E#St`ypcbJ$=@9_3~&3>fQR4p>|-s65(Poy|X z#iia8;BYP4Y3(!BHhWv!Q9%wJ4N-B8SNr%3y&I>$VjrAwi|JjC3yDElXW zy?5UDH_$nly9{6c4RmfUXnY6e)=+#)J=c4lUg*%HZsHUZe{F{u*>=(Tk10N>MVq}d z+W)aqKa=Xis;&tXU2EoJ$Hc#7PJfQnKY8;`A@!S3U4FuELd#8C6u*vmqQ~UoPEPIk zK9={TKmW`w^Wt%$?&FjXsUEKtEiNWKO4T(cKJl%!-$U`pzuQ{zl|@&my67RhX!#Em{hukbKCs0l>&UcV>u)qI?xdPA$<>Wb>7Y@L zmMJvNc06S3yheN<6=!%snV?0ddQY(9ROK2;@uDS_^gB|;C3&PHwCG&#$$3{*XLPl< zTJ}3_cT};+YvQ-nqD|iIae%LSb?U9EHXOZFU24k4>$J)|k|frym}+ho=~5tCHs8cD zCjLW3(MP1esM_o`eLt&bd}6`!+%%g^wd!(~{I1i$f2scJ-=oooN~`xK{Xkt52SIdLvOHm=uGAxjeL>Q*@JW>dyvdZ`}mpwdzQL%F@1x(U|^Ih>*%wN z_OQBl`ax>A~JSr-$iT z`jmsPeg%qr($#GJW7wp~YuMkYyoz*09s`Eu7;Gyf>w)+J0{vVK6#0(*?MM4Lz@8pJzS#Jn@wTmOY+jH*(xTGt*^AW5fh=Cedaj^GA0xwc3IE`#5Ta z6$co-TK1lu!N?rN-m}A4lMWuQub?{eHf=KLvk$$svCl9U{fAMBAP1{0V5~t{F2;bk zkemi|Wh8sHGucDC8+{IA#6INMgjZni;>!re{~a8sa24~u{jV=f%o7bx;px;YAe@VM{6{0!#z<5~AJw|gU0M-B&y^yF4TwE2!> zB|g9?iKuMgF-KV z=M_c|ag@i4%+F>`#&KJ>vuFDe#K)B_9P4o_ZMt#H!Vv6rSiXmckbD4i&(EdSM7PBp#&LgrHeeOn| z5Ab|@7Uxn(*22=2?-3J>AfV+?TJ~Ul9NK@w5h(9*T*(U@SMm@LYoh=$8iHl}0YxsO zAmX8zWE;6+?_^GpV~dKl2!|3P!I0`S?x>_7Q8W zaIYu8gCk$^ikL$GW?W3FJODLCZUhF$!lXbA$xj${;>s+XOISw(hvIk3^DOT^mtY^!w$sDC^l&{8 zE2jW)b`cNZnjnX#BP02jj6gC1|MLi7aVvc)&%cC^@|%_BTuOSrKFZgBPkOY{IX{y& zD_y%8H2(W#(fJfRR9rQPbWjIshu%9bTO7BYaVW*x)wap}{*1|ZwQal|G;X`fd+F!@ zq@oxT|974CH@>c()*oaSZ3@$GlZxxUB%Q8wt@#NR-%RC!6bn>rZzmnn;Z=X#5uoYP z9#THlycmgz|L$%>D`}ys^UMplbZPQ?Q`)@WqJA%qzHIV;zAtfEc#0NYeLATh$7b_8 zFeX2$+Gu_e$17cIe%axxU!@x4psjX-ey&BQc>OewD9zrNWiQmS%@2}3sA|iFr0bNH zuO@v~=|V4(wMrNKi)t^Wa~>w`TI$tm)vloNDmTO^`frR&7myyNwxwQIggUBDqc~s1 zMz0d9Rc)G2^*B{qy>}1(8>LqBJ~6)4`A^Yym=?|LLON87HY_9c`)yVAf4CNS?`fY^ zFM1;|IO{dC2kIFY;b3?yY5Oz2oJ-%hL1l3RM@~XBVA6gH=vdvE&z9 zoZ-Eu^4|!~`Hr>|JG=w0`!m5Wnn`u5s=Cnj@2ZxMw;gXtrR_geoF8Q;0&@|0?y>n!z@H-^TWl(rvD>bKiv&ye=kvTFyE_EO{Wz>Bh+ z2t~gcEHZD+<5evChT=6^vM%uEwZt@gG1)=4qTMmut8JBcd1fkISViL_)mZoLP*rE% zOtqWR_1+PEM`?SY$)D-<1%%X7uGiRhSDJ6GxO8cAv@Chz#Tl3Xj_+QZ_wp{-8|_Dp z@4jQQlRBDt0;@Puw=>VH;vTB%(%|o?T5=DK-%_>8tK&tg>Z!k3)!?eqGp|L_cnxz- zqocRgw5|uK|H^ab^|o#GaEfQBZDT#D-wbD)hBhV#sG5I2>HH4wYAk+()Q@7plcXhT zTuKQ_D3vwu6inclk`5do#Wjp&+)0(aJ{C+b!XG~ zB~^1y^js;`HDu3K+8#K34JXrfvwG6AK1FSH?Q#E>rEhH;)L75ImBF*KO4TxRO~fQk z>Dr#8PuOMuJj|l9)H~MtzIKaJ_0+C(Vc@x~{#p86t76U)(mOjmPkfn+RasT#GO_WH z&ox(KOeU+X9-eZwZJPi!ZrkR)cJ^-u^%X2y<=dKjL)^B-JNtH5ze~Iamt{&B;<#DYnPzhDYXD}){(EvriwU!-MMdFuJ9>M7)(s?$w1;=4QD+>2szj22ze zPI|Z&EqQ^|zq?KSjdZQ5&0ZZ>Y1u;WI&D(5(~dyDEt$WFo@T3Uxw!;lGE+UZmx0Es zIC~e0{zJ~p-APAj(fI>Ov$UwLhP|t*OiT>u4VGBqz4t}d)=)ktGM1fVEz+$7=%TMcyGaRW0A#6=G7*$zH@`R^m0$37P#t!OK-Ue!4p>8VB4 z5^pF)v#J&5IL2hLs#Cuv^`lj?l+=F^=(PU+@80?*+J@B=hY_Vqi>n)|%cA_d${c7A z6MyFy4}u!s`I%4A_IfQkw}td7EvhZb6{^neV;7y>o3hba0vD}|v9N%pD-YlA- zMcbF#Vx?(|5`#EbttIWJe)T5mpPHrSb{zM+VK=aJY4#6Cz1RGF>z5rz2&NXK;zMiCh^<+I*)v~}v(DXTNH>j9zngiT+B%S^LAF;n;EBh>zQBA{0iphGk*%wUB&d(cVSUwx{W z9;y`i2tCzNd4>Jej{-5@8;JSdK+N|BV!k&}WGeeE#-i`S6*KO@5i^T62$-b9LWICm$#>lY2THHX#`g#0Uu54+Nrjksf|S&ofrVXD{>{?1g@c zz0mhD-}LS}@-TZ*{>l7{Xmcvlhcn&5^!`XYvWPjenX@m`doaB%)9FnA&i>&q*gxFJ zJw1?n`X=+AX8wI#^Z)k2W{+OR-i75#{`-5m-P5YnOKl~~ChhJyC$uZnQCLdZ8DceZ23Y zw-#ToVEQ4Z4`bO=x%E^=@)y)UBA)^=dmJ_)xeVyaX71gI+`BXB;b`Pz!7rXC>zGqd zpA}3OARU$|z>tgvy0Sgck-k8YC~ba1-=-@cv!Bx&qwy+xJ|AbF=d+B)oy@rgIZ-(u z7?BfzVc8K!JS6>j+)aO@!~RB*O|)-;jVmpz^E}qMocVdkcVrS!WF&L8V@@CDM40m< zdMRD`2-@q!JjG ze;_|3rvP0sz37gN;4wXvrP`Ul0_eyBpvc)g)@Edi$VS%cc%Fx*7g{jV#GHrTy!6v} zw$DPT6zRt8wgV%Qj;Myk^c#m{A#z-N6T$f3jsAynyFHk*H&pbgFy~wLk-o=1(ihk} z`Vf2LZ)MtFHNf~hhL-DTSx)}C#@=4d+KW(D3`L%$nk(PqBLctKxeY9C8vi9o7x4Iyf+|O| zSDSaEF^Ruey^u7fYRh4CQk|w;$F_9oz^-8Ql)k@NrnG4&3*V~74f9Cnsakt0X#A~F z_E{7Ms95TNrb~k;U*zp-L|v_Ukk(sNZS?vEhbf(3K(&w3X0M~i?@Z7E3w}>Y-gPuy zug0^yw|T!R)i+1qDAi>ZUMcnVcb)f|@J&@Y(K9BWDpj?o8n1bj8+uvQ;`d4YH;$9d zfCluUs`0{8NyqwS&4%K!YW>1yi*KaqAT_OMCw)XWGso*-+M;UN;Z*&1qU~OX`9o@~ zdpk$z^qputM9Y@WB+XH^_$1PizG{wGyo$wM81GPV{xh^4p+#r!KdFdH*E!UlQh?O!}^>3%wWgZ);f{6Xm~KooRZ75_{lv zt4>tgC0@6Ecl9*WdmG+W)d~}uc+olixz)RT@gCC0mFnUZPpBsjC`yct+YqxoRj#(# zRjla^K7Ny_L=f~x#18o;(tNR(=>*Jk*>UOG5HU07F(l}J*svWt7-&LMwwoV>G?`k^^5nHsM=|bH>+*!c_F^1L^lPb)?7RWG&iix>4dq*LZzr{&|$Qmo3iiprcAHIm_F1|3sOSN_C;CrN`Js zi{7T_w~jiJ=VP_yIG=bO8oaB`??cG)%7`8c3^E&3TWsqC@LsE{2$tsXF~z(D=?4c<0u96=%Fk z+d?hc?2_iGI;EFgH2+YFGgU0`;xtW*c6uJ}r?z$8wc__b&h+|*R4m^@za#&y18nU| z+H9{yrawWNs@pDTBaNy$_h8WY9v7O^CSB_NhnZQ|*lLk?1HMg*&Ywz87pmj=5!-ft zEk*zOX?l&+zkWEII3}m~l`utPa=d!dtLqq5o6J2ZUd4K^Kl5-Emp*KZOT4F?gH)Wo z$riJ>aw`og)|*B-F$KBN>}pJMRIR+yF52Q9Yrhk?{3u(j_?{(q)spkZ*kb*e6n9i{ zibJ|>hj;qrcu^Xr>WoIaXuDUzzAEN^!=gR3Xq(p>bXRrl0=wumub$}7}9mLOv2JfN$JQWvu_p>v#s6LSSXO@1!{0KFkS^DhQs1dgwljZ87BZDr=Rb>Zt{N7&d4N+P2cUNm}4jq)J zznnlPdus{B0u}2&C7rDs>$Dk}uC{Xpw(%%c{?3w#Pwd!fA*Q%OdM|!E!9P>Pj(R^w=&1=Lr`>J;> zoUiJvJ810R9qPRsz*IHv@H|gaV_iLEx7MjRm>S?i%YzFNH-Pd_p!xQrX&ur z;M~REJHyO3!(RYm-9ccQ+yP9LYk(@7#@i-f zL|TDiSq?3En1Xri#!n6~A`^jOtnhFAWB^_14Rj<5#7fuf zrT=uWv3Ua+l4pRf{0r#FEkKbgXmbwI=y3&x07VwjW)9L}nFK_iGtiYC zftV2u6zM{nKejRI*Faa^17iL;5PiJcm_53a>a|oaq%D z+yxBFb-K#|va8qZH4og()FqjCcG-@BPoUv)FveFy1~ya05u3Wibdpn46}&CEHOIfpT)gXsgf z2El$fTO288{z#rJ+w*Mc4~$3*7?$7r8UJ4a@!bR1xkSgrwv;p`dEMSUk2aMu71;&3G5Tif( z82?`aU3mxS$O}NhXfG3`+kqliAtznV2V(75V455XOqC8`iW~rp%3@$d3V`?`2@qq= zfUfKUbYuunqzApZ%>TZ($^Qt5E2X#D$`eSZ%Duo8xd9lJOMnqM6NoiyfFU^$=t?ut zks6>#Da+1edLO3uKsqFuKv((#&G&JP<*&T}IPM8FspMZW0?7y@Ban*-s(3cJxo?sY1ZIg!*1W!fRC72^G+ayrvUR$|6LGT25S%TrNYLj4V`E!9X4sPNvTctP7o~UhX<9!j{j>LT4sVi(HaB|MKl>(c5Xp_LX5V#I6Pnh9l)2ak> zBqKpwnaz>*e(--xNci-fO%Ae2AjE5JWsOaCu*r5du|5fkMaQfPITC1R0*8E4!ho#3q3zaUWX=9LkBdGQlR}Z8Fv-DGB0AZq#No0#ywhvS$-^jy!FX zCv9?rO|G*^AX6Gm>}S{h*&VRM}lGL&IEB~`jrXh$a^-q$tL^S zBoJ@-_CEvb2-ez5Y<60Df?-8Nn>?5xu4HE=7~UM%BoLtsY-O{(*`>CEOVO_ozAYKJ z7JswtKC?-nDGpro`L??$d3GVpMDX|45lr()kieZ7uQ?J*ASTvFbFs*+Z5Bxod`46f zb-)zF$++M#BCJPXi!%}h9LY`)EW$V-!5n$rCJ)=hIwpVmaCzV;1kTfoZ3i1|vcV>S z7A$auudvOQ+hlrz;Kg)cA3jP*j(lj7w`}s))xOX+!vRhl9_w0jrFDueonVurZPHw66>CFyJ2S(U0*%qVwsNOUHrwQUn*{bX za9qo5vk5jCXOmtD;$nTY1pB*huitH(-ENb=J`gRoSyqC$(l{c)967-zjW$_klR}$V z7p{wul(zJfO}@9utv0#NCYRadBAWy%cdV^!v`OGL9*Dj5gy2ejpvedXHE_piwS8O7 zmn(JFp8x4L#>;l0z`h3V{k0voU4R6RSl~$1*=2eph%42p3HGOlzkl1x3pNSd6!uCe zu2eY*=E(atxz8qn>#fvQ1|*1!?vDh+)JL1#Z<7OUQel&Pn@qAvmQ4a@^p3WYX_G+c zD!bUyTQ&*YB?3EsjcsNK?HxLJUEA(=n|x)H+iY^3O|G@c z**4i|lXW%;JXYr0O5nyHsA+|D0y%Q4UFb%e1fE5+Y-PAj0te4Jx$#}+KuDgp3q5X= zKu9jLmH+Z~9k?h1CwJh-Okf{&OKb-t-?w_dNw(8RmGT}5)xXyc^h}bNj6gC1$p|DP zkc>bw0?7y@Banbw0?7y@BanApxfvIva zFh$M)M&&`+houo1k}9ApB|t}Vfg*cz-svr{Op`s3lPa0O6zL0$N-8iSzjAiy z6|f1(xj<`3ur-32K z2fA`Fd^$1}X^~a*HWuk4WjOE%*#>yHbORnH4)9R<4zorNkq?0f%d5bHqzpOhJITg5EjsPx`wZIyw z2UbfZuu6)7OC<+bDHDN9WH(@iWB?aSZ(zAZfo1YDW|c3J&wvZ%P2d7~7Fa3|0_V%E zz!JF%O9f0Fy0C1e71INlAm{mSTz6Oq#_kg41CE!ST6qqG<0r!yWfV;~- zfV;_Qz!7pJa93Fe+(jCIJIhkwaG3|(NoD|dl)ZpE$nL=HWn18O(g&C+DZp*z7tAfs zkk5g`?@0beWU=`Te5+@ zWIPb{0``z0!0yrm*iAyfuJQv~n=bM(FkM~;#^fnrn%oaem79Pmav3lxX9FX0955`K zfFWrG;#(3xM-~D_=3vYuR(wFq;79{dWGPk&3CT#bcv#sUX-B4W-H-`XcSRas8DM^Q z<~z*)4r_vhG*Za7D`6n~~Q0BJ}FWL&R+H0pv&JW?)1v2Zr(O z4-)~ihKS2GL>#UmB3MJj*e^u>05NNb^yeBP{kVomU#=n2hii!R#u_5#=xoJ`9zEq7 zU=Mj8*j-)*c9X||X#as||AA=#foT7MX#as||AA=#foT7MX#as||A8Ud8|ca&Ku0ox zB7M2?ND9(u`LV7CT7Do}eqb+o4%ky30``#GfZgRPU^h7**i}vfc9BDY>Cyqjw>E)k zvKW{u1;7-^2I6ZJz=-Su49gH;NO}NW2>~7Xfh&D{%#}V~L%N4N3G6QS0lUeKz^-yB zu#21pOqXMUG1&-AlNMmAECZ&<0$>#LfXue`1BPW3FeEzwT^Rs$BpoR72iN=fifeql z%QZe;1g6O&z*M;tm?GB#qjDiIBBuhwas)6WYk?R&40NOtXuiQ=j_-7&(`8R!Ohy3H zWEe12dI3`;0*uN}T*u*4uH*0q5bMzZu^tT&>(KzQ9t~FvIS1+Pay+n`90cqtZNM(F z0+=p~fLNOpm?o2fsWJwbB0B-2G6)!vu0YHL1%~8X+&5kM0EmINK#|A$0dPMunEXpd zAQ^#V1pe=efFq0Tf!2X}Hy_(dV2aT%wsMC}4o?t#;47M7f0_!LV=LAK2uGf`l{GfW zO_0QZ@gX{3{HPxiDkcbSvDxuk6U>o6Y!a9z@SCmtYLmbY|7=Haz~qXjY~@Lt zJYkc-9E`_oC2+MpVk-~Z#5&9WGztAd+w5O9dB7(3+axe+=U!X6$0mVEV0YQdoi+(H z3%A=!V7AGvwsMP2ZnnuyHVI6UxxrTcX_M=1a-B^A6Me3+m8)%Xl})a+$rU!a+$Mq9 zGnd-RB{m7ntGUQl{$Y~~ZE}H4HrwQUo1ABpb8T{tP0qH-SvEP-CTG~>beo)JlT&SS zicLjl`l_PC(giQ{&$ze7*)Fy}6L0maLCBYmCw2*-dC~(RLj(s55fgl`UyWT%R zTsf{Z!LZ<|P4-I=*zJ&De_HV*&=PL4%~so_!6tKTGRr1``*`41_t%Z=g9!(&922LwUyyE+1@5S z5(G;{L=x;z6SBXxm5*%lwoL-J=!a}2&}d(2D}lB!5UapG?35^jl`8_5RG>cZCG7q* zA@e3%2^{=DqZu(pjil<4Cx88nD{fLdqfhst{hfo zvxBUMNh}HzxLrM-FpSAC{T036C5c?Tp0_SrEOK|ft*zcA!5j%Z0yGyUB&>B|J@es> zaDY`<4T~$K6^U}_SxgXgfLK?ED}~S6TK>!gbHw^Z<4T@&>&C)UKPC)u-?|~e90?rx zpArf_F`%KD^iCodeKa-+G!ucwz}g8%0;lmX+d<$c_p+71Gn|u9@K_Q!X}(EFe_FBU zHCqW>@{ifd!#4S+O{~N2NZ<}=on4NcZkGw%kpmA#fgo77XUBXa-O-n8t{iP$zb5lo zDxVCC;{U6|T;L_cOxE%2nZKZC1aI+w?h(OT{PTdWdY+$NP~Jkr#ki zaUB>!zooIf1&H;HY553xGO_wP`}_~4=XJx(_pYZ5Ghd(H6>0Rj0kNDM^PfkbTbi5$ zM4u86JvqRr^an=db@Ysd~ z1xO246gOKxgx_F4i2Y;5==+MW9}H{tqdzJn*8p8P5{SzXC^8F?jG)iTc>V z;Mk|iU-4H%WRz=$jXhGi@;B!hu2R{1vG-T<1u8gpFk=9k7V;`j*fi{+*4$(coU zPpZ4J)IgR>Va^wQji1+nI4=BV_;F0HLmF)sza?JH{9XAS@;(^RAdMo*`xhyrVy?agUP>S z1d~zrQ%CFL+Eiti}WY?@r9G$~24}=N@L^M*>a z^R&CQ*tA<&k4bQ%IT`rS<0dTSzN_q&k+*DFOHFG=YePnJWqU?-Wou=|vWDi2mYS;8 zl@0Y1GqTLzuTy- zS*M8^)iuj1+iF{3@mU7s>9v*1TQbZBva-fxP0YwP!78k&tgc*ITLYv2KAsc)XYtG$ z<;622W9-OL|Fd|as#8ro@yDY0WFz()f5B*u{)=diMtO7m=5~>39aS}r=A6i0iBG)Z zO}-$?<}V#{49tsK^A}2$nOeC!ex+y3<~9AgznLCk?12ej{NRoHFE>##wPO0T$;I;ur|pc!SwO8)+$!9&a0=x;N= z6SeW3z)YWpmG!MP&BYCcmF?!z#$Kxdcy(jV z#Ekzq_PMi*r{-W2i{qwUWzNd_hUSu*<`$eTkjiYSa(`PYjZ4F&cx7D;wp&xwT3OdP zF{7xmHDhvPbH>Q5jI5CpM~|L3b~GB|Q6u57I9{rUOkGjgTv>(vUD?vQvZ@7Yeq8M& z7OrHx-bu5WhEHiCu(PeAoy2KIT>ev>vg5+wzlxK&Mo_saam)V*(E*hpRt7s=-8WETO6sF;EA@i@ol(^0jtR3U_{}HV1Z7CS6 zjJWha3D)3vsm_8mAg*>Etj50%Rv)WqC&B6wm;V&3E^#5_uY%>b9SBt{Zv7vjO0}h6 zsKRmSzYi6@w_~0$y!!&~p?HpJXkMLxr;X;7H7#f!|MxzEjQijB2r_b2j)*z_M&Z%1xTd2uV_HW|Ra>ih zc(k7)zx=PC%JC$M&42OVK9&FHQ{?CW?NfPH*2rvqiX62kA3#5|kKo9^ID#X21o2=z z1|cxFsTOmK!lUTKjB#1xp_*s?zq((U2cu6+Xmjf-m)9&s+*xp>_x#OW|9G?sEg!JV z1FrF#-_Yzuv?dW;^Lu9Uoa}L9GKS~lG3ZZEQHfK*l+T`Mj_xQN{AEkqR@PR>Pk`N# zy*r$uR&yhQ9cgZjKVI;MSvt;6|M>#XuI72l{8?Mu4YmDm9t-(sV6GG6catM{7zE;x zZ4>5RcwXZ_^cgI55=+hJ7mtr-`e3SuFuj5P+i7_R%N|eF ztSKO}Keti^bfpaFNIw0{<2Zt882ceIjw1+$BOR52Kzz9x7?xj$n*Qy{=pT0FGo&5) zH&A5D&@`lP1BzUU92esbjCw594a{$3x{~Q4q`P1|LMmFXu|V9BfoT|>?3hy8M8#4>9==m?kd+Q{@pLzJ(5q%G2-= zk^6vQxe_@c%qTY7-ILqhj{cA3*op&@pDK;O6sZJ8r4SgAslc#|0bLm~3XHfG;n=lGN-m~%ICu4DQFrcXvXB8LFO(gwtwRgB|tWgB|#0uHoP~=9A;JAe8 z)0sYUkm>(F2e%!OwaAZ3EifWxd`DRRKus{C8|ccHtlKNB+glt{@FnX!7nY9f2NcPo z&rEvgO%GvUNWRA?56qPX;`*Y8mpBsS5#)&6&h%AO&t=YW%-M)^SnkJGLh?Je^(gCb z2R-ahn=;r$WDYI&1%_k~ARhgJ_(~m6#HHnT97Xaz$B(?k^utWwjx=VfGv^%U9EWs7 z4g_LN4PXd!l8w(oAV!)2MaIx_N9Oluek${S?r$RbDaM=N9O!RiYeuGs+{OHBIT~d% zN28nwbTALus4Y}$m@Z*@2Gu>8vkP;~7#6|z+l~Kpj5mp5HnOSb9~hYumM?)Jc?;;u zGe8V&1B%Sxk)6+o-N4Z+7gIfr>fy{;jdV!%2fDI|>TIg}P~C&+45oWA{ToNJe8CYe zZ*kjn4ftak-@e*q<218DP8h!`+f0} zgD9@om&r@e_XXR_l+JmcbhFa>jif`>(}q1scURh8OS)QV^E%KpEThPm)=RFT_@#z}a2#@{LW$86D$q@U6HC3Cu?YyX}*8e$GTgzB>i>meJpvLRpeh-IjehNG(k*`SKGqdXnT~}*5R#qVypSHC?2e~MOTr|R@b|Nj`i*pNRhu(F<2yTJ0mV@&&bXg+xEAencQVy>?J2gSRoGXY9z#@|GmvzE zI?@{URkdI<)pS)m-HbmdtnqBvrekH)psU|~S35$E?@r^vbo`TwQy(Y&R*NpViS!#) z8%+ZiFFJo2#m`lofsr)WpO3U?hj%>QQ#IG2`lhP7doL(0_b!HK)VTRrdpqlPVNrh| z-FlbQzZObO^Bk{Jw%IwX`KylB1{^hdP2=qGMb$ZPke;k+`L(2eTUcl!k%qNsc@rq^N%5G!yV|C|Oq*3&r1p5yCf!=62mb)I zEzIY})N}(z#33BZRLp&vv_RFh7$^sIj;ga>C7q#aQ95akswEeI#^bzt5ydGgR;G~d zqebWMK)RQz1zrQ&OI1CWd#YM$TJE^x+BG&?^fev*rl#fl+G05dbE5h`s#xe zk?Ob8^TlsAJG{nvgWAsTYWr>Wj$^y}EjE{bOjfGxtT#zls9Iqz#F$j6I?q#=sybx^ z)pAu!_9M+!b@GFt@qNwrJng4q(?_)3S<ABOR`4g}0q;RBf-MI#AWs-rc5;s#E?= zwU?@uUh~#f)rN1W`p;R_LrGIqWs`-)PQzN54P3m=b1$axCn}Z<0F8@lipW&U@y@;X z|E>jCd>7rlqDAr!Bz?ZaYeVXrNS{@;xC`kMs%qQ%h^j58Q~j5!6~(0Yt2*s_(z{fx zJ&*JbRV$t%y;;?n<}k&?ZzC&rBE3%4>XD@WGeXfepz#n)?L+Yjbv$i*TWs3n|6%Vv zpsT93w&8isN#leTM4BKmsE8ElRTM%<0TR*^laL+|Od~ynAXZeY*s%BB>$UgpRkG*t`7Cde+=KJK@~>zJqU!Z;WsJVKAPoIiES_UVH7e*WPEZM)E2pm#n9Fsm5(? zrFe<59Wh?lRP+3G8`qQrXnKB#q791k%2CmWM$WC2dm=@r-nPb3EYqW{urGW?nwNxb zub!E6h$ve}_Ho&v7>Xz3fZBg#GGf_P$TnlRbiL3E8=1 zhcF$Ev|o0h58NmJ1fqwEYiQqzdHVsm2I!abfu?ue^yhCR+dxefHTl#mp=Lfclc|YA z+An)jA4UD|SUnr#s(>QzVdj6hybKJJCxHRE2k4g@fIhhxC~^kvkD+}t^@memNPQ~x zhf+V4`u(UG%5;$FKd?psdUt^sD*?p3bgmunG&T28a}za}FujH8W0`JcdNtAkDFR{* z4WLir$<81EUGiQnM3l7WBcWr-Aq#@ewdmwgV&NX<#^3;WlGEZUAEM10WVd z17hq75Ph@k)6PLZwqND}eKHP+-6gorb_7>O_z^wKKKX?G%w`1yk$aim%Jc@N>zFR% zS^z^?Gnca0bRPRc_hA3$pXlAi)n^~?>$G{4>D!1tYQ924fd$%tBDN>|Dr(NArj|Xu z`PA6H-!atmqvlWc+y4`N>86*}#JQcCQ>baBW)(H@)J&jeBsD*CjerlZ#spSt2a4QC z%{kN@PfZy$OR1Sh%@AsYnjHg;*Yg9-(eFaqCs$Fkk(xEs6i_pRn$gq@pyo@gTqpAC z0OR!pP_RC~(VR$4J2lzV974?`YWh&~eShQi5m4kIEP5wcY2RqJQqxGy3TjfRIe?l$ z)cC1+r=Rh9x}Wj-8&G5mHS4LVrY4D+Db(yk%^!V@*Qb4r*K0tL+o-vKn$6U#q$Zu3 z1=Q?CO*l0_MjNkfSjh*YB#_2B5!4(mQ|sQEg|c)bI}x)PiVaXB?x zsHveQkD4TEhEOBa?1(g8&tL%?jKf0OCzn&xNzE#z^N8cjpbD{QQoaBFcO`&9fa5S= zt^#lGHsSm|ysi#oNsE?OR5UjU z{~>#mLuBlN(9tIR&(WsOj-4I@ao6)bZ+AjXUo>^$uA#Q>R;Ve{ z=jk)c^7lOp9Hd5Iea?Juy}8?Ej;%bN1e7>fxLa0k?z>_&?OZMN_8idV$W^olr9uCxoarr|(Xv>9Z0-+!v?qPN*5vX7s2k zrb#(sLsRHrBRs(pn`^nELt|{~>e|Y>R!^&d$>sfb9vYO!&{44WAAacA z-ykV9^_XDQh&e}Vq^T}$Zbuw~VG3j1+{qK->gp@%DyvG$+c9B|ipIn1T1%=|*H)F( zizIw!=D!6d4RBUGoVRSjkJhnLi~R5i4$u4;{&+tkop)!Es#nUfmQoA+F+ZOiRO0%ec9P zE_wKWBSU${^{fsEoMg&A)-C%L6XNPI$!)b+y8xH75YzQ0OkUAB!CrD)OI&fy8)n=! zcF$Q{O2R^{_fge4aUqER@N;wKO!I?y`V6ew@t=+GD>89b>qxHhYvQ z5VBBND$Klplb6M{%{At)R#>C47ddW4XU{X6I(foub7pbNo15yJoAd^W>uEN7@`S0A zp)6~tDl1u4RaaxK&dLVlh*DKkLpzFT>Wn!Prp=i#0Y3_-Oqe=-@)USrR)0-dbvLUy zlP64{JPlT}r%jkTZO$}UHC8lKRn?Xt%&J%*madofG09uc~TlEUBogUAcOd$!d@53(euHD{=GcU52vix@I72${JR! zt}W5Hvt~?)L#3;%YA|_=TUlM!6o;dDE&yD3=a3=3NU zLXuz`+wo}zp$iM+OhYr*bLtbU#&c#XR!oRnSy$1FyTDsU6VUdpWF0_ZlvH+a4$WD1 zZx5$9XW6YmWCJ%L&bE7%_~K*cVOCZ(9??`+-`HPjlJ`wW$=Wx;E<_WBeRTP6r#q`u ze1rMD$aFQBDW5v+6Mw7I1|n2FW;CM?HMPf@^XziN7ksg8CciU9!!#L%%)1H81z{gY zNcGia6;&l>{Tt8n*VshU(~jBvnB%U&8ZrCEE^Ia{31Ll~cE7An8w^cj(-EjijV34c zWvj4Gg*nUNAPz69t*ox9jBRbGt6hb2u2^l>y=e5yM$bkRemU~Kt}kMKXd?_B~`TF&p1d~&TC?UH=rITV(0&+ekIZ8bjp`}6|&v8}IH%Esg~hx5q} zuW&+_;Fl~UZ&f6?G;^&UosBsl6=x_G5qvIFZE!T zfG#qRAvW~wqI}ZreADo8zUzEH_X@9ih3mQmzod3M`B*Qt3>{Ei@xJp48@mK7e80{s zE%|qsQji(a8yMZ3n!q_Tk?^a5QA9Qg& zb_V*`%XD+p6+={jqF;c}4mU2dD^f0230!f$%RD{iR{@Eqd<*SOviJ z-@XDw{~-{o5ezatPFY<4{7z`1NXxa~?y^r?aan!(O_RyY>{@8$g1dU%_1^VPkvUhVH{qV8l(eKOv~j!pR8u@v7a;KCn6mw^MMhvfL>F8VG;)n$R0qyY~|hX z1W@E*p2dqeqF=(mV)seRt4F^jXX*bFY4pqkeR3c5H&A~O(qVEcFd#<){ZbFa?#)2# zDF7Rv%%|l+w27rn3~g>@S^3!S{XMRc$j8jNkL-7tOE2;f=hbg#`V?NN3)v(66!rIT z9)1}#K51fvW}d~dh#bZ}5dty`dcVW~eX@l%m&4a5XEDO@h!7^NzyS6VHP=?N{r!`%CTd`!!akjB2GK#?aoKmTt`?>h5;Cn5x7 zJH5;*06tks%MQjr32cPqK@%>?z%bb#=Nph2K-}}JAwyXv3kI6e3Uh!WQ|Vj7yd|^4ITtLf4+EfAqVnr#7BH4GkoJpNS->Y|WdV_Ecunu-HI1UpZu&##7>IPY+EfER&b@-PrPhS2LWAnpjD$T6%T53z>4$Qp7i*=Dl0 zP;(jBFj)yrK=OcixYMTR+5{LOg&bn!JM+_zdDzMI0(NlifDf5|h3O}e_RHOTp}U6q zt<;~ybO+NlNJmI9FkF@cu{R2@)F-U}QLF>60Y$v~bc|$#dwHdvq2+Sss+gtMkCAtx zl%iw@Fj77MM##&+aCsaUCU*h@auv`o=Ky`O2`JLWwF#!0o2>U=Zwd64KyL~3mOyU_ z^p-$x3G|l0|I;Oatt*Q-tzhF@_!E?0bvnV3Pf)yC#YQs?FDTcv;bie`ro&8aaA$@z zZYKGv+7@2xB{M!D=}hOzI+3CiH}hGq?b?|notZ%KDHJ<2Zs#(uZTg`kohe4C9TcBY z+qHuzPFJz!53g(UQj)hicf?ML&h)DCPra_S5hR`Il%;-(&Q$VZGeg5ImYiuM z$7tL-bE-i(S;c}K6pvT2#JC1!KNV{yKy)KjKTdL!lI_QP$wlVef^tQhy)-px6rH&- zrMA3(P_}s#*?(!I^|chgR<<*r;up%+#6xs5vEEE^3Cd6d*EY>~2Bn{p z#RI)$=}wZ)T%m$5DPE?w*(QhXK|4++=}i1-8cxxfmszomqBBEv?ST{*w%L+U@eUQ+ z$CHiM<1EjhSmKDLa$#j`HBKv`I8Vj8BOpf0@`F?^dyn)2buNFIqH}i??@7^_f>m}t zME8s;E+JW}k=ib&n5JU;+Y}R2%(3P8ti$5lCNg=YiiuBAT%%&HEe&TvkWPUduWajj z7`xMkmN*k7*PhB4`#Ujgopoa5nAcqqk}l&#-D@dagb&ZhX7vJIw|1?3TCvr;MEuk41`C_2?SJDcKdYFv6HL^sQI zkC41k$#_$`7-_DNnoQMqXWX@#QVdGy8F!o1rRXji9j5_nmoS2oD?TMzqh!S`UUJEY zB+HacI+vm|8*kA7iUrE%n(}eaBJ&%P&g8tM2YAW+aU|2#GiQG;M`0Zq;D67-PCn#I7583g`rr3w(0A({@;c=AAwYS4-O4gUrb-S`l zzoxiN+2no{UsN`)m7;UwhnxWXxY{lNXjlCgrl}#B5);+0|_i5|QkZm#Sy7 zZ7nZQcF82N=PR2z$m_Zc%_MI36O>%>C&hMk&9#Bsl&!OMwo%!J+i1L2S?1r(@KSrO z)k+rrowlpgl}lQnBTm^2Tktu`HvJA`w@xg%pRQRUiq<_^#*ef~(RfQfrZ`{Y>2f&E zE#AC>taFQJ#ZsK0zU3w_Zs3};NWQO;a&DsduG$t^)@jdEA0+GCwW(_vg+8#`&cQOVNRDX!J5q`pY8PFYUv zcU_l^A(^3Mf_+*zuR<-4l3k)~zJ2vstby|_o1koIJ&fJJiKkOiF4;aN4*hQh(0Cya zHb`AEe)5LvwCz)rl6Cg>47Ax+rrMlhw50l#&Z}mqqm-^Wnxa!aSv$Rvb0R6JXF)nm zJ3?eMC@mUKThd1LNwZI!T4filW(enISaOB;XdOS0T&1o_4^S*uSFO9wi)oU0UDKz~ zwm@BrY;ifaQP$OD4^+0rzI+VUzzz02W)Ec>uA*^&Wy_N(Myi;(l;YPaF1Js`uhci$ z-l3l=n^6p7_o^rSLf7}yw$K*En`&E>>a|U-q3z3Rn{qeB7u2@+Vv3Kc*t9prN7Q(E z6~()i)wb$p6>EKDZ&KrUQ+M1f7QRjLS|uB@DK@KXr#+6d(nY5I^)+9O7ujk&Ta7!O zr0+~+b@h-b%Id|OsBFR`G(JGt^c;xMvUIG{iS}mtSn0GBT7Rf)dKtxcl%eC5^yHsRTyI zAj}62mmH+SBoP?E7JVkpc=i_l#XhLX^o;`>C3^rPB@7rLKcYuHTs{Sc$?L#?JOlJ& zWq#AMbUhG#gY4lqEAwNS1?ualKMZ=GEG0Xinn_H@G96_45B8aV4a9f^_7lFyp00P< z_r8t#M@N}H&+j=W`3`9OawWaaCVMbRp8=vJ4o8K75nsk1@B|FO!h=$!H+9 zHKC;+X}^5WzVVOQH=fC!w*;2ScJ_@w4ZUCbv8>FB@t7M-{q^+P&RNql*b_U9J-`=` zJ%#KB#;hA@^8X|(eR4PLORHEXD;WO@bDc}%Axjgbq~ zBtU}_0HOrQ9z^{(rpscCWeZSb40`^t{szl)FvlrGK;xGh%s=@ebV!N5N+PB7J8u<^ha00_i?75_eOSypNnma_5K$xePJGWeX!m!zLhqa2&zc97pgj#}T|V z%-ly0a|FR{WG^RsCfQ@DZ(({B(}yv=gz1Bsp2+lQq@!dYFj9QL2>A{p0>b4ZV3?fE z^E#gA^(sdSJP8!Jnb*4Xu|vEQ(4-)GrQ;jzXbg2-T|BN#Ik$3or4 z*Z~Y7!?5&85>R9|;~z-PL>_T(p6>`~ zq9q!LeQi+AedH@dh?08{EmHo#-4r2T1H<|R>$!6x^I<|+0BSNHP z0wd%$dR4zaM2On{0o1 zeeOg~q_6WaJkNf^K3&%&@0TH9l9_CevxaXZpqsK`)gQC+r zP;NW8VwA0!LAIaz^76ZZ8|>GO!yM9fmEGqAKAx_3DO-9g#XptJiKY0fvW2FYu}t^B zF@h6=p(k?*Oy6;+|E}v z?^^mEuk6xI6k8oOm!k8vLw#>oHuqGr1?pR7eBF{tHMwx5tYVs;t)6B2;mQeQzt-fd zm}RMS&c9x2H_PfXoHE#RB8)?0*QO+mCwYSst11Ip)Ufb-wNG51p z_F~{8#UZF2-Iu$@90b;wo76Jbe#JdS#Uj(B1?5IPh%U)`h>E3K$yTbEW7~(5RZPE( z?2I;h1vI9XYCVfzH_9G2&HJ_%~6J2xjgquubGF^qS) z21qM~7%l6fG=B1M(nFL^xQL?jIVvp;BIctFWNA4r_BuAGOX{<98Lw=C`5G1!=VO?5 zXTPCrmTf8jpVnQ)8$8D7#+S)bTW~Q{NE1Rah}sZ9D8^ zu|#ck-PU4d*Zz%>vYkkOQOrn zry3`s0YgCslr1%1H=|{PU+IJsA-h+(sXvW>P;$vT6u(g4#kM{BOxe^ZvQEv`{%fbQ zwsnwox_nygBi z_adiklc&>nwfcsvXcZc$)bz=?IV`Q9r&G^L&Y?K@zXftS0hmKKP|~CH+)s~^Z5#hs z4WvalO4*G0G#;jGntl6lZuli%fOP}s*;94OaD%BvE}8TO136{5Xe33a40A7p7%l64 zde}_+cJY%QHaUUTP9ZK^MbUYWYadPVYxPa2hUgwQ^PeQ2RC4KTFPUwgkzJ!Lvfrn8 zmL7FQ9K|i_nqk}4Hf2LzI;UA%Ya7NI$JVw2P76}IuQwBANj!|x`WIzTJWO3{?9hZf z%|xkv7*A7{U06YxqHM}*^qrt=g1Ntf;yfJKPv;iQhSenZSJx$l5M46K-dFo5S+~tg z7T-+IkxI7g;Ux<$AsM4&Lm!HL+iWYGZ{G);XK%JSb@!l|>mfx;M?ifuOyHpWrM{V? zDE_IeE@SMez{bOcmO@ zAy>&fynujIDJMwJ)DUIp257j5Hp%LeR6z0IHe0E3OzjNHTxBz-LUdhg?E_=9k{xC| zkxy_90{B1;^o!Y<0)IO2y90k(jv$390fW=1YQ}8@;TQ@{xNRW(L7@@%DtsEYP={L+ z!rEp0W45V)-RBhQF6EzEJQ<+FHG!R}gb=Q$P;Mgl#SE~4u7W}-9^nv79(;nP2>c3E zP5db`dBhq6$B;rB48b(MutPlu)>4(5%Rkw8K0$|e5Qypv<4h9{n<7(Kek}ha+1QDA zuE1ik%~yiW|Dw~WjBmrApbSc|s^QP(!h)+k%C zi0mX~^*QJ~Lf8M`4IIB8ZJqn5#k`2RXH&U~WUR)`eTw2<8n<;U#SzNp-{^HUR}?4r zmf9}A!ArK-*8ElV%)5iO&;d4jq(Rj19vv;Xa;DjmrHPCJ*~={;D6y#{)$6_3#L z;Sk}1a-Zg)=|dXbt3KR^!7Y@exg_sYa?#xsZ*g4h{e88v<+u${43{a}_9?|n95$Nb z`O5Mc()Dqr!CvGO)Hv&H8Xu#^@lznWrIc(Nt)oMpR)e}!+G1L(0W)pevr1WRE7Y|& zOU<5)uVmVTJb0P97VhOGTb7V4QgXRzF@uulxNe}Bqio*66qA%qNAuJ*khe9_v3dw< z+?$fj{{L<0fgj91u|3$AI7m#tL5#eMo`HevV;sOfg#KJoqMytL+gHW`qvctAj}J;T z(tTtE5PbviLSF&U>23QO=`a}#49HLHd-*57<=?<>`D36L`K-U`Z@B=PaJdf{CNI(c z5ujgg17f9XT8?5b!DGlX)+qs^kCbBy%z6ZZ^$1MAK|9iYWF2}EqGS!ykx~eZkV^Ex zpvN9*^w}0s}J15u?ClMOu?BPUvMnbElh7`Z|%o8 zN|-bP1F{NwEZze2NeXS|(tZNdLl`ZJn%_8H;46+7cn9e)nTGra>Xz|tqjl5Hltiu!yYj!XSq>L*Y$ikkk^2+{%h71z!$-*Pm;ha64t3da{b ziF82j2Kwb1vRlcXNVbFNDx`gqM@ig&piy{{SfRGW*q^ zK)RpY1?($V1Eb|!^!x-2)W4igoNxL=!oI*YsRo&Fg4+J}o!Xay|RN zYnd)#Is@r2i3bK`8qhEM0)4V4P$Ysjzo6&YFJGd}eewl+t$jSoK=#kS!5-}Aq4&uH zWN)J85~Q(LJP>=u1MxxuH2vo$vJdSQ#+$GwEt~eHS3FEiuXsQX0AlqN)|27157Nf; zen*Pw{f>}%@I}ua(zyG80eJ-Imm}z9dcs96A7;jATrkXxk2o7BavC%NIRWUGqkukH zN1H~nS8+^7#vaD%_{u-t)qwkVEOw4BnnVh@?6#1Qz&nG*9zGpIW zKG`3k@yWg{x04wsiZ=Ny&k{yEj`l~AZD%k28ut7b0)4U!h<<6-jfuFv0XZ41D@MMM zokX^Y>@lo4quJXZL)K5Wg*!wX$9DL8_R@dMp84(U^EWFLh}^MUN6laCWB-PI>1N#lv=2-_!G86-*sp#yFiOq^ zM#>35v<5)520*k1z<`)l9x(b0cP=)JWXm(3aSozB7U+{0AeK0z{s;Drf5N`;*SX@u z)6k&z8yG3q0VCvmAjYZTjtG;@NC#v+5Tk*BJ}Cy`smcg*sTohrNNW01vyhrNR0Ne+8B#ls!;B#QYCYcE}f!{(DsuKX_d;`Q@CIvL;f{6U$e z?4f@ryQd>wO>vlc@>s0UKNWSnOat3 zE2g=zRb_3s5N6qG6!JKYyAB^D5%(t*+b^Z)e0pl%4ACd{``$ik(;A@7bQL+9)i3QA zP&-exjrfL(xQ966vk>t~Hwu4zVm^uCyRE6JKA8Z-j9E3Twim;>%oXPQj9)6ur%Q}O zr|B_jTK*`-M^tPwAEe#tl5BHcOp{yHq~uSE%i8RvUH&-5vC7t^LiEXnMB6j-hf*9q z;>K>-NRwqieC@U$;J#4H{M(>KcZnWC2WB|MyY78@nooE>8AHoY)vwnMg@g6CQQF1d6fJvXT*2TouVtEu{a$&Tco&cXP@Pw~k4Q)-!dB^^If zv7iW|8+FO?^so(-^T}67F+AF4FXz&+3~;ZC)vr+eo5pLgmH2jLxypbWez9#AuU6Z| z_&tG~U8uGpJ1Eal+mwB1dxqL_x~2PFG}X2xr|WIneM0VLb;)~;5teDd;$tW#DO>U} zMW=gugKY-mlwEAEsdH=QK1}10%Ek|Z7%hom8aiPFWcQ@=V`#in$<8mlWCwTFCLSDGI| z;4adZg!5fI5uG~7qVrvx9T=`{`kN%r&_D^RD4wi`NjR0_Y!&NlgR`%S1=o{}Q{P3e zLv#bzoAM9JC?&IO3qMR<_2eQ{tk0&a+H&{@9u6U@Su~!@>Z3*NT<@AX9`840P1hR^ z|BHsy-K_tuY{*;SbG6k;t?#OB#q*5xnu=wwQoLWq?4v2(r@quODQx=qhKniZ9cJ}tZ5khQg;sj)Sw>_)E^Ye zjgwElr%*PE!Wk4w$Ma9gFVsCkq4+uq=6+@8BXAgr6~aG7@9|HeZRHAHpp^d-|KyoR zA0`>tQ~L&jPd+2gCy`^$2xGkL*=8P3Y58URv&=Nr_OXdcS5z%A2M)^RT8xX&r+AST zXg#R(9Cuc(uBg8!{-X)ON8ctDwwLk?UsQ zjYf@&Pw+-sYb*44B^#>gx{tb=j#NY%t!&afiX)UwG|zwZmnxfJ>X4hoC5Mshr)0+j zic#vCn&Gw0x(8CUB>2?0(FXomjWharjq}XYGbrCWw)SP>UuxUbLG~+U^CwgMRN1BG zss`l)Wmmin(arH9lc%7(tz^b*FS*#3#OscysW3r#S>u*GLGd5T>eJ!x$`<`X_HGqh z@1%H_8rR!L$py;hp-Lh0IVy&{#ZOn)<{H{MkF5Msi0gV%vfZ)=+G0-8`1e zpzQ!9(~Bqu)pfDCAERYal+wxOMh=QoEx34$8>-Nru2U_te}b(`F1?AKpJ|{BbAz~K zo_X1JUkPbzP;_t@)f?R{Qt z*V>Nvr_?sy)|C5HENk+*Cf(1Y-l?wfPf>KboQn&+wwk4joWq#*JSb;s+`P>c&rp^N zWVq*=Uq{jzfl&A^#ZBtE;tz@&R18^L+ca)Q3T>CDZN6>q5>%`=FG=oE6JMt7Om$7e zJ4F|nWZF^pg0{mHUA;av881z34G=gwz1nNEUFl%mE&be)1SuCE>u8^3~okQYHTYR?6Ri6><@< zT#f;j$!cJ!EC-gz3}CVB1;mR4ut+`|6(fc60E@uPNqyv~LWx!>U1Y9Z;flFi$V2b>T+1<(V z9xw^3&BsWh+yGoGX8;qV6}U*uT=95W1Y9WNfD2>*@KE^?d)FT#Zvp4aqrijZ8sI!R z1vnS`-p9xsISe=(GpJ)^mh1%eL9AaJT&0h}Ty0w+ry@F2+n zPLg@RiLwuHf*VN=$(r}Pg)5uQWgWT zx;`)*{ckboN&9)Q=@Whj=$FTVSPdSCzU9HDf?8x%?S8tr;UyVMiy0%cwyv(3YtZyC%7Kr~?2nVx5v z&f$jX9Oz-TS_aD-fLU6v%v_Y{xt78Dv|tv!?_tid40`mytZ;H*e9pGa+CL4mc8AC3 zEX!o9&ocbSqPSNAMVSKtB=VZ%-$lGSiWMvwkZs&87Wio~tCc~Sz6D_m$7sGTbw-YS0 z;w{5;E9*^`S@eNnx?P{+ErSkNFiR(U%HTN5)UkBxyg4}5GKpi2Ponqw9AlaKErzK- z-4pF-%j6$snEZ4PbChKok2g%?Mh~;mGIc@2)QN{VQlmkIXkKQ6W$JnV)O*jT(=yr2 zTedfE>n#&M(nO0N=s8Y@Wm;Y^Ov@u4W}Rgg?PHilvC7OsA8Wg1u>KO5=J!2}*~${S z+?|HW-J#5M__SIkSlMJK8X{P8k?xt@>o_;#053Y2|V1J;$lD3a*+l9InUN^?X)YCdB!yv`mQesZyU^&!8uIE##$JzCKN-PuNe2Og-;(S)9&#vcFq{rFyd-pqaCdB#VS|-H#3#nTC^09c}Q|-Ym-${lhRt zUY|_MB-~|~gj+q)GAx5JSYX;>Jxsb~FvlOv`W+r-xn;0w518c19wyB)>!J*^PCQJi z`tZ4(JkY}|vrNGO#;3rWgQb?qeAh6U+tg<|y33bXCVhZm(w*ZNCdD#XKm<&#a~#7Y zTV@@f&g;@W(UL5KWkyU6-uEzxmPtCL{EQ3X* zz^wB!^DTq5Tfk&&^!OZXnbwC5)9TIjJj-Am1Tes^yv@~U*D%_p9%hbZk`FgbvNs2_ zEt7e(VKTiwvn*3|s$q&Yy3sHQV5j{BP_Dx`WTrL61|u-d9_X4Hvk1=rAH#Wx-*Wc* zhs0M#o7wMGocC*1Ar^Upv*Pb2dkxd)AsvvDfEXnX^vNZh%~%B%v%zVT0)2#xK%8(n z9c-BV#F>qsac1LOdW{ESN;vKNGrg1Z;lJe!`45?X73l%;B(T5S4eTe^0Q<^TV6>bF z49YrSA2|XTB}KqUslX8<T zKFQ{BFXOz>GZE7-&mtODUt!Gkj9E+j656K&MHW&&jp==v9zvT)+Wf-#_Fr(m{aZ}` zo#}^=4#QXplZQ)zn0F2I$IyEbErR% z`jOQ4qy8_>vHym1?9JSMKj!wEV?9p&P0*vBkUfL?qp5GCrV8l@$pwZ>5-?0=0|OX~ zVd6xyHqKVR9tcfYby1@*=PG!@SmIjF1I=qy%wvCL$fY`$iKNR`k%;& zV2uD{Iga`fO!uYbJMa?uldIW(gZcjvVrDgmOA0VdlE7kp3P#RkKFgTT_i6t!?6Fro z5PQV~u~$40>;D6>S3D4V#nW;P^@Y?gqyAXl7cDr7$b8xy1bskaX&FPyhnY7&*&jGl z{S(ezf1T-Pn7$9`fZPD|%Y{InoI-X3*?MZqsL32^$~Kofc5?FT*#yT@4 zE+~aca!Zk}C1Tsdz(z}{U+HGE0D|kA`W=0bbjU=CH>ikBk4@9OS4mP9&JPEVv&Y;D>kUuUPj}WR9uoq(V5_=^Hb`S%`h{5f)cOdIy;;2 zR!6*x>~$*U#!&n--yS!&+l-XNTS*qHtuA~TskZrc;`8;&CVo$2XHr#-Wm}b1@g5a5 z%c&~n#?g1Oim7{d6PFzi(Qc~1y2qW||LvU>9TaC8*kOHP8;!+mosVIdtc{J{ohfyC zTxSkazL}EbUXtWTc-R;6ZCT_sP;_RMrk_di1Z8vWEWk}Fb{1Gx&tToz6rIV(ogY&C zO<7%2;d2#h=92wPL*+oER!AgOe*ay?5tgp zRq7>cf1{^Ud$JCuI8fuJ+Ctc>qS<8wHT)bs%!*4XI)%OB1B%XRCR=0YG}AVa{aQmU zd7I)_8fwYK6yH}iZ34wNRLt6o;_GT$IuD|IddnA(d|AmvTiDO2Yt1IIPbph|6~zaX zjkm{f=8&hEnQd<1w%cgyOnP1S4~owH9AaJ=mJHCttWEL;Du0TeS2<)n#Y;60dUrb$ z9XVq%C{B@wIE*`uFv(8c-V$OOVNg!d@U2(#XsvqiS~Hb8C?(43blernHk;X-ZUNNY zK-(-OQ~sowrmkGnJ1D8jE#B0g@A10Uy-3oja+w!UbgEp=;}kE^JZ0ukJYNGZy`SP%W%Kr2)o* zi?(Bx%x)67?B zIyqzsjMo5Kqz7pDq$cmN*HoFJ_TJI#|ERV#_D1_kSzXxS3uQN4=8d$- zJ^-CIFtOV+uJ8aJ#%TjnO=}dCH#IIs%o*_wjhk#Prg%jQSv7Ak@7q+LLLBy%T2&AxfmFb(|~^22*i*x zph!9U@Uy93O#Mvi$5KC>=^)d8phsQg6!tJ*$bQQ^xxW1~?A`sEeg5y!W`Ekupv^XD z(63AV>(qZr{q59WLH)~It@;C=%UO(bJoT+iuV%V{>19mMXWEPi2;+!=0Q>y?V*32C za1wjkKW0z6>D9+-)r@>Ed&{4q-t_QCu!ldKJ^W$ZNdY}_?Blh){p%TLCG35YPp>7^ z+{)6nd#Yd0bDu|cB3Qrd4fM$XTISPo6=DX&tl0mb*6I)ETK!>Mt3M!St$x3(VcD8p z-$lCC?e|GF`|ww=4}Uq+3z(kD^cbf1L^@m|fS9Gv-uO(G`R7Rc{GUeWqVVIv|e&v33B@G>T`M6=QmIpGV&&HcA2Zkvm}%C079>G5@p~tG}WG7HFis=DJ zqg;UzG7{$!E~g<*n0$*K@_>BEKJ!=DXZ{5H%U3@jgsCfB~rnVn-vOPtt%Qhcf0ArsJ3%Oq+1p{KQ`L&)AFZ>`rg$~L|_9s!lp7u3NmmnP` z>A-+2r2SMN*53pQc5yey?L*(ew2z>^o%_9;T|a!>heBir$6S0k*zD%;7SNA<=?8*+ z0Vwhm*W-AE`g^Iro%$Q7zl!OLxpK!=YPQgFGcAuL+ex;S>{@EpFkMN@6|~HyemN~u z$S$JhV5Vm>eGt>*n2uw5B-48`JpgH+L{a0T=6CFp;FBM?SHjoaH{mm+{qjEbZ&3d- z_o4VZ*{7&^n3{X3xr6pM(*7#47gN8LX}gETW@?UOt!}|nTI6uHc;E1DJ&c;AWQ%xj zCJ!*{o8%5KWt%|XL-<7AYXB6z|9VTHw*-1iptl5iOQ5#|{_mFndIan1#I&84tqnwXb>&+)Z>~E%Q zhxwK6{=l!bpO>A_ukE(e%lV|b;cUA8%L#le#phLQ$@E5QH|uf+#rfp4wwmH$YFlr= zvJ|$VoYB{eX?@1n`Lxw^D#U2X_o;QA`PAj+5wrG;afXtZ9Aw0~DmIwUc&=^T2PBs( znen)nEVG>o&X>f}>uBqIXViu5l>y#7}jJKw*vexUfK2G078;x+1;WvjwPDi-V{>wJZ8iK6KA$#>X1E>YvUQDmJj z`s;q7_z#D*9~ZAxah?6>+@NB){R)<=VtXrmqp@hB%9xR8EcJn#(gU4-UaulD|@-QPcH8BcvIeXGy-m(%0`YxcwWExi5YItbEv{xFX7iU3mQ&q51xcRh=EfZempR6G?Fjw0rRa9k~s6Kg?!t#^& zC&?Zn@j_BIkBf(qO0cK2$h2m-EF18rt7V=G317RlV4$2z8&Vfd{^MVXzO&c72o0|JI0fIRO6+mX4{8Dvy#ahXA~~D9&S~^;H@>^-!xlKl#Kt7WT>4= z+`Q!3hrnjX#T2khE;ltRD6L8+7kbH5)9ePNTFDx7qjv2gpxyZ^l`Z<(>uR=)%o2Awqk_RhUV(z!D{gxU^C^~mW#UzT8HE_tPb)ZIC-xs#- zVam)iplea@qWKhKH4ryJ=(-o;&5aTi=U(8zm!J&Sz%5hB4pv|7r{6=_MYh=bE34zU z`YBszTJ)eqDXUHHXDWs~pAXcv>=(GY=aU`AKyNGAyqx0e8mROsirbZK>Gn$AIhN!$ zB~!cIH!b&(bRGhUzfpAhP%)3(WZ!uQXJ4(GrNn(mKCE%qn#$^uMM)$tQ?k|EF)o?i zOwzdr*4v7BZkw$>OKg=mQ(c?v-F2d}1-1n_!3iAa4cua1myS^~^BOOiZXYijlx%GD zlJRFSOYKUgwNq?rvsnsxp=#Au>ukB&Hkwz2pp+@A<132(TcljI&9~2m9xu8n%IYo? zhpJe(g2$PmfwQ(#oThB*{t(>)Z$6*oBqdAt_LAxSC@F_&^(OnHLbi^>^k4;F(rBpq zblgNSQdy4J>w23{H#u{&vedj-L}R6N^(}ne%dS|;NY4B2+9?#BM~mJ*&d*0a0fOS( zP0D_(fvdYcRa4EYW>DU9j#}Y8YQ1TpFv3E~##sbffJ%FdnPOR#G8g~RZRbEH>6nPwYvfKjPEEfPz zl1;!9r4e|7lmIu$QsD723wWH20Uj#@fXB%1SndC4?h$a5yn^&bc^G)4+yLAl=K?$B z7~p!T19nIuaGfLp+hrQCO-2J-B^uZwKV$v>X6_o$BrhS|DE9*!&_f<0YvoK}y&MUw zlOuq&nB{KvL0AN=mVuT5(!)_-(yFB!?};ZDtR91mGU=Wm0SU=l+%C}(g7@& zRlqXI0+!05z!Dh`ES90b6%qgz$v4;|ppZKY6kz{(vk$@@z?V``yea@ zCSvZl*#}_^FhK?Y7s>C~K_Ff}11{w50}JF~qz{!FfQQJr!1;0v@L;I}&XYpmTuB1X zk!ir$m~C$MLHH+draS?hfw|CTAA}2m)8qu;RA~ZEk!8TiQVKjsW&sTxJ`xLzmA=5y@(cRh z_Lh%)Vppj-_cAX|X_ zWdpFEtO53wTp+e^0iyW>_K^`lj648F%6ENC>AedKm*;?CayKv_mjnHBD$pnEfFdjV zn4a)asF?v72=sH044?djJufi&i6aQ!;s}E0ID+72pvYFRKG{s04%ql)4K0(QnI@Bf zQ)Mu4iu{KCFDA?Tz=Px|;3T;bI8n9$CrBG`yc7culmy^7?09dk!a(3y`3d`9>@RNv z_mjtf`^vSzF>)#}4hw^st55)pl?A}jvOjQd=?fes-=Tkdr2G@OmplXIIHL#y#0{hBrV6^NF z3`!WVk9;}ET!n4GNVyvrAr}I}b&9pCT%o!Q*iE)} z*%vxG*d1i;TAy=tu$yFcovS>$iB?x%q`LG7Y*1`o!`EOU(g)b|=E9*(iEwZrmQ zUB?(>?XWPG)h&lzoYi4TtS;R?))#AEb@|3xyVS=$cB8Fb!TBD$y{%o!0Uoz_dt%T4iGbaauc*#kk3Fp2k$0)i)Qy+{ zG9GpqKxN}ChuuI75QDD$T-9wn6;1pA>)gJ^35brS{#IAspt?--Ec6>dXAIicOe0`l ztHWN8UAk!Ni_!e5!$OYggay#6w|4 zSY5-(dleNQlj;?q=T01Np z*k$*FwZoEuUGcuRc33R1%kDe1b1u5c-?!Ed3j}uA?XWs54cMjo#`?OgnDPC$wd>Z3 zeQoWq5MWnc{$=gDwPIgcJGT`x@xHWnZYyRg))!XStrh!ReZ8&NXV$J;EB2|ib6YWU zj8Cl2ZN*G${IT_QTQPHuKC*V*TCoqUo!g2TyAP~gw^r}~7owqnNjEo7QR6>GO}53L7+R`KNl;>W$U;A_=Q52Ab4+ASFD)E9gk z-)40MPCcD8!Y40U-9X2#KN^mgtZuo}VCBN@1*=Qg;=~)^lfT>JVjE*yCl877$@5mX ztUz`1VfUQXr8|wz!Tr%aYIX73)ovczgJ-M`(_C!4g*cC=?Q!#*mfX~}>2_sE)EAs} z!Rcyk7VMm68PpmuDX|`As%21jz?9Z|m?@S)4FZ#q?qMcd2K5L`(+&@FkY#!-`EGJB z$ud2bd^gNQ%k)_CeJ?b%6D-qX$#=tyw@i;E-wku1WqK_6ZkTbFL5)MMH{PnbHp~H* zK^+5gq?Z}{ADR7?>AtYLiMF3*@Qg(?_epD*eJ!)3!Z1rpJvkVoOb3~IWiWn6;*@FG zh1o}$^}8^!mRVM9m}Sm!OtjIKNn+lBwmunVZ_8w?Gd>yK9E`HeKrTemui^01s-OYW%8F8Cf~~pwM_iIhKYBs zoXOh|%V2|cFl!(2MBCFcJr)W!K7%cj9cg^B#pAPwWpdv(Ozt)hGsrUNbpq4u&0CCR zmQOd#a_^ZAv`h`}pPC(>Xag*hz>N{yMT||}`dg;#dlRk9>(kFNm{<;`VW1~kU(2+x zR<+c7m}tvnK5l$6y`>Yh%+eKxS(@(g>0_B5TMU@IMOmiD76XQfv`mjJ1`HEnnT&nR zaWY~(#|gJgk1Ym_PnczTEaPvOfMt4YF<=KiedTcR(xfRZKyMj+F=B>ZS zoosy5`pUks$yIH!xvQ&MCr-g(@Kvy?t-iXfqN=3H1doy#{1z|x%2K}2`EeX2(^ZS% zH)%rhIA9;h70nIRbrtBG zJHpKJu>UaE$}3cOh4L-|YcVX;g@lW{v_5&tK1MLS&EAOE=s=#dx(?^ZY&srGPgq_4 z(Q1cvhcP*ek5`O^v%ZJI?lG&w+WV^Og9(0mjDYIW@w?#>tE)amb!m94KWueN+}A+p z9-mvD&c4#i{mZ`QXUsJe9Ix!vj(exSMx{D!$rkKz27&A{)KTW$Uprl{Sac%8VVhg}vrfN$<$ zHxI8nH}$Z~K;P<(R#(5b#xvLV2CG}_T;DvL@AX#K=v)ueFLqszvN|~6!zXy&I@Ko8>=0vhIiq}XVUOR6=4asrJ$@FN zc<1+c#WkC z!dX^_hS=(Ip*z#+&;+Y5e&cVkIyAmkmj}BuY+lgpTAeB9)2$sET&pu9EKjp`XllFc zPPKMuWUVe8c|OI~7uU|b3ZHCswQs21T-2-0R_7k~VAP?LtPcCN*m(1BZ=Gm$*r~

*m*_mkiU&qhr!vZ!?_)4b=Ymi>JCPkZctyJqeEGB zS{=q}Tf6yao7P($_Exbv(-wDF9d=bwJKX#0Z2qvHiq)l{eQvjQ*h$6e%yHXn8|Jp- z6)3+}Ylq!atld1^mn~L@QOfEIyJmX~?3iM8acEDQtPXpnSY0;q+-P;!CB^D8Q2!dN z4*OMDovFKPtqz0Htu7PoU%fqUUWV%CBQJGUhY{4)&eVfitHZt&szW)~SRHnxu)0G~ zF4aBqmxcTt5h8zUdgRZvSF3yE&(!h5d*p8(>e{Lv`8x#pTiG*zxE@tK@;5)CYZriG z9eg5{Ju;l#&%6)($(Mo;(T5)<+kxnN1p4KEARY!lk;_J#zQ;3>M(+@?zqAAUNj0#q zlmMe86Bv}mz&Jz#Qc+r2ERX zz-W#dz=(3B`^ZtiC}{#l$|_)l6adYt{wC%EU_hn;{jxvMC&PgveHrsFi~~OKpU837EFen6}X0Q7T&f=@oh_yWQFe3J(=PNAPX1neuf z0i)$gAm*I_`^ZVaDCq=7Nn;G5ESJnWdWd$%O>A*g+2pA&$ z5IZ#hBc%!$A^E^?j)uSv5l9DQ3eYe60`ct~h_`Y^{sXh?#&U`0VAab7$K#=aLEFONg^;HbAW!C0K~6uAi7J3nR5w4 zx}W@ve&)XNB`{jv0S09ou#Y?rjFP*7k@EkscP8LfRaf6%cSv$`lR%hfxCT^Iz{@;2 zB#OhU{KbB z0XYd2X3?9J^9g6kL@+9cfSED~WLFI^L%QglPM43sH2FOkmY2bhJOc*hA&?hMP~@im zCbcUFXUchCM9u^=q!vthDrnVo+!LXbShU7Gmi4!3E zo`539X$q#-ovTLe&P?@wYR|xuE}zqvo+f5SdYHNBCY=|+p!^Kvj||Z4Fk+6y%r?&w zGtWFKyTD929gN7gzzjJVOqUWcjr}Z4YEwXV%>aWk6r>XZ6bb5>F9%UmpHvN`Y9Lhu zsTxStK&l2(HIS--R1KtRAXNkZ-_!uz4tC$x^|sPvE8A>kg{@4pl_|DzsIBN?l1{w_ z%-VU$-Z&j_?lF-h6O`5T2`2qIZRK5CdCOMXZKc&#uCtYzq{2-7aY-#8f3}qaw(@#X z3CgPVNsSRow(@|jTx=^_ZDpmcEVGqGwsNek=yG*lZDl2yAPbZvHAddp%1>;?cgDYM zGw0e$v#t2r!kIR6nyr*2m7tukIH@tZ&sILLl^@#5Ew*x@t*o;ZU(z#dX0)yNT40{d zSk=fv4B0mInXNoyD?hN6n{36`v|4P&cMLI`v5LUY6G?_WDkZ5gj?q?rZ!0g^im&E; z7xE>x+ljWaz*h2Y#aE5KnzOE5)~;X;$mA9JsjYO{%7?b{sIC0eR$6W4YFqI&%`G<5 zU@N|EeqXo!G~4aSq!N^+=}C=|pSJRet#sJR&uyjMRvxmIpV-PbH*{Z%Ip2=sJJdRx z`IfEt&Yka2r`m4uq!N@RW0M+dHrdL%w&H7YuiA|7=zOQ^3fpbFt@w_?x(NrwHxR?u zOpEOVW+j!NEKW;mjQX>cCvD|6Tk%~fm)gueTWPWt-+8FFnf11^)>h`(%ABMUloH=9 z-Pe44*F#$}Qnx3y?-9 zTk)0DcYUt1-M;CBGw{%M%S|dlDUK$!ZkO>#HuJ8n_}cc%HuIvb{M=T2C*^jVImcFf zEoQULtgw|MY-Oaa47U~QB`GKib8Kq2t@!FEmSlpmU{F$HV7;w;YAe3V^1apg9yh*M zoF+Q~>lKG(q^&Y^yUF~?j`W_b{Mc4*vz5zj*vlU<3zI)a}+b!Q#rrFA5TRF&9tj5iF!6d^1+UZHHTb=rj;TN`>?{?U3GgsP* zuL=9Aag*)lJJk6$bBwL{np|(2@wH&z(ajUv&({Fouo>Ug+F>)#CY9tcfRP2fG_yY0 z+((kEd5vamA3mo4KSTTf)3yIUP5b}D+W*fw_OL;@3}i?QD6&;Y1epH+u=f9lwEsV- z{r>^&|7T5a^%Q@;T|wuZUtF89Sq9_U`U!k z)`|xi0s)GgsOgv$1fp^bm?`7Ih>QX=WB`~hQ7}!uq&Ge+onT1b0)z4!kQ+V7s^HqU z|2?%_ua?WOFwjTsTd+jrR4_wM0n=qMm?ni_Sf+v@IUEeiFp#-Xph!sLeoSwCK;8vK zUeiARUurLXyY|xmP}y6Qy;9lp31`UJV7i-QP~J)N*NfDrC^540n=qVm?mSuu#5mh(i;p) z8pwlHd*#Zj5q)paiFP%mHnIc(*IF=>3^%e^c~tu|0v-M`4N~dw}EMLH5ir) z!I10#gVG2xdXKOf)h@Xd+%e|y>DgL3*D z$6-#=;Tp?cHSez)qUvKp}oVGw6PFoPjau4w@H~1XtmZ<~t zyuDiPyu;^EGhQ8P#s?U%sHfpidwdR+C#gf_NePFy@Af&YxkMe-T#_imo9|i3a_7UIRvC#`IFlN+3qpC-rwR`R{0*s z;htmyQJ=%=ed@4!U*aJ5ziBxzr(Aia?ubJa1nR z>~f?Du!Ky4Kh8>k=|m2HRiXeL{u5o2<2d9b9V)B@_^ou8IxO17t@%&Kf-1v%@CUSVzzVR_5P!m}AXd;1U2l^6Nc&y`aY~mPydAZMF!8UbR zur1;6i{~u|=J_el%yO@ip6O-r{4nM;#p8x0itx1E6q#(L2{2{cOW>(L`4X6ah~scb z;uxPg({iA@RQY*tC;1sZ{!)j(G*N(`zi075nYZ3?Sf41t&mXcJm54njhm5x`?#bb; z-%wduRa07DUbC*ML1T?|V-58AJ4#T-7UvMFp>|V!Mb+93)m07rU{K5tGO?*<3MYQbW~x{=_Qrl4hDSGm}~4F4nMNT}^r8ruwQ_P5DMs zlCI?Ml2JLlKwCmrm+yCa&C29cTVL4_mBYMx;Ps5DFZv0}X!WYuR9)S$X^nG)hdNwW zi|b^Ipd6})qs0%%>SQSx$!{x5Y{mEM_B@;M{klEHW_&#zhbI}{aA_aro!NYtU~MZ_ z_Y?2CZ8qimMcevSHz4gvx1emlKdG@Gj;(xPE54u3|7bJs+R8Pya#d1c>k8kG;(tz3 z-E#GHExcm8`F_%V(Pn(Tl$RtK-oy7KH72s!%Eh+QU@KNhgK{Q+wIpl*3tRcStvp~W zt+sNttz2mCV}cAIJ|zV68JHWRm%F}8BBt@wJdN7#(-f*))%{1TmPrn$C~ zl~m~a%1mmkL~AR)^W|%RzNeOT!SfWh6R@6VL8+f-Q@#Ni5890H9(bM2Y_^r@wld9D ztf~*nX}*W$r?%fGw&Hu7S$B0dHu9Yo>nXwF1IZMEQd^hQ0`jq~+-@tk*~(3}@=a;8 zQi1K}yM=8_GVJwi)k9D=Mw1+q|7~ScQVB}6b+}CQPg49yVJlm0Ws9ve+KMkV-}UdS zpc*@l??MbG874mll3KU%6`$M8-)zNK`5)Pg@BQIJoAKRr-nJRvqu{qmCMXrYOMYdN zqC3b|h9(uZz8a9!Sh~(uUa=Klv&*xYoTS3)J=sZ(KYnb*Dr-RY+suu&;=AB{gEDs7 zZq{Qo+5bPPz`R`MOPO_XoA=Eh8IY&7H{&fHvm*Z>%*s~Ue=yRfWY{6FH-jRV3>yu;-TPoHyM`T1cwleie@~x0EO+!W zvF7(NmeYoraK$i_X2G!G;Dli#z)>3Rr{N63Y4YjN;q+F$2ZrQTFeuM}EOP{k{Krre z>pBg$Xt;UkFf8@zS)rcGlr2(rs@g}ZeURFtYX4%0N%KQc=~TJ zk!}V^c)9L0}8`d7h#TnKXB)u(KLNns%vkSQQ5*s}-}OVolQANM!uywyL7 z&u>6F1VFRPyUU-;^h#zd54+)V}nWwV(VU z?I$;@(9>2~Vwdp?Aj_bDW?p?dSghB0KI@%{EY<7Fgi@bW4Ww!yRRgISNYy~922wTf z|9%bdUi2+#tj(LTEpI~&Ju8iQGvZ_NYU?U$E2~P^oY7d-poWI^wWpU>Z>Xs%t*fUW zWlP?SwdK_fRcDRKQ>LM@yy8^X=9<>km)ET?t=(KzznK+d^JX;GZ>l=$tf<`Kt>?zd zP}}mV%g?CYM4sF7HkNOwG13gH$(xb4xq-!D8}r8GRjl7oU0GiRcT$2}|If&;iB>e zjdhzEz2v*QO^c725XV?vUsYbZuBvvUIXi3XDUoVbtkO$0O_)4=%*5%F$Bdseef*dS zlj7rvQBzyLvAo*nH9bCNQhXv_(hVRECLzM-;lecp@-lc&VbI_s=4dFbn^8XHP0YHQYRSZ9jb?fhbK`VQTu zNL?k*8RW+D`gI#>O5Jp)P9BrT8LX_TH)YFPTV39mM=sV0Ac|fdrFB*HrH!?xnie{q zCSpPjYBZM%wka5^wltQ~9%?H$)KE5Bl3q2&?389qUS)Y>dFiRNO-*G(O=Ia=Q;X(u zBwy=Xf2F7s;>N>i0AEYOHk?6YB?D1+xb^EZ_%~{fW0^L~xe26+-U}jf>o?|e%h%^~*uOrIY13ol zC&ec6V{S5Z%Qxn8^VjF|?;Ou`bLS(gib+vPh9h#bn_2RAzVG_mAHVaPHN(A@X5SB^ za^2Sy$ls*GEFN1Nvl7_C)2kuI=uMUtFC9NA9*<9*Tr@i>t^X}a&6+qZD%byaBsFP5 z;pC{?@ZXWt9;oW z5s_G|}&Z#b6$FK9n?%8EU%=+5u+I360w?|}=YwaO( z>X%flD^*;ymQKjUF4I%S&8}%&USl5Bvw068DR%@$S48F)&skJDuW(637P{_?&(P#G z4fpM$tA~tRRA(ZWE~=Yfv$i(E_6GXt%97>9C(JJ{ESecvwY810Vq%z~ z_>L_qP9dBG7PwX>p*U4@oNLIIao+nyQ4QT!ZWHdxl_krIm(5>TR61vQ@$6;u7tv=m z-;KlGB@s3-)eoazCUVb8DBM+wTqRw`74l@DE3eSCgk|pX`GpZSIn_^BwiIotsH!us zErlEEIbU(-ROHC!jT>WTSctySM3_V5M97j&b-bKaR>h{qIsLh=naKn7XRN6{mCDvd z78yB|Cgu$TgZVj=PggH#Je9{}L#(d8wyu0#d1DnvyTK*XrQWTAslNaGnX^N@_Nd#--SrnaH6 zuC}JCGFDyQ(72(dfj*^)E=kYP8W!kuH5Q;PZ>(5v3YqSja-_C?1Fsh4)v--HEhB82 ztDmk6aR>QCWVCD2ZcXz8Dj)cojZ3TQix?DOemgZLYLpXKuVaoP%mZ<(l++!+#Hz)v zEnS>9!3eWL9Iq@{$BS82Y~zNCdM*dkUBHJcYC~lm?>DBRSz%diIbz;?I2Ez-%1Tpj z6I>!2=j8CKNMgj+0CDQLGIn}>Ezv5gDmFBj*KG#WyHQ#FIwFU<3Wx5Df{HLiUO!!7 z*|Mn)7xSYqA1+ffT+8eSp~>`j&8!By5iipv!3VDznr*DEmNzEM`g1O3*2P^PGv_`c z^IT6Fmoeb9!nI^@i*pKl2NJyM61 zMRYTBn67kbIJL3X9MeYEv#)&J<`)quclmU2_PdC%)v|uNddg|1Gg{1jR81ext)bDS zLNa?i_l1jHmFYb^$6FKRtT^hK33d8ZdaJi4)F~6^MA$1^KV2c=85oi4Ts0^KWWy{0 z^MRZ=jjrw833dD&65i*kOd;j*5@E}0{op+(PJ2Bkp%xX=f9?)k;~Y;ZoWwoXY~sxa z@4~`a5%$-1)SwiS)akCq@l7Z0O$l}S9HMSY_)do0lOU(XiMlJHPMwUpEul`C!{KgE zM4is@H7CePlc<`r66(asuoouO@#8t%3tTlU=4l#{8(cjolR4TO6V9_IpnfMoP9xzn z66CCj+_uk4sMDvTo}EyqjpukaC)BBhl=z~AI%NV$otsc6O{6NWa8;%)Q>48Ka^eKk zrUY3yIU?65$O+>)(>q+XzkKz5XcB+PMc6uBKV5WkarkwvmLd8UXByhIK8H&Z4zs*B z%BvEl#7pL7u8E$@2%E6$hb!2;?M{pp6~^LJ{N=8BkbJ{m6{cBV?K)+P{X!U#@4EI3 zasLixm2B6PE8Zj8`+GXVKI;16BJVDc2?Jqxh2;$>dy(x+)j8V z|MrZqH@oARCY#IaOR14{t|27jVx+$|5o?a~k~^n>hFO(}rGG6(*zR3F+^J?&HdMq$ zMcCHev&49oSDwKV&8{Uwik-p55joN|{mXaj$y~wRU&y0!Q-Kp-cpL}Z;J-|2((K6v z-IFqLZ`K5UM{hjyLP7dkwSWFr4S$DlKu%H1a?-p{Pv;7|3r}9b@dsiK0Vdv%OS@8G^4cWhu82G8a{_G z8%3yPky?&X%i(J2ua8eXa4*&4oLkSW!sf+@bNMCTVt}0(5e`TikB6%AumKVW=@;JCa?g5XNo516AKKXpvMR=Yx zf^(%3oFmJ?A}It5WfC}BMuD?*NAv;-6V8`TdZCY%{opb3bMR=n2Rur9r)SDO!ZUPt z^yyMbc$$=eQ{^adii`#)vod@yGsqpBsB6Mc5YtCJULFVI(gq$W*MQ^XTyU)Jmp(?y z2p=H}z{7R!H-F0$X2*5#Q2Byc#D~bc;KA}DI7-^Vk#ZN9r*n)Cl3j#jx`X-%SxtDj z%matXBygz2z#)jLJ{IOt}fgTm_|LWRGh|83Gb3W!xa&1c}^FqhAHL<}q z=VO7B?>ujF-+ba8@A$16?Z(ZgPLFeJOI~+vE7(YNzGExt>DtW3#q*pEj#+EPEi>uO zb@TN$@--Wk&T;%$I40>=4q2tFAH%Y(QuHRhCZ z-$ci6mA8qv@tffI&G*i^Da&}rR(6&ZH}1q`nHc9diivxq5X;b zvN}q#4#qfsiA}Q2X4*$MehZKF(j$+<9lyjT*{0ne)@_sQ6Yv}D_%%J~#$7x*Acs1( z?cQ}{Hl{x0YitL1+Ys9v+o*0EVw(-8M>=tjt8nw6F-e|l+w9urac??^ZeXs#6!2W`pp4j=#D8$TIFdeI0#S2D&M4AIE>iesr_RcyEW_w8;3w_j33}lhDoa3h2A(;j3P_op6?UjCoxONgK2#IGNMZZ;y%cKFTP(3er?Sq{I1wk_toL>>P4 zlhI2^FVoS@hU9W2{t-tvn~}=|($8>ovk|#WL{E2gvk5uFK9~*V=w<_QnFJqp@-v%& z%Ovs(IlS3;Tqcly(BaKy;xYxEWxLGzFdL4`tj?QBu9X$O7}+u^=5!)i zC1{lskG^o^xpQYcch}w-MU{U$|Hj9!-hSr%-{<|~xtzSE(&Ln}m*a0XpIdz0cS`U6 z;|G`jcJd|He*3~HGs*`Jd1vnfHLH(WwD7RkdmPfTa>YCE{X9P5)~SOZuFKt2S8!d0 zTrwp$@aFv^27PPQwjVuN^VVl=!@sQVv;FZ|OUC{F#Pj~fWj)>Q}7`H4P_mf))acko11PWZ-TykG2T)!sjLYbnm9t$0Oo z24z@TGtD$3ZJZez8#V*9(#O@C;XUEPf@KBibnC1{WuTX;E3|9cCqmnLJ^cLCNF}v!Hm$S4O*yOOBrN`%_ED z7Z3fazt=_2C^~-xGB}PZ>pq+=G3-tU zsLXc{l#5tGB$`Qcb%zs0WnSX`$2Aj7)+yF*)i!(7QbN+YZOknH!e--D@Zuu}MwD4=Lid@>qq;@+jbG+GQAWhoAu>24V z$t_?|t^`>h8x+~DV-`-+Q49sj9--_<>=z(%i>}^(1uOZd$sRB)^z{20bYM-y`@E;8umT_Q6Mu0)d09i3X z#|ykRxCfSJK<4m+%vT?5(z#N@=jz({TQ&SG4X@VlLiL$G*p%uBEWB~5J*qxm3^M6_ zpey9Ru44^;rXvx4sNrjMB*G@OloDoMJs6N8wND#lav!Dk0cww`{mX&oxIP3~t^J2OQ~ffvZ)O%cziQ}Q^aaWut>Hs;AY+aD)Uukg9=H4Ww!yRRjN5Y9K1tt|TLV=)LG{dZn1M?rCN^n=xODIVz8PUS+7c zlKFbuohy%D?*1Tl;dlAzru)-L*Z0km zef6&I1uOUoiCG4rf4p$#=!EaS{rKiedXFiVac`R@@Z8=7J+Hp=_iwui>|3eUEsu5F zn}7Q+rn=VicWbf-|KZSEI`8iLre__i){b}Y3qM)9^hMXY_jI-PI{vmbXCJvC$FmOA zbU*4Hf9~7QFV&w5sg(2ZrC=+*d*;z^?fbRsnmboa=Oh2o}_FRQEN6KzrKGco9XCFW7G56x|E9N}@ zSUBWaw`%OplH*_OJ@oybdsfZ@HTz`rp`ttIC34zziTeI!+ihz$jjlY}_1#sY*3rH0 zpL$*Y&ig#;aJ3$q&AItbB88pKX;?d_@h{JYZoJU--FYFo<;wgI_Dr31-W1O`NfWr@ zn(d$cXzk#^p4AjANAB5n<+GlJem@TM_+NEC=USSt(8ABndHv-(&rM|AT#g@GT^4v( z2s_Vob(z&K`PoS~8t^9nMy03a^kKdeAt*hHd+^gNGqw{`huKADkc6As9S^Td%iEob z1^e&#Cv>Jxx}#m>(zEi7iDXKhmoBG|4EeRq{E%xtCIi%5N8=Y)GuKTMw469Nvsr|1 z20UxTU!{kyNk=8e94`^iSeCRp#nYq*%95ppOKU!RV)v|GcNgrP)2C@<=$`5@T&6dv zP|Q3&`b*4gzN2mreV_3=%#F9nPRxTIG%sLrW`cIFx`_P)u!5Ge2sJBJQC)U z&;LaCj|7Nhx;i0-88(-%iR7MdV=|wZ7Kc8{QL)4%Qr&UHOI;VN#*ykUSN4|?`3V8@ zNt~81BJNtr#v#lhghi&x*Hl-B zY;uAuzz{1~SU6=;Y;;M{VO%AN-efN4swtDkRaRFETczrTEY-<%47gU!o_b$d$st|V z;?>v?)|D$*qNcRcOoc}`y#wqp>}sY@AX6rlR@QE!M9`*nvp&NFXZf&qht~ZppA(jmJ9inegexN80*9d3yK)T#X=9`CUb;z zYCSq7^2+odp7P}rFC4dG`dybY#H$~#7!nMO&JE3p(p8_<7oEmI6^u5I?^$yLr4=j* zQhju(BWIS@l{c`Q5V{kXS-O7Hx++v7W|r1emDi&fF|%~7hQXPor5kF@qH0IaOawf` z?1iPQ=~KLH=E9OCljAc>=NB(4n!BW6LFvMRm8G-hFI#%_lu0v77cQM$x}s>w(PmEk z%+lHO3YL^EFJ3x-ZgElJ(c_^@=dYYL<>-lqEM2&)wA2_&mn~T8gig?v0~^#xX53)Z z!3k>aN5{9sCledRWaDb4WD_S4ZP9|F!dWgcfl@9ln!S9<{ADLP4ki|9E?r(yvS`V& znT4~8m#Jmu2@@wQUB0Yz;)I#hf59XJNIikWV4q zB@vh}{Nc`dpZ;>%mxU&gd?{+@h)f#E+lUukg9=H4Ww!yRRgISNYy~922wSUs)1Auq-r2l1F0HF)j+BS{wLOe zPMMeYSjj&quYv)2MpyNJQ0K;fPc7G}r9~~x8g5Xm9AO57EmM1$&Y7R0YwVBKHTDPV z>iSu_x_*<+55H)j$t4pE$h9DQnCpD_cXZzS%b>_JI#2$mYXANalm2(qvR5r<;uDmO z>VJy*FH(Dfh7Z+TiZqwgG?z7+%hG`+9cRVtIBl12ZHWpLA&_oF;dJVYvYe$vvbNluHQ*WEUv1slPd*D#F>a0?d-R zU{nT!nKBI|O=iMp$YF%jB@0ZG53#UI0vM9lLDroB19CSgGPj>e^LoO)+4bG*8dU}6 z%1*E+>*|{=j~XaRj;tV@%?kM@-)V%S@*Lqz8B93B>iQ<%8^CmV9b_#AFf50`hU9L- z919qbO`us_!sNSxa4$Iw%#|##r)1&ZL#7eVk+op9%muS#Fi7q7F*$w#Mx-6&EP&() zrpa?)SndWx@*%5QkRxGo1Vv8hV{$x=g4$0TMh@aWC$3QKfz|oJi?q!!WnWmm@b!s)G9~|0m%gn%3)wYZpbycZ0e=8 ziiL9oMrAFSDZ5}PGvN%G3(__~+6MNpJO^@)z@X%S0l5^Uw7KTG*i4wAnP8U82cxnM z%#;~mM23PH^5>o=&3}Mtas(DuJOM-U1sIgeum|J-DDr$yQ^Fq*?j?_cxpE`eQ_cZ< z$YwA{)`8>*X33v>m>lO5&XgMov)d1t!J2(0$0NWr848BwdF&zi2N;wCAZwIiXBCnj znj@A>xeR2VB``yd09j`QOp_ciEc3yT%m9OOD`%D!CkcxT)fBGGF`l=BVJQYfvJGSv zFEAk0pvYcU5);WMoGyRJHvZ!Yhouh~l2R-|`4|kyOQ5hPh$-88^6DdDe0s~zvGY~TLE~!NxJ4M;|yp(6FI@@J0d{5P< zJ+?sA0*`%K)kz-9Og0wYylA*fU&O?;KABRv$DPio$M}HjeBm`3_Zly$2UNYJ(wz21 znGZgx&foQ%o0V<$oWF~jB^Mr2>CK5$@6TQD3;qtBsT&4TlNWrhasTd-&Jn%mCZ)bn zd8pExN9il%1+5yl)pK?VxuVjWUdePH7DO{;4#e*JV27&hUPfay?ie@jzIIjjcq}s% znGi6{OL>o~XL~HmAH(+d*t1pL>ajgl?dh>hOvHJAr8m7(58-0hd0&UJ9j^1fi&ahc z*oRbo$V)0+)qx&+ud4TY>_Ak`r#ClL^GWy~rM^eGzWa#=vL`iaNBrs``R`-!T* z@mMZLPRNrU`x{l;DyO=0hqWa%>9zahy@#Emr8>RRn*prq$zD>&XxwAGq)t}#Igg#7 z>I9cP?>W>g**mn-n>VaE4RgKEdr7_jtksd5JC)j@I$rXUb}q52J?CrH`C2dOt5q%b z*h^Kt)MJZPZS~mmRXyKho!i3cmEOE%E!8QN-rQtWw|Q|_6E|@;I&Yh%)XyVJR4wrm zW+`Oqxzl5r@{BsqWzX$Y^#+gi*W`IOD7)HYnT1WB>t+_%*EFpmwQX32R$mp<<>rF*;dxqnyn?;guChGhIRZ7aR+ zKZJ?WoU(nM^WDnc?K+>!L~NYTtn?;wYsFsaIXlg^!RaNi7cJ3%uM|nw^=UP-w^5W*Hn&+`6sk+}~_xLZJJ^Phy z^PGpOdR3)2DP50npEhVSBb}MdUwKP7RoO$X?#b29Jnaj-jE>Tzyc_VI3sn8UW2dM( z#m#s32dW-Y=}l+X({QHeoC%vHdoo?`J!h)7cS?6ZtLihZ_wJ8X{n$(T8C3^)>|a#< ziw*o*s)vhTR;?jNiAtmo`Bw6&h|c4fDF z&TCc8_1IOauJYJiRWm*Ia8(cYSW`PuIm%<1Aw^~F4tun79%i`oIUlL_M;<#vRj;Pc zd0o}lUG^NOqHpoy?pJod$KImqJ$nA9zBKFydeYAEoKY#(4?O2{RPFLu=L)~sW10MD zT@B}aSJm&j?CzneKJCTbrRpv(uJhLSk;kr6cAd-aa*lVg$DX3>DPG*gs;<<_|FhkJ z)3gbX_MCgeX306dJ@3)#?LCEdJ*?`(F1yQl3N^Tqcl}7&A9-wps+UxHOEYLr-}jtb zlx^{xzptv-Dt9@j;Y^QpT4hb8x1NJ0HOEUTu5sg@^Bh!uG81TGr+wa$uyw@hT5MG0AdS2P*x0pW=@}BW()qJ_(PdsIyVvu-v8uj~ zH{GgwUT-%iA}o@^g$1#S+M34t+Un}6`Z2L-6DCeA7(01fbT-Q=)WUR@oV6suTYUQ<(5-C*9GHzpEiyWRS7ec>*wTC-{0 zI`Yn9|MP#wN9BuuPPZrMIa07JHZ4A3+SJ&Rs)njYN?gl3eFg9OEFZ9;fl_0Qt*x)! zXx{Z3t123)nvJ!URpw6swxq6Bg%a;hq&Y(7n~JL6RM!}rov4)9$O)!iCQmQG`Gkb? z*Bo9{1}5m?Qo)-yH^k!c3GtX&+Q8Vylhm4o@5FCD4Q|!OCdMi@)tl|X zy+3G3;F?4N|2nf562AY&L5_FZ+xDllS$j>>{GE{{&12l8>iBu}j_uA`4#|tk`J2xB zTV?wl+Sng-6P*7YRqypu{DG$Ll1=6h%S`re*6V`ZPfTu2Klo?4Y4V9E%)}R#zkZ=O zLmC>(>l;hsQSqMqnsdUlc|4v`dFpG@j*9oNX!4iN9DO2z?JsCnbuvnKB*_V+$q0V+ zZMq9+9?oygJI(=`n)vN`G~Z*5@)F!31dhirlkce}LX%;>LukhXMtvAK+nCPBVS@=g zz>nT%pfv3UmO`JzHxAPueTP~8A!Z`}m|wy-o4{^hEoWv&4+1-C;14x{2H7!!O{&w_ zt{UwI6ZarObhVKUmQT1g3rMw@ZXen45X5=U0nI~6x9NRs&7b4ebhB|O0;cetiX{!X z<7|FzZ~Br@HhS~NL}@;m_Sy6X8$Rz?ODHitJXhW^`&m3%p{pr09gtDNE%0u(v2Gs8 zZ~W}JB0Kg<(<2&cI!EvbVjD}@j4a~Yv|q~E(z--lN~Gy8%H)%d@u-6|@!Fjft~H78 zXqTNW()76Oyk44ix-pwt*!$bWsF9{N$GM%VOvjQ&Zf6rVEGNP&-%a2r()2vraF?m? z5IIP#JJQ_1!RAzQvI?mBT-he4nV95psx-IBj{ee2F&a2blhhc#JGO8V;{@hQGZEjH zor`H0MA&hwH0^NGK7^uX6DI?=8k~3hT~B;2=dkH_T8!p?=15JMcRc16PoPxr<|Ix+4+!IPb`3x>bJ^QKN4C?AWO#=X5(K!)%q_`~}ISQ8VT|HP4nE zW^Zn@{t}tIO&VtL22&wB>Ij5bUWrNm?v-e+MeqIQ%xt~-UURSXmFaqAxp#qLa~Ft; z_p~f|KvnN)dEylH)z=6XTl?W)_(LQSl-cJ}qIx%55E z+;ZGS13v9-`hOl6!73DT7RYW}pjlPJ*k2!R`fZ-m@Q;VHYk}MZhU5}3C})EK`BSd( z->?0IRcc?V_5x63tj6uD_MqB3b-cj-VJ7{@2nXeEFd)~d{d~38tKEz&VBrL{&rth8 zYVWD`FNd1+-_x-Muj*KX$A_AxdoLJ}J3x_ZhnnuB^K?|gHub4e%VI1+IZDSY9Hwl4 zWkVYNBdhcWc`86ZEufSD2l>Ei@5Bppnb&)6LxjowRBk~hGR{0a=p6JS916cD*{pgHPmvGkS} zu$Sxvb7eEwQ=TWU9<+$Uk8|cA18&7 zyhE5#FknFL#UgS?Z2be9bU>0LWOkTUeOgRILNHv%trC>TcFPOZFz%XM*OkPKT zK^YFRFBm8?OY;g5?jfJB=R%H5Ca-LHk8qak2O0eVX3C>rL`K7AFn+r@At9vV8n_^ z|8g)}&IPmN7JQ`Tu!i<<6B5A6J$S6}wb+K-`UE8 zwzAh&Hrk4>P5R2ik7>z1m#?&izF%EI3CcMK zC$)e)WGlY=(l-~|cPqZxPT+c5@m)hZY-YQyoNX(<by zx0Tmy#rJ%D)@Git72hfLJwaM+x2tW%cc@!!rovW^x0NDWDYTViZN+za=GaVjQVGgV zUpxOINp)-VzPftXc6-NGd^hx0Z031edCFG4`9j%eyKS=-UtMjonZ~3Nl;&DnJHe`M z_Nwn^a|Mf&ny!fL-3kKosm=V!R(wbMJDYjHR=#U1*V@V@wz9!iR@zE|t;B7G=~!Mt z8SY-d9hf)IeCuw^(*8sFjaWZj10CtZApN~P%sXtp1lsAcl)Yv_@;JW@V~b0mnTce^ z5_2qcSz_7kEmTf!xeh^362va!+F$pRSj&(ZGvKARrXjJJ0ox%t{g{+mcd=m{M*SIV zGtRggyym+l3(yhf?ro9SEThXl(thrdnts_pViyeE(x9QSep5wbgB>sIB`Y*`ccemB z!0fA0>@X-~d7P_6rLRd|KM^T(0$oArqv=!LHPxp!e5Kmh3dXLs784Civf3PrwKRrS?>P;r^&UU*bz8a*x=I~)v!T>pO>JLbgZA|-aniXHsdv8{_# zi{P|Or?}1mcm@6^MKDLU&w%`TL@zmk{{LRGLaqmw%N}rGFMWnp_S}m2Kb@DF-LZTyT<% z1t&@$aDseBulsm;1B}ZP;E{4CI8H7G$I9v87&#d{LS}=9%VFSQ(i0plAJbcYsJsRq zB9DLv%dOxj?S~(!J@9$j_kNJ}x5u=neT4S057*xHVcM@glpgh7GDL0!2g`ZjAgKih z%5rdk%mn+(L0~`00Q<^^^ilVb7r@?fAIQ#kV6L14_LNh>9WZV*%ChNekECfR`5e&*8kS!^+*Z22qQzG&-;qlT2#^nm|NI4T6 zCu_j5G7lUh@NFL=0oP9N-HasV7HKLZbyyTC(OO~BOH7I2iD0*;hIFi#E#8Lk7y zk~)wL^uV5S6xc)Zz#NHy+43iPp|j*gFe>+hnbHbIWH*>0)gb-kV46$=!!jJ? zS_OmhN9|MX(B9M^>z&3yy`)l*s)1Auq-r2l1F0HF)j+BSQZbfSJ%{@0U7Twl_wjfvczKI4zuhU!z^pDm?ItL^rsDT zdb`DpbC|Q%8Ro1qiy7-Mb*l|iXXi7F+S}{$QAS2P~$a!!Vr@X1<+TUx#UW z&@fGQ3Hmq;Gb&-W+e~klc|n;DE1zBt!>_5t0h28x*I~~1wqee&OVHD0zNJi=6{m;8 ztf@E5nmUWgahTc98)mj$f^3H=ecLdlb{%9n%$&J~nUim&7Im02(kXqaZNY=#Lt46{mM z66a?iOvsHhUgN~weERVlWYCTCh{kDmnNj9fafe|7EU9g8O)%ycbC>d;R1>MoVY;1E z!~DZxny2`RV3;qzHje2C_`+dMoMGae=oQ=S*Zg;fS(R@X&}lq|`P^a3G@mjr&J38( z9A=4@dP#>H$1tBdOi53ZT8UW9-yCMeFvG0KwU|#FW~*M@TT3kFV~1Jwdo9}mi}|a= z%-v_0xlI=HpAK`%WW$_dm--_&jyA=)-jSM8|HWZWzQ@Elxy?$g(_!kgY>7vPiSuWN z>GsGl%%2>l+atp;A3DrgaTiuN)@-L&M~ISL1M)=Ut|+GF}|RbU4f^z2*{k7sEW~FpKo|zo^r_<_zt>Xn{DO^huOBoFx%|1J?=0o zn+>zF$x7`pH_kMTW0(3-huQRjVKybs4`qAAVX7}MOtqa_yTcr(_qXHh5 zPTM!e`TjS?`QA6i`45Mw8*cKc%e6{ym%|ikt160H%$*L?pzWZc-D2)=m~Lmml=}8> zjB}gAbUWMQ`Z3qP%lZ3qjXQcqZgpHsJ~xF;{Jl61Yg0g7R}>shr>4-o$%o-Q*+#k} zb?8UUSFe~Os}FMZxFfS&Nw2-**WyZ(M(UHQfm98oY9LhusTxStK&l2(HIS--R1KtR zAXNjY8c5YZss>Uukg9=H4Ww!yRRgISNYy~922wSUs)1Auq-r2l1F0HF)xiI?8hGz? z$$d7IE486GD-oD)u3YnNmetP)$TY$WE&IH0Oa6K2MWL8P;Ed1O5Cb&OMZfv-9=j!6 z3Rk5%>7|L}pkL0np150)a=EmT&u}MB=P)4+33VXLkZs5&WDBwtS%+*#mLLxx<49o) zX)ZE`>>NsbWCyYg*@kRFwjf)Pb;x#P3Gx6kjue*3$VJAGokJv)kL*B}A={8m$QEQP zvJTmfEI}SX#*yY5g!>tb`B&yvIAL$Y(q97Tac~DI%GSt1bF}%M@l;J zkuhZF0OBJ%kY&g=WD~Ll*@~<~wj)cB2as{3WDp-2Lw5EjKC%N@hHOJNAzP5G$U0;@ zvIKbm8AmeGB$SJcAsHPS%11KFEmVeNv`(lA*@A3E)*;)GCCCHFIFh;gpyYip666779LbFTP%bit?Ce8)WCyYg*@kRFwjf)Pb;x#P3Gx6k zjx;MR~ zF=S^?;v+kdWym&U6S4)_imXGnBTJA6kZ~mIDTH$Q#`tz(%SUz~%aCozCS(h;6vK?81Jb;WN8Sx&ZkGiE;GJ4=01V1D}y3*tAkIsbkh0X$}hW{ zf8TEU&%5RK^Z#OgIo;Afx0}AdTYmfhi~05FmVWp85%+v>uCzY8^GkjzB}=K_LinYe zubLbw`waaF-j#Nv&*I&w7w7(N-lYm?3wwFDnnT;@6DpG?+R8}Yy+X8|dx&36TMBn8 z&+Hs2nL&E1L+zpEq}LE?4ONj|eW)qaKzge~Wua2i+Y-vh-iAFEswKTGTpe3UZ#C~s z4Ybu--k~=wX}tIyeV8;lX&M_&9%0KcR=zFR`X6+#kE+@J7NRZW)=0Ynrn44 z^{|m^w~l&fS|@+0>T?-&xqz?9gDW|a<}fR4(j3RPk#7~>EpB)eawFdwzF(Jb%(B;6VK2RUY?XY= z`I@wi^wKf@cKp9u+&_zN%Cyz`n)KK3UB}l;+el+S$g)MOu$R6$&TlH8@rhe;*jde& zzNs&B4F4>Cz7?m;3VZpR`e6+@F|va1D8437_E7ZYW&BP2e9PWM*lr`HJl~Yw1S_6N z%X|ZuOPRS}2HopDo$I-`(UEbaR7qK`k@~k$T!zt(bM@X{hOLe^oG%CIy+4NDCJ!De z`CsDyFm3HBzUEqPOR5a0Vr_dINked5H8%L#=43~!DrK=^#VtI>P$eVyP0e-QkK@bmbtBz!UQA?l(NpH284$@iH)%z5R!J(3{><{jcSY_<4aN*+(){{nS! zF2`=tegXbQ;$8!vi~VBk$6(LH{ss0UupdsGDDsy*d*zQseha@=Y|AFw~@{tu@A=oB*K^Q-G={5*iJ(pf^0$F4?ml{O#8Z>?*PL4+;l%ip3L__ zdX&b*MJP^)#m&}!akmpm__PY6+ca?MTdjy;D=lLuBE&umSxhY3){G9h1 zemBBquIZ`W{GPzCujSXpZ&Q=;dl|dqYtksueEx=gfE^#-O#ICCn#c#+i}OS5jV%xuAeFd!pZj-)p21AWi|?NysMnKfsyxYwE}3YuZ$4A};qg;+bzYc2ln= zuDM=JdouS{ClAN(clc$&t#a)7J4_sG@ALf?VRNnZBzz0 zPwKaw{0Ve}m%#sX@E-zhZ21i|?|~oQlxejS&*+Q39;wuQdx;Q{EJ@ST8f72xP% ziYwZ$_9e|U+KBd6>$Cd<-yWK3hY!)_LA1AYXs-jz`JTdfR|CFbqR;a+HrW2RXh;7Q z+j)X^at`7+uus~t9=uTx-9_Lgh5nv`PJKNOTJ_%cmF+fxZwQ)wfQd71Ob-0^vl+O& zE{+L0V2hxe*h6knfWBmJY`XR-fL{}-_T*%~~tWWogaA7cM=2KbFqEnxt@ITNZs{37tJ z)0~8N(tLi=GoM$g-_L>XHS|^WQdyg?EEnYCdhH8L8L1c1A5-s7v5q;?Mw<&;f&O&H zV9d?_cre4^{{yhUaH%84mFu|{;!ke}<~W4U1ExQ-zwf`o_$Gjh{=3@4uYj)_#_ia4 zokH#o+;R2M-V=P97uohh+`kNczUYr}f0q7U$2gYA1O7Kdw`^#49(2lJ8!p>f9ei)x zQBJ*j{llJi>~A4-Q)7RV`Uc(tUFJoe%t5-pLAPR{tNvqe;H?0k1;6p*SYS!V{qJdUkkeV+(-F80H0&dzLB5AhQ>TaS?YhHeOLeT3E*3$xjXJoqWu~?(N8G5 zW1xF=mVogJ^=n@xO&&aI@cDd z%{Dm35ABJ3_NV@(XD!e@^NbiLs(-o~x=ojiY0NLI3w?|~)xSIf{57#Z+I}N_1DA zI^R#RWYwXv`}>J=Jn%(7WgcSQ^9$NC zPxt;(Xm93X>?vo~hSuZ$a$wqme)Bon)_18dKjQwa1!rD4A9`)6!)4z4dtlTmQjNe* z_s-ZO_M`vHxxV|a+sl2mw@2We2+VP>O7#2ELcz(J!pX=L-pE zPTV5@9ALfLX>Cf5p5X2oZU=5(`jM!Y(PtmaIAVTkE_E^VtHXZ*{MFASJEN_apUvX47mHYIxcnU5O|bLwWlY5eI3}WesU0G`%ms)L;KE+93lBr$I3o$@Z<2UoZ8E{ zA@29%QlCBr%`^13N^09aJ82J5bK3{OkIP5s_nXkie7XA9wSaFK+EIo(!yoew=VDzb z#`|bvUx0q&FwdGJd(kJULZ_{|7T0m9`+lkmFVpr_T(-9W z*al(VDJ}!s0{m3QSJpMfNbS`2e!<$BV;UD7&$IBWcZ)I%ns(o>;dczKwfFi%?o<4| zoBL&;Sr42((Q(e>^WjX7?X**jRyL#XJjbVcJdys~w@?G41~WE4?eqqCY-cg>o4DlD z)_)Gqm-tjBwJ-PM4|74E@+ZeLz3^9gp}#}=zV~xE&g$p1vt?ON&-P4Zove564$T$B zW94bR*gbsBi;W+rLbEe8Gl19lF^_T02Bt2^*T5J3i~9Ou+RyeQ9kvPV6zEP!aN82z zu?~fPQNshCV|s?$uIuya)bIb+)AdMKftHD;rK@QG#9J>CF=Ut%qQmU{L$c^)PH04!mYk5qruQr>`jSA2gSq z3f#8OLq03Ky?L=QvC`{z^iA$rGc4D?oWK2B3wxf+I+$(vd?wT7eRgc; z3EFuPyyLPT_1*j0zw$7jjrF7bStH@*DY5=inM@M-9x9t+zX zx~LE4@7A=IV_dGMcBn1Y9Pc&2a;(kvAly#2;r$1^ zCAUC_^FF8r%=!B4W!*Fm$HKEC=!IJgo*v+@RIjsM6#bR+S_fG4gZlT|nqg|@eMv{v zU9UFRZDkDBVS3}L&-dcEqI|67M*mTBB5T00UXs_Ylk%>-c3ED|Zynl?{$hW|Zti_5 zm+>X93waLmH~^SD$MG5WMdCUI_bBbfI)VQ0zu>a(qCN79C;0w#WI=t4dbasZhklg% zoa6(y2OsxI>dw*7Z64O4uFsvoUjVMHnxiWFU&Fr?SJg+yS91~fxB8u zp48WJJ-0_cm*cY!{ZxO{mwV7pCua&j71_ z+PHTk{qQ~IrTWLOa?OV)<{T^2?na^AI>$|bM|+!xKJ5x`jd#v7>WBHezA4tv9HY-p zriJ#StbA@C_fy+IALE*Ng?`mJ)Ox)7+)ta^0KWr%aO3igx@T3cmvc$?0CZ9R)g9OB z_rUXBDa+6C`aE$x_-Y)l^7u0Fr2<^qGvSZ*4(+?2u~s=5PtIhGzY1UWzk{?pRv)^T zduxx;pVT;Hokf3={cz@samYGO)*Z)+f1>Ygdd6d36!$kj0>4)1uiD->fJcAtJdEe& z89!kRqeWgRR|)*pPV`GTpU-kUC+SL-p>qBZ_@x71^$*%bwC|iV`Apn3&iRewQkUK1 z=r7mf(yw~&9%wi2-CyggJ>wvJOLRhA^j`hYUaz8^KXPr&y*lAs)Ggc4Z>Tq)=2HJ0 z^M=T@p}ndH>TS&*oKJ5&-4=TDw;C@Z{rjPh@~!hXzm4`%b?u|T*ADV>ZQa*D*VF!N z=p3u#ihjyirJd(Isg?9&0cR*41U88anWTEmgS40Lb3JY&WTDTU2VPp`W4yY8dvhH7 z`WNGfby?zi@^44e=d#e`xQ=}>=6m=a_Yrl^u`%#xm|xD>Xct=TF4kd$Z3SKQ55nd^ z_hOL46Tqy&IJOV-8TG7J53dE^3UakhVJvyb_VCZ{vHO}~F3%8QQ`q34;9kT(8^2$c zmi~UpXSDmeo`(TnFSI{#O5dPk;yeTMAO;{`eU`fBcn7(UdFyWUaW=5e)8_&{Z(t0M z@_8I%I+*dff4zx&W5dV5x&J&1+S$gBW-dA~ANdReA7NiQNR4Zheg~LGw{J0RKLfvW zuuu2TmvDazm%cIXe@Zlf`Yb>{i+&C2 zN8Hc&yr4cGus*vcG}XS8>zkk(ClCBc&8O|Z=I8EJ@;-SG{=7e$N884CeW0>^EA7Yn zR@FV%)p}0tS2@gsXL;Z`rx4dk{!dw5#ifl@KlEbH_ow-;Ke@TUt$kWgsd8}dSogD^ zgC_20>X_8QnC~fzw=f>pu8y zehc7Hf0d2rt2&G$=ObhCu5l%yO;>&C`3>r~oR#w7+KGAgO{G>*#+&xt`fq)SSJXFiiky4o`dHp?<#|h|zGu0&liYny73E%a zZ7tx@U#e@$C&r<3Qmj|UvfVA)gO79iJT$%gmkuz;s-9iKeDeNmFtv98aP?w0XnOPE zE9j>m`f49fu=XhqK>Hu&pM6~?t&?N0AKUsIe7$*-zHXhUN6>!(x)}eR`^wPu#-lBu zi|ZuadeB8bR`qx<;7f&mqHKOnJ8|DoW6CnXqrZ};?m35PuLt6TSU&egr>}tLVA`F9%zuFlFC%`OMf{je{Fn%Sl=yKY__@T7Yr!8#{P4U#e!hPy zczj|1Y2Xj#{K=%W26HId&ZW)y{fogbDQAVf@A$?O465`l{Sx zeInOX#_D>mzxB>nr7;h{oBd+7xijEz2YJptw{PekX#dACU^f?o|2OyM7@N_SzD*lZ zf7RXFx!%dW_LyTvE9I`2D{uH~9K4(F-eZeHo*}k=_Asyu8IOA+;HjQzyYs*ggO7IM z8O$qyuL;~5tFqFD^+(1h@mGU)zxW&QzXbn$Za2kKW71TvE~JJ{)^yuyjdpsJmG!tPGBs` zu0F3YuYU>nU%AXfFN5bRW!%bYb>MZ}>i(wSqQ6ovl;K?9dqSUmtvt*Jc=ZVvf{*dg zwygiG5Zbrit?#wH&p^LF_#7*9dv(mNyLD~zJmvdm=wcnrw!aMS1!Pd;+_u1O1g4zi zasMCZA&-7lTZsFM8qbe`KI;8?&|ePBw(fy%oF8L-e+X`IYRfSUP?PEK48JeYU))0< zediVM#d=QlMasl|?i*+;`^Q0K+*)!jz&t*lo2l{Jd?@CAGe-ro9gpLz;2-(+g-?aZP{GWGn~rhe7@IwFzWwm(7HZ*(AN}b>iC_L zHQk0b>O6Cd%{20y3qHmXc|6Y->*6uCJPp0`t@_s6p0=3nRvN}dd#BT0&L8b}u&>52 z&tF7&FNXG3c$CX6d}dj?hcVwnE?lc}za_ZUp}D@$j>)i{V$ffJD^u%(=1<0@C%ISl zH-IztB2Rp9JDr(uAFH372c5p7u7~oz3YuDHEq*4QCw`{TnX5Zy_|b)7@`VBRV&)Tr zWgXaWmG$&_sIr#UJnmk;ck}nO{*F_*O0Qlm=HB@9Kiuc}w9|8;f9CJh;`EIJoVOk5 z`v~`W4y{z9a;~GmSLKq|wOGK#dE`mz=i0!}hR62`vc3%Wod%t<)NiV9*W`W}%V2tL z{2O?T5A-wmTX6XtnYuO1)hTnHQ`(!KYAMR6%cZXE3UAbdx>vXg_-eEr_0}3qo4HrL zRgWHl?$teX=K0a?s~@pHYwak=j+PGv``Z-p^G% zx`%N!@alJsoz^%!8?KKrXYyIH&-NXI?M44v^E21bI9ufq?QRadIfgp++|KpT$L9*Z zt5f}g`zP;fyj0(e)sum%55|>ZC-CIBsXk8Q-sjX0+6SNS<1@-5%J*&1=CL|vY8=Fa z4WQo$|LPd)IR6N4LYS8_FsEKStb^x?T&rui)IIZWV}x;Ao0`exxTgVAj_P2nGiX!J z%RMD;MISg1w7Xx+G(Dz<-5-`t6#HzQf1~o)H5~D^7&9R-1h=w zU5B>o+z;mcl)4X6x0Kr&(8m3_bDm8b@p)yfdF~E8?$0aSd}>3+T=k*qiS_;*yY&~y zowluojH}!A_w|i%In2Itxpp;A(YA9QnDuEaC*z$Y=B}^HYshRddZ(VnI;b+;zx4kd z=;OXmd;Bc8Nofsen{}-|cL(6T`{x5nJDbwZ8i{9s@nronw~2XX)FtcHYX$lm-=7EG zn~xkxJH7SpPeK>h-MQZn-HX8+J zKMUUT2-#-xeEtf5%u}Ln9twSL+|cjDao6))SJJLALpf(8vkE#SfzCV%%m@PAKqgG*||8olvzJw9*a)4kJWeCpTz z)Q=h)+-KgzSnBsb@ZJ0~J_|7qJ7Wn?JLRaQjlmi>tl{)C|N5+i_Q2&j?c=mJg?s(= z+1wwWXmkD7ocwC8NN?@Pn3-W?`#IaM&sQ9;`HZy|?QsFJFt3}y<(x0)Q(1kPwy(pt!W(ByMtx!tO- z%Hug~$u_*qe~bl=#eL|wd;**_HGZB7?}J>(B#Z-k|9G;e9reIE zNc6+cLKpp;=gy@|>%|y-zo54c_(;!q>X{YCy&>|K*Q=g;*&TSEd-fyF{Sexn20ZFb zUEgisjsC@&f;^`I9|+@LK;3BpZRkg=7rP(SA1vTg8~FpD`a*q-d1@P&Yw7pL`OIsb z&z;JntyH_ek2bxp`tWPM-&pKNm~{bt)9&0WFQ2JcFD&sh?Ux=GPaCUq?ZEv>&2XBB zJ|nMzYtb5awx>6rv}WYIt+VEwMwxZexT^k|N1Ai*!If)X&f9a4?euPy@0z|+zFuRQ zdzhHd#i+QG5VFU9<-KAsHyOVCUP z_6TijBL^Z!pD!*3emQHo190=kgMn`g{!Zev^%wI+>x*?fG5)R(z4?Ca=O)Iw2wLZ1 z-qKq)s($t)_|^=3vCR?qdh2rLYjIy!&lS4QjBsUTJX`G*)=?Weo4I|Besi5=ka450 zz^kqLJaChqan*JC9<<;ra8r&QAb~ zbtd~Tzg@d$yy}F{*rNZnt(v3zyw04%y^%h^Jj!~Hd^f>2&i>%jKh6m2T=Th)1CRNr zQ8F!z9aDIK@N^(P1-T;F0og1=o`Rt zf7)@*d%pl|W)Iy;!1DR5OjqZ;Ef!TdAkM^S%${vPFHJHLQF_m%ZZU!yJM`u><4tf$0vj_oc>yV3u|HBoPS z_2BQ&NB!fR9{Z72%GIs!so(z2jA!a4Ke12utud|$I}EzGuGOwr03OfT zzXmKRZ zG4aoMaT;@T44xNN?yj%rYs}}j10Ul_9ru$x?b*k#;g8Q5g{cSmS$uoRSgfzc^_OlL z=wh9%=9@oZEP2k3E$iW*;g5Pq4XkxDxJA(FTikoUm3fe#wB_kze!Bsm2j8y1t?gQW zxeNK2FJ--NkIUV*PJE6zkGuEzf%+5uX3d+=N@K83#;biXw^g}+3V8L8rvkIC=>Dzd zvFgYq=%QSztSu)M<27J-)nZN!T`sW#6Ui;RPcNCrm9_t(StDo(L^%G_;9sRN}?KAGv z>ipclW!)Y?mYp=-*TCO9KYdNCL(S`{%X$7S#*sMxAJbmUL(KcT=ceHEcynA+m*shwapioTdEg(0fYsl3cn9NniMeJS zo8x)GbpGKkc>0Tc9*6$PB!}Ft>wXq|ai6cuJ`J7c@g7aI1GJf+zt?%`KV$r{ZfGpt znZE2J`F&xuwGZt)5#;#|V9G{#Tu=M;Ig|FBYY|!BjBC>C|DwOJ?aQI>jic^QV%?)x z54G3WZ;h$11|IFx_RU}7`;hA8$;~joGp9_XuROzPjMhDQcq?lnryr3f3JLut8u;7BggnFF!xl( zV%O#@`l@~_?}f&GFKku}P!*E^4^o_SH;)*JI229r#UW8?Nm@U8}3ma(!P?Ar&K zIscovk9rd4b_MP9>fuc2V}86fZJz;Mi_7-j06yi7X-)HZo&cxst9g)pxL22cIp|}( zvBtZ>1eeG0b`tG-;feNTJ5}EwgFebwd9&_c0&to!_r$XIjul*TVci>RVkm z?60pp|9c4g{4{;8gneeYb(21Lb|mH*wa<@EAXOpILh9%YPCFRz6!%F+3|H@=F?T8w-6tGMd^=mOyGm+F4%>wI4e z*=cj`$2-X6lNnE3@_AUU`;HdaEI$7L>?UZf2j5cKavyUXaP`sWM7QzX{x9Iu{(SZ_ zoMGwQjCDhEt@=JfskdNbncnd(4b5d-=HjKjA?sb%gw2cWUpTab@_8P|vy0|{%FFsk z^cUz-OF!tIen&o)dDSy@atr8tpYtiZn6F6pdg#_>4AsB7R;NIxvD`@fjy%lCcw zRtbE)YqhbY?~MOK=-2C^KNk9^&%OF}EBOB+gE+4Rv=ilEziUAk^;Fo>uRv!E zSef>!pOMbIYBA%gdYH%1f+ow|{btT1q#5k%#k*gLc-wT&alahp@Mh?H{l~M=NBK%$ z^O5bK&#~Aw!e3768`uK+fh0@j!ur=U688g-&xdNP(Y~W!bd3L|tr$PD%*Ma3nfC7` z4*U-Kar-yg_#o{P)0fDz516^0`fB|@=I6HmU2rP}`aRG!&tLtBxtO0n&vg^`%LB7! z{BGzk=d)KY^y%aD0vTKaEY`JZoN)c(`BcaDH)tn>aa4cz6!297+;yn&L)phXq_+Rf zS7_g{#P*%LdFy|Io(WUG<2f5)KZS0!w6=M@>)714PYiJDCab|8>lyJ}wzVtgx(R%7 z-(w%zLG-i2tS85~oX;R-|9B-b$v(H0e$U`CzT38WXxtw;rcv67`mGE*Wh|TV=`*Hi zfBvpoj04iw{fquB*2^8I``;)ZVcJ`a-%kV6mpVr2<9MVu$BgsOYuQQXi?Xf^F0p^@ zHRdz4%^C3Q*UNb_&UyQMC+A*1E5C>Pn*aCu(fE5q)<7NOdC*5W_UikWz{fnI+O_rk zn4eTXpdQC~UhBte0FQORN`D~m=&zK~5zIT5f#)?*KRaps{qRS9kN#^-=*Rgl z+Flm=fuIL*&5we9`Jm@HcgXp+dZWCw$tVx?einQe!*?&2zu_$1D$wQiROiqK`knzU z>Q6lja4Gnl%NR#HOU?#a59xi5`8jB#zn)!u{;+_P?u-{0xKcZTlYj5Ecx(|NCj z-;#E}b|&yWfh)_0`1}*&cnaTUF6d=@xqhnbvww)P+Xx!Z$;No;xw9zGnwx$Wcy1%N zQ+4D(;Bnox=|^a{SB{=jiuK0Y?kd1@Y|8D{nu9ixV^E8JJ83Sb0E_Ws7W4ZIxTDhC zTrW%jChh~@@vYpN$=e%0E&q@061@Q6QUG=pe z1|I!R^$+G98J@?bj=7IBN3HAO98QDZI%1A>;&NR^y_IJYpS}6YhS0AV+HtMTQ=?z2 zvOE>KRlz0spdZSiw*5ugiR&8m<3V_O?R<0Sy^*9l_7&ofUUk^O)|K)!i{+NIJd!ZLW z=kpx*6wcW_h0l1bb2-1C0qeE1VcO9bM0vYUigNI*v(J;v4}AV^P3dyh!*|m3?Y;F5 z`~5U@?}A=mQ|)YP;JfkN=L^YS^8FOrisvGn+o7}>?N*rkjov!L6zHN{{rv;yY5v-) z{|CVz_vg9I@qRYuH+6hBz?XfgG8%iI!u-ECzg?Mr<9@?F4u&q~NBY5>>*U{YdIFyM z{SxG&4Vjyo(+D3zUY@1CFMM~ct}NfR6?0naqww)AOFQMoO`tb#m40_z%a5b>C<$bQ@^QPdZ$6oQ~xV;QInwz*x)!>o|6yJ)aA? zAAXekJm;M6EucNe;GU$y)!WN}*WZP+E|_&9`#a8o(_TJTc@=c%;I6;rd+&P^S@-6Y zdCa$c&LsLfXUZx6PM3Wv)9bmw4_Z&p@xGm6(5ukpIxc;La-0Y4m6<+`!|`gP(yb1S zdnI!<>wLC(DY*ThQ9e~>i@CQZklW7h)BKC?r^6@C-`xBqHfDY5+sr@D#rY2>9_zxc zBWJ9Zv{U805FUM`ZRh!Tp0rK=lIiWowZ0TOYXs8W3`}3M5E(qXVZN5w?ho| zJgPd^;mUIJ9k-L=`77|>!`Cf5r|{ie%@r_m4QvE=v2hR_@5scw1(O?%Mp z7Ul0t-q&%z;yAPZXL+kPzkt?yj`H%m^79;?^_9Q#UA;FJSXa?6{x;RdTr+jh_I!6| zm`~?9mn*Ns0@|^Dw=YEBLxDu9JHnW4-oz z7Wc~ny8>Q$gnKC$=XEk`VjjLbYqUDo4&2xCk?X({_fO_vzBl2PgY7pRl%~EdL2@@taG|o%;-@A715a9cHW4y2?THB9n zp!{OJD(?Zu*N?3;#JniBeIES!!feCzN56MM-^BjdZ>7Bh`Qee!zsObRCB1p>YJpyu zd2WC52bJgaQ)0GZ0J^kfcLyLBDf9`iE+E^zbI+Fz^_TZ2HKi6OaeeGlKw&gK`=yWfv_aNTD*&(|{E9FOvNe?b2)hViOno57!RE@`0yb^&w`1iEM!8}`t9 z##f*3xc?5{GO173xRYdWJ;QOX%V+ejd-wPCJ;XJGYcbc$<(kFk8C-jD{indh&EwjY zYbuv~*Kxg;tIrGjbKLhf<9}yS*f;1m+ErZ(>i}^)(pu**?$-6J^^CQE$90aj@I%_U zpE*~%-G^_Z5`E^8-~E>{p!&CJqvmr_Ua@|E6XS?>_DXd%^TN2l zwFZ1DvM{cjH=1{>Mf}^9PxVHBsGX}Ld(eLN4Fh}*rZs&Nxah}~eXZBr15I2P=Ve_m z>wVVe>gz5A{&ZNU?0fS22DSfJ(O#5atzVzd*qzfV_zd;Q@wfQ&_qCiy^?N(QzZ|sH zzd0V~yLymwwa@QBm!A_j=RE%f@V@}O>Yx1Y2G^TsRGTtCcfVfy^Vx}csX5O?#%2zz zT(^Vn)qzeKCfxw%{vyhy>b&!c&-sv78kc#UZT=2?d~U1${TA3tp`U~K?r+Nc0sS|g zsEgJ%S7ban{~zG|^PHr+KEJx3tJ;xsH;$P9M|t>6BEC1MfAn`)-UnTdSA)=JzhCpQ zskGB8*SA9x{a)1v<8950ts@$*@_xlJr+73tk2&PrEX&vWQS_I&t^E8`-Bn(Hg!eT; z51ikz@J0Qtx_Sxlm}f|P8vHRI$uV~zt-bB5moZ*fJ)6S#d-crv)i`;ucJtw1k*oTH z-u6%JY2Pt*X(!gVa-Zs}^)c+l1_DzhZ3#`R>Jo98tC+Fb9$$zWMCpYdN+T{6zoPX=2n#_OE z--FrXoys2YZt(oS7ki&Uem`Oq_yBEmIYTj5o$7xUJnxwCyGw(#)#-Qb@8kT^`QV@C z_nAh)KgI7e86S4$_nFLjUgr0il#lXm10SasAZTcJ$MdMf1Bf5wugGQ z?mN;1J*;|iBJ_F923fPL*I%c5gPNa zdOk(oJ87@Ce*76|9)h;|1JAvrHK)Bt!MRVe&Aw(h%~^WS!o+&{KG=n}aS(9Vwfafg z8kn8h&*#+CMP=vJt3Ou*i+WP)kMeGP7eA4&(-Ior)KakeKIg^Jmzm(U5Qzu^Jv&z5rVSX^~c{uaAj`qjt z8?ZZ|i~cvpc5a#cAw4rD5|97W8hv}DnDs=j6edtvEKRLofuh9SA(8YbkHuV1- zbk;PiC9K3{tQ#dBKhC}J*mX5VxaXy&k=~$M%<<9>}bP4@G9_!g9QJ%4ac`aX!fy_EZKsyQr#W&z)=8OQz2U3|wUEZN`u1se0A zFDCk22U;JPbsuXw`X=~OUGsbJ-o|D9$$g3TybwBd)p=dP7-Bq9H_a>WgRa_>uvMXp zb#GxiLD!paR9|}p^sCZOwWIiqT>Fo5%Ca0EC!d7>KKQG=Yc8(c#5kyox28S!FttuG z#P_(*nV0ssc`VLZy^Qm#zRIc&hWhsIJ>0?!JX`c8u_02pj+itc4>nFYWqx*n(PG8@DDpzjH_ON?&MBftq zoX_5}tW$k*Tz!st4_cS_E@L_se*Kd*SYg!C2cKt6R|Ds{70;ym?yx-8D|4+b*VN73 zU&&8>6P~5uuXe|tY@nXAem`wAWq;Y%45yf>Ut5JfGyR+;zYn%H@VI}gHu4tW(a*-1 zbU9;+=b5Z!>XWny$C`5_$CmY7U2z`zMZ>)LnF5qH5ru;v{m1Fss{I#!`r%3k{ zuzZff_%-&N&bZ$jr{+Q%_ce8{9|j)%fouH${L%jiI|sVxZ)(haJ@B}{l-B1lF;5ca zGd^or)!!=9eSxX#`oWlwIJXPHWgToMS@h;1;_nUZ*~kCTj&@u9sW5Fb+L18x$tQd0 zw1Zf$t-jbiD*AuD_OxLVs0X=Oth5+UEHm4L;gs-8Wdz&1bvh z?Ic-Q_a1e+oY5AmZ5{(oT(Q*70H< z6>&R48|xXp>moj`OU_c;xDxGpD<5xb&uYHFV@lPe`SNqLMtgM~QvS|Zeoi~le~GJl{73j=eYeWWb0~3~#Lxll z#hOX-v8*snQ~wIZLPUj{wDKb-fD*srF^f zvJCCS^CCHyY^Sy=&FkP_9LLQVe+yr>SJx=7&yCPUJ8~|!fLkuCLkXqLYmLu5*eCrMEOMh^E_mX4^?N4T~E?Zjdytt_=$nj`DKQ~uye*+(%|9KY7eEvFUa&D6IE7zkBc$d$OScmobtk0%x z$2w#5qxO9`H15&reCip`QyI7Rk@M@UC+2khVLmmUtp_~I*12}l`dH77_WMfvq#wa| zH|;I4E5>s#d{MsD?#4Zd-Hn6}QL{pG@VZOgiZvT*-=cbK=i z$!geVt{Ds`dAN_+-}%tSf3VNTvCo&WPyau37WS#Xd=C3`ZM4s`!GDSR*UjLMqWG0sWwFYOZ$G7`qx?DXH);02>vDNU)RDvm-^T3;Qz|+lb;EGPkx`=dhS#FKKX9o zPvQ5;9|1ps-zR?tJntt>m=1m^exE$+S9gNzX zW^z^kt;}j{oCf`?8B5h?{|`X_YF%O>pE=jhbp`odv(Ez;XU$?yc+F>&|HHtRho<&p zjGPE=Ev^N$w;23Hu6fX!8>#0tuDO@rfU#IF5a;im*ZqgjF|VOrf79qc;OuKz?xP-5 zz11G_7@QO94DDCoiFsac9;ALmdr{`A&`y?#?F=sYeTetJLi^f(Y+wGx(8cjpop(GR zg8t69Zphra`JK$O+D%*|_hQq7Ty6iq(8qd&utTAXd6@q7JYdz%wx|8E9J7_)lXN`V zb*x+0^W5@AxMQmOfQRWn)@f?Ieq+zL7{j1(ImecET95DWJ<9tmXgvn;4fp16u9Lrauf60rtq!L3V~^fW`=x%qZ-p(n z{-;AX$n{C?9pfh8W&}OS&j9oJvCF`jGY)~j86I;><@0TP+Sbk7-^Rr}(s+#n#@wj|7yEw#xHj%@w*Vii=ji@I z+lMe8bDc9Zd}7w`eva^AM-In>p&X1`=xcS4uv4M5*X{oe)SW~_{Q9b?Mpp^thi zeX^|}*E$F7Cf1WWtckMw9sSMVKIN!<|LK?VJCQp8*QVUd*YhKN&2XCYalrh2#T}vP zFZ-juRQnwUK9bH+>_GmN@m<=UYy0F`!=6Rxw=N2Qf8kI07yJp|LcenRqXpkB_!jw; z&pFx?4#@ly3P13Rr)?-qQkk$g67d*b1le`4VWp7;}ft7c?kZhy4ky9Lj$EWy8a)1LIM%s;8{15f-3|7bHZ=_7gk z1>Y_B)@1n)YTAY_B))e_WO?%34=ATmdfhYci=l3tB zv~Q{@dtB7r5=Wrpdp4)1LOB z-2b$~4_y5Ggnz6VnYLFRf5CSPzBOI`f7-NXeK3!IR^bPp_!EBhW@J{D&uGDS3%=EoAN^}({php`Kk&q#@W(eJt-L;? z1>Y_B*3$B?+q9R?gs1hYtl?y-c#Gmj_HX|z+`4xP(;9IYeAOHWF;{RV$_<<+>gg>Ymc}-dWg6|f5YZdv2 zoAxRt{;g8@fhYcihkupAU+~?6Z@pIj!bV8vSMc3}Z>=W(7n}BKd3`&p6@K7}KjDc#s}=uK@ZExM z4aiT-E%??N z@>45WBe&mKqwoVy{0YBrGqOgB-v!?-_|}^8v$t9^+h=FZ!Vf(0Cp`VHS^6*dZo#+K zlK<+ay;kXet-=pH@h3d`w^q@=g6|f5Yi;>|*RsRpI zf^V%O|Hqp4I=TJMI)xv2;!k+;uXXmw`~}}F_}04eV?XN_`&qZ}15f-3|KDb0-NIk+ z-GXneCqMbadO1FK)+_wL6Mw=_Y(~~A@vq>!1>ag<{u7$^`X&CYU-*G1{)C^~jI5vi z`)I*;3%<31{Pe#;>3@U54?OWFJo(E8#r_JuTkx$7CI@8w*`)9TPy7i_{M@9(&w}q3d}~wrmv7peX8CkBE&RX}f5J2V zP2ZdKr{KE<-)hUhTGMWq@wW><@Wh|+7c?X7{WE{TcMHC?nf%Cavm(FE3P13~pYX)r z&C2=}e7E3Ro6ArBw|UXu%?m&9#GmlQzs-yN7JRqhTU*F~S<~Jk`^U}}g&%n0Pk83P zMe%bs|{OHf?ivGN=@B>f$34d5K z^12*fMhm`M@U3m+Xa3ui`EOJBfhYciM}FHB{VDiv!MC=RpZs^*V*lF~e&C5e;WutZ zwk`b^e7E3Rua}?r{rVEWUtjovC;o&d{=L4$zk=@;d}}-TdG@hgmTzaf!Vf(0Cp_cd zuB?B-cMHC?z5L|=+n4-v`@#=A@h3d%zkON%g6|f5YX|v>-#e7}y+h##p7;|U|Fc8! zKLy_{_|_Zb|6J34!=8El-%$90C;o*0STpj5vi=3%E%?@s@>7G}F~^tAj)fn1;!k+u z$Bsq+3cg$LtwH(sZQ6q+{~Rp*z!QJMvwnkR{R+NY@U5Z3KUDaK3P13~pYUrpBSXdi z6@0hgTRX{*{_a%tcc;P+Jn<*|a?Qw2o$P-KzFY9Eo#iL~?OgoF&V?U%;!pVDW@P7_ z-;5S~x8Pg5$dCWqrTD*H3P13~pYW{TE@k}+zFY9EUFB!}b}j3-YvBi;_!A!e+qJ}x zg6|f5>y7fGKW{Ah^TxstJn<(y{_~B+e-?bV;9GB!ANjqh$nQ;sA9&(Vc;d&KO8hAJ zZo#*9lOO%xt?2)5g&%n0Pk8c|-Aeva@ZExM?Jht5Yxm;6b}#(E6Mw>^zq=RxE%{mt1>f3B{!^OvUZwxN3P13~pYY^= zdlmaH_-?_sI`aRtX?M!}JB1&3;!pT5HzS>Q=kXVOx8PfQ%TN5+yTp&Z3qSD0pYY_* zdzbYu_-?_s_K~0c_ddD(&OU`7c;ZiZ^1pq``WJk+;9L93kNo#7^WV4d15f-3kNxdi z?62Uv1>f3F{~H^KfBP4H;E6xsssHT%{w)83?-qRP0Qt$E4=DNb0firU;!k+==YXO= z1>Y_B*4yO2plQD?=XagA6@K7}KjGQGzOAf(!FLP3^>+D>XxeWt{`2jHA9&(V_%Aji zZ_oMRXu)?2zV#0I(f@Z8{eMT{2cGy79{zU}{(|ooeCwU^Q$KlUi9hcw{J;}`!k^HL zytAxd!FLP3^)C6@zrU;a-***$;E6xs&uK>9mHq2z!FLP3^=|pMXxi^C@#o!zA9&(V zc;fH7i~SXRx8Pgvk)LP7?Y_B)_dir{`TIiAD#CWe&C5e z;eXnUyf@qTXu)?2zBMfWqfL7_=Xagq!Vf(0C;XIVWH{^RXu)?2zV$x&$-mxL@~`(5 ze&C5e;n_dDuk0TRzFY9E_sh@z`~BHIJMS<2z!QJMuhxvbKkL_M!FLP3b)fv@KL?il z=fJ`bJn<(y@%z9MzYD%w@U0KXkN^5W@n0V({J;}`!sEX`Q1-tC-!1soLGrWzJt*r} z=b*w5Jn<(y{-fYW3%*rnZL|A&_N ze`w(cp7;}f#b)HtJigI_?-qRPF!{0n!;1YMR``J@{)FfG&0$$SqXpkB_|}KyC;ojX zkFWEg!Vf(0Cp_`vLnVF`e7E3Rhs#g?c6iC(4ln$`6Mw>^zlRt7E%~UC`v2jg z{~s>=z!QJMqrV?6`djebf^QumKlSe;ivK^N@B>f$36K9eBJ0;^!FLP3b)@|4|Bo#3 z>&U_nJn<*|f0~gai~I||Tkx$p^7H&_&f#f&J97#@@Wh|+et5< z{W+%a15f-3kNzA}^rzsv1>ZVWe)R9y9G^SK7JlG~KjDdg$Cmh4@ZExM9Vb8e`*9_H z99Q^(C;o&de?6|~U%__^zID9(!%h46(*N;=A9&(Vc=YG^qCW-SE%??)geU(wq2xaW-!1so$K+@K_OTK_KUVmGC;o*0Tr={qY@eeA-!1so$K@w~ z|9Ht?KVJBOC;o&-{vR*$FZgc3w>}|1`Ohax{_}~#4?OWFJoSf9l=?%#cMHCCqWt8q zCuaTVoLKmQC;o)Teorj+Tkze2Z+%jJ@~2Pc_3eDJ@B>f$2~Yj>lO_HZe7E3RC&`cf zo>c7jq{0t8@hALHGjfvW${%V*Px=ne_aAJ!C%xR?m(G)W_MpR=0MAc+na_WQa|WKr z_w1(UVLr>}U9{mj7SCjkaF%6D?mdh1O+FWJ`TJ0wy{hMP?t%~7hCcIoHfSE-^O>{U z=P;B zO@w*g?AAb6&sF>hcs$ox&m$iL9ADGdmoCOn8>6(_d#={=>JNo>rCSj?-(josoXa~; ze}--@m-6yV_vKuk#j5AE^4#+OdU`I5Gv1uh$?qQc{=sHkp6hbXtJA(`cj`G4&hBxa z+x8sfwctIEmHY2_)|0bHtwbaLOW=FYop_cip38C`o-e#D%)|5fcS4uXxF8#Jrk>w& zex9|8@-mL}p1a{3@3?bN+oM~a{dQcQTl{;={cS>f_5IcQJ6Z8OoM)h2zinvSb8Kxs zUDr?Zc@Ll4@_8Mf^0M}WKji*Zw0{wN-=`1H=LkOqxHhAWC?n5VM}2kfXTf(XG*#bx z*UW-`wBzME$=rLztFnd`+GrgM%r(bg2cYp*}yUcFq8du>p=)erq1nC}+V@2=+= z;BMm6v)0#u_guE`3aA6VuPcph{+ds1&fm?epS~O7cR%a<1ylJhuYIdOxv%`*?qB)7 z8*tY(pRG;!!CB1HvxEBNsoX=eM33ruNY6F)%I9uq?}ex8gX>uB;t=TX3G$3<{6YBs z8TfoxOTQTXr|(uc@2>){@k4p5BOAjX&tbY&gW#5;zv@r2&W)X?d=h-Goz~cPAMO1k zj3@mDk$rKI|EJ$|tiNAS&n;dLJ$uWf-}+L=^&i^tH}|SM9M{(1wC$>&bzItqJQsm) z!noxz-?}HX<9kwPL09|vEBMLatDjP~buOOO&wbhF*#EaJ;(k#WhyDD6c0B7}+YvSw zy0~t>k1+!5Z)rTXo#U{wiSzP5r2YoXciElS!`$bXlE+csqt=dZrcKA@RpY@IxYriz z`qj8T1bp0h=;t$xA^K^5Uqe4Kz$2v=yH}21flx8hl(ncYYt=J&(_s^T8Lu`+h+7 zk$D{Ii)(IP^j~yl?6-b8NyfRYvES{V!JO+{)~7A=G{5_9zd;<2Tj(W{YxxoPU*&iB1|HhcAzjU5of&V`6Rc`g1_2Iy$ zL7VNYlVqr$jQK!*hcEyBhW6>YzeHP)a>Y1j>~Re~2!C&0xI$0=u1kFvYendzyv_0I zdYUiAyx#X(d`H5#b~>ML0Y4**Uwv^5e+Pbhn6EOp5cC!2Kd% zHHTJiRd$yG&wDL>0Btc(<7V7{YSZ(;r%g~zx zFVP$5-wu8B2lMb(Sx>XS`Um)%)0*Y+*8Ff++R6J{Wti8{=MXW^a1CAe|8m9kQs2!j zUH1dQ_2z9C(T?k$*Cwxv`{@|ZYwUhA@L0!izE!90pq&`k$)lG1Kiga2GfvigOum|9 zJ_cXRznRDXdSB3edz6c^x4$e~WlS6B#?PP|S670r`c~^wF>cl0Hh2(t9Cv-U);#6L zp7r|`?f*TjPn^f4&`15Kzi07D;N!;0m^PrDnD5s7)cq&VNT46nSL66&VI0*T8;7aq zmv!r;^}Q4RUVZ-wbg^FXY2q+Q*53JI;Mtei2 z{vXX})ZhAB80N+1j8*RTe+u9Ab?y_jr#|GhEBCzXmfAXne#XtW^fNQe!|{9wt^$i}uw(KaF;)9P2*lV&Hd%{^rq6tMqXXpS|{=9L?9Ne%S8{(EU5iTiB<1`m6q8 zI`C-cz47=k@YZi?`)7pl{IO>|ucYU{hCj-WnA(0nd=EFnMIZRBoU;EMAitiD{%FHq z)pza1{q12s6>iO@*Is((Lq5Oc_qjN4(#P*}Eor~%!^O07V`$&~`agl`E6xUfJoC49 zV7_(*pXPJsJIchhe+JmYfnPm6nR%<1`r>bLzYTP@S@%E2ciS{Sv5g&}iS?1{7e59( z@BP)4PNMbw|M+{C=m@qfK99%e0C7I9zt8bw-mEUxSn?z2qn${<67+E&U4L68&)xSY zlN^Q?GH>hn+GEXGphMtfP;9p@l9Zr_mabLy+ELe5t}tGsOA{iwO}0@`*B z7W2L4zjOJn9KX(GeqGnYd{v%>z>Nh}9<{ym!Tkjq;{ZAAkb6<}TD*D2-?(yY$bQnb zk#_ae)|j94d2saiRflc>zKHg!okahqenkIQpAQ`j{Vw3FF`C=?o6NqyoMHL*cdWl0 z%)0La?JVr$QudGkX8*arwCq230e?FCPirR!v;W)$Jo~49|37$${io08_F(^cHuxW~ z|9k@c_Uu2`1ph4i&x66wV*hz5c>dqJe{b*y^ZOn{;OFsv>Gj|j^ZxQJsr@+<+`s;s z_e&oGzZ>tDo(=w&ykELj=AUq0?!UPN{C-Wl83KQL(`lZ{{CuCwZ$r#)&ILca8EGB@ zKiG^m*%$JDsqq8-+lo2=9-f?E4x%&JPTc?92mF=f{MjBk_u7SVDB6YVuz!;KK>8g( zb=3Wjxpnn1)~jN@QQJ`0<32pbr8>@4;Oot|PJ)j!E3}{UA$4T7{iA2*193lWKju$2 z1bSf`Ll^yN&9!y_9_6wgw8lU878mj9o=n?$7TN90n$`@YGMKht5?G zC)oa}#Gfk?zB56;^%TD^W&5WPe;xrpnfUW8c>E!R# zFW|r9YLH9LHCa38mB*iH&pK9>V_g3)z>{qmJ>|acx7=_1U;A|Ps94W(T-!k(?YYJ~ z`^;k+OyhDqtHK}k(VCR|kH2tLzhawR=whBOOnn-w(Px?51znz-bL4lFp{uovnb7~a zN3Zm`#{MdgT8~=|IP1$b!1ce+Mf?{0xN+0Zmb4%JOWiNz+%DUZ|6_SNZQhl};aJDV z6=mYS)m$#l-`E}VRp);nbpHx;>38FhpKfozGOrCddYUuh3&($W@>x9K6q{? z+Fi}lUkBV=x$^rQ?kf1}c>;5kQNFvk5Uy``zvX?c=L1W>2c^F?X4ZVf*lLcY&VGr@ z{J}bO)o*39qX_0xv1@I3cb(n z>ilXuHv;$ha)sA;YTYr$4RyTcD0laav$vjoAo$+=^nTj=Tj;0$zUdEuC0~p#D4*Dm zd2Xz0)LO`~!0!xlD*ikDzVIo{aL64y=r=lp{vJkr_$Tox>-R`{zP&&3$vF5e;?u3A zf5%Ym?K|Ld9lL&_{pj^W5{Hvo_(L+kJ!kb@TX~o9F!fL0~iB zMb_pKseYg=&DHPcyEZ0nGwAg9;tGttgXdxLf2|1erAbIb<)`Dc+Q7c zo!935pEv#R6lk?a^&*bb+>bujhk*z^U}kEmzM zLJx1+|2T&>-^b?KN^+`v&gB&PvQ}F4(0xht6YACbXk(oH0IRY7lhDU~MvQHTzXD(N z?YqJEclxb%fvygiH)I=V=lq@T-{Q(OXmz#ISM|{6d$A7X`JLUMJ&QKYC)C3a^F79! zI5zdln%a{7;WwY_&2tXup{qXSm%yXHbDwev{4riu-*`dKIHdKQLX1DPj(R3=b+?YI z&i9AFuM6(1BYKNFG!0#*aTZO>2wOljwnP!fUKLFO7 zch>bCgeTf-+#k9peHFY>kKAu7d+RYVeyB&@8ztaEu-b{RGgC{>^UouS0Z?i9PJe_`h=Wgs@JpVDf{65=L>|dS&{}lU|-N2v1 z{^d&W*d)LEH_Y#}wQW*-xp9`n$fgFTV^veUpCed&tx? zt@^7okiYd8^~gMDSLlkLO#b~3e7^;}anPIxUr8H->Fkj!G>$X>d)1N|{YB!_c_3`2^<6gODT(0lxXZ^l9JU(wyXTAx|xk)$jJfA{7#uxKq z>9?Y-|1viBA%k4{O8J%suaC+X_5$BbaMACQqwt#_;8_0)p}ifv`s(_apRCXNsrSm) z{eZTh3{C~FAMk9tb6ATj$Ci9P_3!2Tw$MDm)q?J7VE#s^WBV!n#CYr24g;U-4vv{I z(f18pH*sJ4mrnbP`_UNNzeBs@{5|xmLLZ+y`adLfU7dsVH`n}j=yEMyx#e>$KKq@( zg)if`mh*bKey)*qc=xv6n;#gDtznu|t1pLhfg|>fe@>{ZZi7DWukyO=#Ta5;!+EMp zalaAc%4Fyl(|)z1{9Cj6|L!lNZO35VbuU+4mkXd@#COLO^?w0#S7uYV^zo-b)297g z3$%|;n!mMQ_1yI{PTU##@B308537{hFqi8$$kpK*;F<$ZU&>Wt-OD*13Efkn9p_kU z%*WAQ&U0;#_ycY(ZJq=DpOXC4)igi$tYh}<_^iV$>S?#`h0lQ}`ti8mROZ$Yvc3%` zn=wW`oBDIj=#O#K^>%OW|HK=+((^Fx&B>hGrF`bPK<2A)WDDSNpYH!Sm)vPdo-`R6 zeT22?E4W<4n}NB0&d+*Aul*>u826A@+V@%4m;ugpug?ej`A(aI+QG%(&FR#sHf^iJ z_VEIr@%e*mxIQ$|FS}kfhP(fb^Rix|o_(0MT|e8L0Ds)q*{1uq9Q(4IVjNit`!|oS z_FwB>p5xQ6RQ+F2-m{qk?OMpq+J^OZ<)wa`>!{!SAJ(99ayy=1MTVGv!5DFc6$IPAwd=HkE~eYx>B+Ku$)X>nZDzni02m+-$Rz5!o-9u}Tuqf_~Lv}efFk7<0@ zPeuJQKDqAdOdpr}Bke5U=Kr>9E@YmuU!er)~Q*FI1*JGd4e-%l#L)SNAiH^OVrm|Nq?>eD)FI`F(cIyy$1# zcerQYoO}B<|A_gb<2)DKebCf(tv-4?;7pEqqEEi@A5c&*#at z1Hb!R$T;qr{u&zdb?w6EeLk-+mRtjD0+%#j0A@^3E?)wc{ajv0$5m^SKVw|xl2y<4 zDf03Cm6za)^7$9vbMBSf$u);|8e0pTeSL=ZVtuUE*S`up?{V#`lW2W*6xUz>ntkh7 zUaFn@{J|LDdxH;_e)JKs?o#)08w0;9%*VObnv1p^^B!^gm-akIALE2Mo%xv0v2u=; z$GtyeaGrkw9`m?bA3g}UIct@t`$OY*&NZ^0KEU^=C)$;|n|-~X+25-Rz4^F%f@lZ& z-}RwWF59GW{qH=w=4;k==b|V2B%dRAZw@h$OFh#Mn-|r6V~yKmF)#n`;q+o}*3D!7 z8TD#I#u?A|h|?!2yWRPW{tlZ=dwKQy&)||T1y<`v>hIs_v&K(t&|G+2z6NY1=z8PZ z<z#rur^X6^AdG?6}S5J8~F( zT*bbuJ|Ev3{6jn+_x#>%)R*!)cGG{OYR@$j^qKfV z^75;=pUS1byZ{>OW!ivw%EgSySYVDh8$9uA$h`G>#yAzY^Sgw5{U|&sFIC@N6UU{E z)%7vfKf!lnpf(^}zwJJ0A-s-l8kc@vxX*oTa|qZ%`tdghCUY;py6YN8ygKGQ#Fz1; z^K8c6OS%5dyqV+BkDNGfVUm}weqh1A@3o^>($45_;SrJ@9UMj^R>2oM`*|AG{$LjRP8a=HMHRu zp#2zEm9Mh@JeNMz^(}Ef?YpmpuG;a1^z&%wXNZ2PU)=!S`1~u%(7bVRVM3CEl%HC>3_W*Bb!lsR z?z8X8@xSJE?u*BsH6d^8`T;KOrsgL#2lG65%x5{Pkn+7VX+P(7j=6)}$If}#w!XT` zJnpwyAAD1;UzwBoUB7H>)(*^dtdHe2&gX0O4=X}ux^hxa2V(@f>(Qi<9S3#>^PooCB~noAvP%(A~rLx<2aqqu|E9-`9`s za6QEJ64yVuUM^RRRZGJc^WyQiL1NTcKQ({6lJ&V0zPdj4zZ~D6W}Hj>47pLQk5xNb zwHcq^)VyvF;N~iIK8`_Or|s>_XWXZL9h(sTBj7n+*(Y+Pzf$F9}jlD(Pd>Y`tC{eBK@ z*1asxnir_cd8}D}&igX>d-C99N78l~W3~bFz+C4-=M(-KzU%+^p8Sb1s9oq!2lsy3 z%`(q&(Wl%1yxMN99~qx~u57!;oy)l#*K}aFf~)IDjWxfI2JATc(Jw3SdVX?e=;MB3 zE`IJ_+WIM1%*(7xJO-@Vx&GQY`rKN*iFs3=YtGxQD0Irj_y=yuzIHO>Ih8iFqqz66 zh8Xu@bseld^sd7&_k9qqo$j6xU9oqgXUK~uJ>EcH<|<8%=yOCz+cPx#-D@Vx@k2#fG7WL+;ctCbees^|E!tQ zychf-&HU!4;16j=8uj2aoUcCu{EwP$a}fA#n%2a7z>}X%^m*$BO^45czIQfrCSDHy z#b*A*ol^TF6Lb5c6K(&EO?Tox;K?T^{R8|L`2QyTz&%Z8(hA_a&74UKz;D;gpR^44 z5&pmF0Pw$WMkiede*LC9X&!iL%9A$+zbgOV^k(ogn$F~JfZw#4Gx;9yn>X_(?+pG; z{D0F);7@HvC;RMYpQbzcOzbvWhL-WHS?$Z4E#@; zktx@Kzp@#f@)7W-Hr*)=_}?|HsW*b(k^gV{Ecnfu&QzZdf2El-bqe@l{=ex+@Dup| zrX#>}K6UEPz;DI>H@yM;h5UchbKsBW|C`enQio_A2nyVWuyJe;@w8=~D1lHJ$0713$f)GyOF1Z*S&Le+)dopErFq@S8QG z(?1UWOHFtB9PnE;tr_=${~`b1v=jJWHk}#ftUESyW;_jkW;1`rs^GWe|C@XUaZ58g z!#)4Io9>Jw@SSI%|FaJ0Yq5^#pyveKM-8NX)FIgMbHFpq8cFs)>Pe=NZZPe)#F^{V zdeR~I^}WF@LtFE?-1F3*GCHQw?zwZP8bL{uc;QxUA{to=%*suF> zpz11{tNu;u-^m0^K5m(p5Uirzk7neANzd@ z{Lir8tHJ*f`~5liE3n^vz%RyrJ>R?u_PZna&tkt~{qGH?iL#@F!xwM}t2T`#ll-ve@tQ;E5xX zcL6^W`+W%f8rbi*!C#L3s(&BDe$NAcIrjT7_!Y6=&B0H?e(wdp3ikUy;D3VsUJL$* z*zY;uFUEd7Kk-%U_jvHfV880n^Vsk9;IF}cT_1AZsZ+tDcT*>Te;xL#|GWhIb^Sk# z{jLd~-*262eQdpAzk6Z7+TVTH?-Ss8r)1hUz#oVGn#Zq${hkc|IPCZJ;9t-GuZcea z`#l8wSFqnb!0&?nejEI9*ssrZ&&7Vf4*q!T*Y+1-zh{8I2>ZPmJpOz7h2T%det!)9 zH0)RXIv@L88T`Aj-`9aZ5BoKKybJqX7d-QyVgLNU`iv>yyV$SuqeeaR4)7o4|JS|% zeyyf6^S$6d-OQQU0pD)s&wL&{_CIq|@K5mnYvu=iO?Rg8?Uzk!DgEOU{Que|;Q!ck zmf8k9|KGgSMfiukurK4Sxn8zyZM@a@f7$J=;Cky#2h(nU>eGJN$J3tv;=kO-b3FQ+ zNx-WgIe~k9hCI>VWZ%-lx3uvs`TUY}p0B^2ezK3?%rC5$a2>#P5!WVM3%HKr`Z3qB zT;Jfji)#z6>0B>zy^-rIuIIVV=DM2eOs-S8e!}%K*Z*tpT%dKVwm$y8wn%Q9jdaT4K8;Mbs&8`rL_JDj}CjiQLL96Ti=XTfXW0Qd%64(!(e zP#6pW3qS)f3-kr!K`zJw6+mk+67&H-fe*mRKz_%49ass@1Mh+#KstCGOa(83SHX7B z5u6TQ0_t@-me4zFfSEu&l?Lij+3MH) zMoZ1C_v+;3UuiYy-~%$NV_3{)gaFpk8cu1LzO>f$PEh;9)QX zECrpx4xoJJY!f&D)Rk?k$N6A2aE`Kp>*X3S2YdzWgY7&8?DryY4p6_!cE0W3dBE}Z z2ClIwK>f#nV|@fT&z9K_<+$z&j>EZk-1h+GF9xogf#4gUUaflz@GSivP;YHOT~G}u z_apEIa7;bG7eKu^UUjP;)z{m=z7GJ)fn$FSoB@V`!N9fsN8mat4AieART-Hii7*X*TD6pPIm+KtbJAj%2L0X;BN3Jun)=^fq(bBeFO0BMZfx6@!sT= zU!SME7o20AqW*T1Z~rL&zxeSXC&;nA|Kaba(J}Z6`ul&j|6Bv#iSgyb^yke2abpYm z%5Thq_dzX)3GJ)zd3U7b2H$^`WDjggoox0V_nqt6KRidC8s(iMb*n&c4()4j1lphI z-nY=-0G?Bt0q46ENaH^4G3s7I8{?5xhqAJ?RR}%Rh3>xx{xx_S>_qM$cuK(2ow7;L zwjjShax3sWoM&Rw;NSV~N4mdgnb-ub*quTAZ4U+8?j%m=cXWbuEiK*$h?Cw z^Uf@0-D99z-1m+-kriqF&b&_WZP>lg7toIV;~eHWJvN!NI{j}5&qn0zNzh+_ z{xWpqqdm}DK)3JZc+P-+9?!mu^m~ZXjO8f$SWmtd_57}34}1fu*O2zSPy87kZLBhU zV|X4)*}3r9#%l5z&?><57&Zd5>g{j|*{6g+qHj+L`*&*Ov zn|7Hl{(nyT80~W&;QOT1$W)lTzj&McVp7Mojc*{< z@;r}mHG=PSWIjQEoj?0Bm9lB@b_Ayb@3cRnEQ5A9uW<&5`S<2|FQ36T0Xf0n@%k(D zL-4#ppPIl|n&;0c*RE3NS7)9x!9K<~opc#A?j9oRNWVf}3wTF@737`M%c1uoUkh3u z=t^Gw_03*oHf@c3`&=>98Hgfm-=!w781<$37<1l!WyzjoYk}nBdcYWaT?r0Wu*2klZX2>*N^<5h01jirKUtJ3QHt18JN1;1Ee-Gah;8a_6_S%9mwmqA+HrJli7=B z&sYO^UXGktKK)DR`lE_G@1*Y4^t%Q5g#WBVK96%rPT)VclXq=$zYzR3?_>H<2wuO% z?*Nkib1V7L^r0_hzCYZI+tR8u|U`>$k|?Mth$ypI-!ZMzT*N*6F+S=PdHo z&|70t@69<+ai^CW=|_96)vA=O;(6_~Xsk7|`XN{UQk1;@vlL~np^2o`Q$}K2b=X&P z1OItDJd^0d3-B+aPv^sbJ$y~zPx{aM;6In=`Ovq*@4e|!_&JY7`oMoPWn;;wL3@F+ zzVLhpZ!Y7mi++cZuSc0WnG64Fp1Fey{LEw2(^jol23k$ZMk8+w{riAAQ;@X^%pqSH z+B=Lj6`sAw;d~jq-#tY7KET$3`}S99H%`0ml|#T<%@M_7iK}d3_YVo8WK6xVWzf%9bEYU$Bn(+>N}}@SFwopL62)Ps+Llx~k)y zK%^@^X(2N1g618$`%=aH@xRKmzWy$t&3C2D*zz#_DMJ1$Qpccg({FqBeINP?>aQf< ziF(a}{%aoCMn7MHem6Azr{g)%4x7;@|(V-fxg^9CHJ5oSUQ_>X(1u z`Fz?vLf^80d+(3*Z6@;34f`&CqahxN-JHVvS>lAv$mmSI9x~k@j|10)`>uBAx^#|* z(OxHb&x1Y_`AIv}=OyiMDCOGW-;t+JKgc>OM!jk&BO|Ty<x!%cpb&ZQbhY`ZDYGNhsn?MDkI>#)@-ILe4xfH77pS8W^m#C;vcDx= z4bKL6D^TY#a4Pu~(DbqHsi%=&L*Lc4ae;gGQ{gaZ8sUV&FLghKT-0+w_*?ebxGzeQe!DCZF5T?pNE+yZDHuJ~+ZWUa=AR>ye?3o`5$U`!serkFvoa8OLa6{yxSvmPWa2@P5jT8}G>PLn+$U z4nHfM_)calGTrlB6WXeFIDzzCVElU-2lJVyaoDE-w&pmWCJo;$&k{aa8Q@0}HoCLr7bDX?-)c>ik-K3N0AAXA% zCWm;&cYK^ZRga1Y3orE0M z=v(+TebX`cCIQ#z9?D*W?@QoW(Z0Ig^hr6ub$vE6ljnw!j7gn37X5A>a@uv&gj(iu=b)>H$I|W{2)Kv0Gdozx3zV+b+?G1kt z>=*UnZHN4x)VrH8?V}%G!21C8HjrLN`T>~4eA|xuT5{fYkx$N>ef+I?L(VVu=Do!x z+R@&e+l{OpV;247Fm!Si?VShz)udYlJXc1UOUf=F-<|XqdxOvTJ2`I)$UAS^|A~H5 zzqN<*BaCANZM_9-8N#1$;gw)u>dGqXX2Ygj|c3$5j)kkUrn`k?E-t#*Y z>$_*Gi<;Hht{3Kw7$Wig@iAmhgx7ZZL+eZG{G`kLSEcpY2Cua1G_GH_loayxYu(jE81S=lZ#uv@*1G+MNwO@RQi*nLK+(^&V(J zJ_p)~_GZ70B_{#>dLDY!-r69?{mpp5yPZ3sw}!6YX$Rf}p3^%ccP-_{hqofD3(vE7 z_HM{MdOG#W!h4iw=PjE$!MxF@H{jLYJin+{ZQ@GOx3~{VC$FEpi*n;M=j|Tig@=iS zJy*77EYG2L-ih&EF*o>bEGNZx>U{SW&p)RV=N{l$KUo{T^3;0(Su?1&AG+(^@jpWT zDQLAR(|=~ddzdokZB9HfZ-vwHg1f6%C~E?y!h0@#IMLobr+b!FZgf3uxV~viq>lx?>@Jx6&<+s4Azs~|ULyv%E@EVVMRzFVt2CU7lJTC^{Q|8^- z*YNG)8G8ug(w}&K7=C4G%kHUZl(RPn=k$)0dp>xGc4yP?{mfSb;I_pRIG5nIY;6CZv@|@TYo~7^%L8g0vzIY7f50QG$`4`IDQtmyc z@yI0lWn4d(^2(Im3$n;}hvr@47~sCq1Dbb8QDpu^s{Rfl&;9sSu${bdYz{b1SuQ;H z0>A59!n1c;`qS0qx4~P1I-UorE5 zz3`NyUM70*j%`ykxKjRTs-U{z8=Yx18 zb0uZZAltq8Y;0u)Z8ktoG3ZlB%OLAU`k?PVhrD}YQP7RDDWsm0@1ftu|L*O6vvmyK za>&u&=`a2UTx(-VJCd>{emNhw&sMZWan z&@*YvUIcc?9@v{U7r}EAZTWBT zINpz_?>7jZx%_6O5&S1JX74_RF(;=&Uk_gc=yj>@eeSo^UjzMX=p~?Qhj&5qeyL!49?S9QL8aJyHeujqSAcdgQUUU<|I=q#eFZ znR|iz;|BVnU3+(+9lk{!?bQ3GPsu+R=iJBo_>OY#%gWNPPUO8m>Q39OC^ue?pj+>i z9z)kn>CY0*bLq^%WcVsFC!Oer^R$osN&8&Pvp(fG`9q}M2kIj#k=JMG>x@-CWqnoS zxheTmqrBJS+4xR7ypEJ_PdNA23C^R{p)E&-K1BJ+bNW*F7BZGboC(TOwvPUdWZc@} z1fVZ&4;}|i8Am60K4u(+siPmPK;H9B1#Iv8g7AJlYS|~{Xjd^PK+6}L4A~GX~%aC`8@dMQ~qc4KZEpp zXe*FYk~Q5AIr=N(7wj;wnQ5d#`?PKEeznPM@Ob}s7xtqaHmCeVJKTXh?U28Fj6bV` zkD3tCw|QQ1J>EqA7dvErlu-=XrGT-bHegKhBl%e%J09f@Xaf4pVE@RAyu(_VhWxGQ zxeoHnqG#8mF}nTKZpQGe9lB@P?{eg)LMyl*K7wrRa1nHE#`r9c{9fp;QEje1deT2= zhmVr~jlRH5urP;ft-4sT_6_EYY?{VC|~Tk_iBWyo_)6ah!bH-z>$W!@ho?#ui; z9y!51*bm6iURKAWu|t$sU=1Yq!?n~qoqFz7^T1`~hrnw;{y>@U-n!C;=e|1B-3wja z>YLmT-;YK(qep_c|048P1D=)e8~-mQuN~He*LY2T(3|}C@SVh5z6sA_cuIq90e^0= zX0VM|D&^Cl?V+qVFxGz$+70v#KOD@l?;APC1h!TmnH7+I6VKiw7}Gnav=#h4Oy}n+ zVs+1NS5VLMUMKQbQ*R$-)4_AJ>)z+S=zG7$@LUB}ke?fmVmqnyKaY2$?sMwJHJ^BQ zQ-*r%*TFlt^3?ZUei3zDk0Z#pqEFtJm7`zn;dL!)yMxi)OrEtvW98M#50$B z@I1=4(a%@Od$*}#OJ;Q{iUF^}3K6BW(rR{%i3vnZEa{g}pgvyWnX`y%u0D z_1Z!6yg-2$e;%bE_} zNg9u&kv|0OD1A2`Y)Bh*;kzBUe)~ZC8lFC2C$fek^GxbJ%ku<~^q;4}*NSrA`~5(< z=ZU8ozwiBg-*67{JWq6_FOO1hFL;SM#>m>D=Mnv<>n0h;ct=w+9$`-=zC)Hixhw52 zKqlknUMunaOCpZ(?>poKcCZ$@{#3egjNd)fgnuLS#zp_}zJc%NgY$&@z^m{ZOZ^1D z@BPk%PrrO2_4L24C)eaL(){;+=)u43z}bR+{+Ti8Pc|SY5yu!C^0)Jma|ZOa$ZiJo zpZaRg6RXIpM|EMmKHEGxGLCr;o#~6`gBs-bLsNgAMWz+ydqsFhQzsqyJ4hXi^V@*D z>*6HnZbXfFU*PDk1pLG3(5Ee-tfK1de?s% zhiLm}AYPpiFW=CbzY&)26VZevbFGgKh*^!?mu&bJ=^nP(tm2F`cLa!Oud5s za|re7Q2sFe@qF8oyl1E3v^fZx>*BN0(agj7JkDiP${zt$(Q|+3+EyFZQ9H^!FC_0j zovYoHyUxnTBf-73{>*QeHq$QtGd7g+2Y_?*7^!EyF7y){2y{!_6~sZVH{%iZqSz?L zZS1)W8J^XrkoUI{?o-deQ=fMA*Z85p$5$q=-_Z}hiCq7!UFB3}jIPlb<=(C7Kixmv zUybivhrzs2ui(Bn4q2PwF{bKD*>%WsJ?ir|LQ{XU!9eJqby&Zgvsm}=dM>|`@x9I6 zk^QO^lME)R{0#ERsh zx9_R*Ecrgj@ZGNO8}x_zfzP171HB^jZ0MeWzM_4{T#J0t-a0~i86@rP3-TXO?z-l8 z415d1H*oY{yU+(|gNgZR04?r&Y zPpI!XL|b}{w&Yz39w9%NvL2MBaCUd@zX!>9Mcwz}c@;97!)t8&E+|SKJqETlin59D z7@wR%d+OWsp7uWpy63%{NxkbfUNFAz4$YWg8K^~mKD4dymt@|KBWFGIHNZP$&O0&J z$kpVHj(ptz-FYa-@;CKHV z0DTPekpq1%H188XA%6(k`;@unJu^Aqn@QuO!zka34CCBhJWoJw51w~|QRJOx=WH=) zaPPv{Tz|p63w2M0&+nJq*GfT`-*cRQ_t$SRIzf9K+ELd1H{@O4j!U2Y3D0BV3B7+y zThC+H`Wxpz>1VHjr!#fX(=X>e*G3cg*TJg~xr)4Nbp`ar@Yg2o1}%fK{-7&)36EzP?>~=$9^|Dt@Aty91-OTofVPD6Xgr!ZhHq+`!`mcf zB=c%qog3VD3?-kQHj=fX9nSvMxnUu4JU4s{ymyH(KL?O^h&~nKxg&Kt@LbRi7tyA^ zliwtO=rOn|L|ZGbHOg@m*(K(&E(dorkfpc9^uU0nkc-HPEL* zPo5i6c^*rDj3yN%R#?~)H8pDXoRy(B)FHlpE@5v*A53# z$M*%UOMR7hhdsd;?mCG1{_(x_9%#nd2jTHdb(Ava$+LA4`nn3gV;o}K(FrsrzmIvJPPzgv?->S?c4+_lQ+_(B@4089k9Isafd5YTW`n}yXHafzufJ#o zk9K<=I1Ftx<@L$CHa63*HJ})I<3{giwxJ)-StH=pw_VLzbnh?t-R^bpYllmi-#-WS z6Ym2vk*yterXL0E(7ExB_EG3ZzmcK?fV&%V`ZyCLP?Q>g2y(DXU(hx(ve z(6@pZdDdvKAHGZg zy&71i?Kmc56x-LAxxcv&b|POC9?$Q_%C5hS;6>_=1jgazpnE1dgdAm6WsPW`)mYC> z>C0yL27?3So$CiEn}BTfvxxlr)Lo8z?~N8CJNX`BCC{^&FYWL&>feH%E`ZlKz&OQs z)~=ONXiwUdKD(D|hs)`! z^O8KjyXSZ(n6$&)aqhS{C!Py!ICZwfqV=}V;Q#eVzl^CVW8=9Q?OLfqa+^H4thb)Ig|#Py?X`LJfo(2sIFDAk;vp zflvdX20{&l8VEHIY9Q1=sDV%ep$0+?gc=An5NaUQK&XLG1EB_f#~Mft{td6lu8c$) z;WuV}3-EKtMEc~2M7ljc{T+`a>{_USPy?X`LJfo(2sIFDAk;vpflvdX20{&l8VEHI zY9Q1=sDV%ep$0+?gc=An5NaUQK&XLG1EB^&4TKu_&(*+P!7u;$SI4q4uWjD4EQ$~n zTK2oSOP`EEL-V?4bnD)uci-NFdiU!)u*7Wx2X?#l;`*J3^zM5}B&~3?@GpuhLhd9` z19``fA0N@VX}jiG!JicqDrXd{9ElXk>N2Ryg~5O82LG)W{I@>UtP<4l4-k}$ zrc}u!O_1BP%f7aGtHzz1w99UEZS&UI!QU$=dD(+f>=_Ui(bnn?Y_;2eTJ$@~=QR}S6fhJ0p zQQ#>FDX^7looDUNt@HBxLcPTQ?k=53nS-|JPqb?nNjc7+b&W*FMI!g~iHw^PDG?d} zEy@Up$N85WBb1Eq6FI(whA56k{)m9^zo7;~4g7mFFs@|ep1|b7|Ara}H4thb)Ig|# oPy?X`LJfo(2sQBg)xg*VkqwavgznYz)8p%pZ>Y!Z!||X08%fu4h5!Hn literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest1.vmp.exe b/refbuilds/vmptest1.vmp.exe new file mode 100644 index 0000000000000000000000000000000000000000..e2ca3a93ff547c6b7745a57583f84bd8941bf0f3 GIT binary patch literal 23552 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\DZdv5dwquHF>3ap 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 B`0fAz literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest1.vmp.exe.i64 b/refbuilds/vmptest1.vmp.exe.i64 new file mode 100644 index 0000000000000000000000000000000000000000..b79a46319174d3f331236a357b8666f645c72407 GIT binary patch literal 266794 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

e-?kd*01z$Cj1HiLCgu?!MXo7LFea& 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 literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest3.vmp.exe.i64 b/refbuilds/vmptest3.vmp.exe.i64 new file mode 100644 index 0000000000000000000000000000000000000000..af4cc6602c44eed109e82fa45349b8a265db5881 GIT binary patch literal 242218 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 literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest4.vmp.exe.i64 b/refbuilds/vmptest4.vmp.exe.i64 new file mode 100644 index 0000000000000000000000000000000000000000..83c2d0bb5e7ebcddb605ef8360b2ea2e7d157d45 GIT binary patch literal 217621 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

xr`T75!1fCDC`moF6pRBYiZYJ&x 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 literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest6.vmp.exe b/refbuilds/vmptest6.vmp.exe new file mode 100644 index 0000000000000000000000000000000000000000..36b105a72d8be01cf53c9ed669d6821d1ceece9a GIT binary patch literal 25088 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

VagyqLy^&{L_^sq`&)>q)iU)o2iLDr9a-FwaA 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 literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest7.vmp.exe b/refbuilds/vmptest7.vmp.exe new file mode 100644 index 0000000000000000000000000000000000000000..3e321fba9b35aa8b5a0e0bd9ca255c5cd12eab56 GIT binary patch literal 20480 zcmeIadsvKX`!_!A%kH*Gwh=28LM@wBYuSyIi9|>?*``}jqC&`06ryahORKQNk`>E7 zN@b>0Q)n}VLR2cQ>`KivLpAT`n(2O?^*qP#_rC9OeBVF5@9{o!n0s^G*XG=Q&hxzP z(d;Ehcv?IjPa9vQlE=G;GyP0e9slPC+PB-_)NZ`n22Y0E({Oq+WPz7=fXPOGzqS6W zd`&!7ZP?%!XtLVV#DDV!6YmWs)91`L@%3BdIl61tPNp4GOLup!xbfEW5ceH^)aUSZ z+z&q*dq{m=tGb`(?cqiHa1_n8=keC;)#ZiqHm&5^8hAr_oi)1+en(|>-Z(tcZfH`2%6xS<1i)9~$t@83QvRqJ~C_<3~jegqFG zeNKPtgv+UPKK}rJbW_Xj94=@-XMF$mnX2mgw}$^*{+A^{a#rwoq!p5m=uX@malKxTBff9B1fK7WHEd+)R!H~0q}dWHO;b=!x+mEF(ot^uC@0q!e;JpKKGwz~)TZT9!@ zbock%=ojD)unF`G2y_pcFwT9Rr;q2V08g$BfVH|~0Saw@|IDyk;6yQzVxtNtO?@}0 zo|~vKn8QTMZ!_(q!bsEY+qbV-y%zUthVXb4`bGz-F_FV`4kIaWt)$N>c9~jP> zDvuWeLOR-hq-`3ynmpZ}niMYo`+cZ<@TI)|=kx!b1SZ-lQx>%xu@6e$bz0l#(#{cD zVXLJ<(@o7H)?YZJ^e`@-bY}d!-%NVs+=$R`vEW_nHsJRK&b@7IUXR?RDym7OnuH~oW zrN&R5RO-I?rPqQD@rNxp^9`9ElH=zdynoW;)atXpw4Re+8!~8%%c>*&Yh6K?yEg^;sshRztz0zSS4($?i^M43d`y0h3TJWtF*t;bJ!89ozC8{{&GJeG59z z)DlEI6hx(&Y8~ADI*xrXV#Gq0N&ZIa1|g)n^2jzI2+LgjhMCFlm@5YJ*XTa5=%Exb$@yp& zHfrm)IUelt(B|_*9l0Qs^y#BClgeeHLb;O$QC6{ZsboE51PuUojMof*B492S5&zC; zn*|;z4JXiHu7F7v@#nH7MJ$ui#9t_-{Alo9ouVu+?(VesXF=4si%%-=++`A4mE$vk zI0_~sQ^1uQpgG|c%V&}*n7C}IV?;Jvk~5dxS0IQ=z8h}WED&W6CxetqWq1pOp-sNG zE0yHiKpxMH%o_mtCF?5Wyt2@5+J9}kF25X6m|kw_5>|ydYeQPSrLr=qLM{~RDtK98 zU*re0ZP@US3Mzd~vJg;BIap={?x?!*!6x|wGdo3HFg@UL+=e-jXTamRuuLAyPs{Sf z*-a1?X?n}X--YG3l(PJYk4#Ks8U$Ry0^OjuAc2!gdN*;gp-TXw*n7ydNl`#syYZ0Pp~wbX7%W)GGANpCO~ zM|#5=m`MB zSZkXKL?84tN@OohzAu$S?*(l5qmZ_

hHtcg0%W@I?TtyQUnKW?MyUk+KwL~WSR zOc2`6bTw&2e|^%9N?he})9HYTkPi_9GDvUGL+2TVW=ildoS{FoN~Pok2zMj1`eMc` z9a)Yu3(oq%uprFUSVlG9uP{R%Kw>QTaL}!BQ)OuZ^SPPC{B#7Fgu|Kmt zUl4Vq|EYNuc?yl&)eTAqyZaB8Ix8Yz&j|CWf_b zWfDHh9)6)pWg@>Ir={9BOTA?bW}YB8$Yb{OhVnoGkMy7-D=_8pTAuM;`Aq7kPEJwR zEC$@`EGQ8x$L9h#1yOq@7!OWnlEh5v`(A$oLBth4^TcuACm^5{SPIx??q_qbUQ(eD z<#b~W+7Ns~Klhv8V-PE9>C6-`X`ciUwe&i)J>C3bJ=>DAxv|F^LFh-iz77>dGW3 zSc4LQMh+X=q=*$nG)V{W)Gn5l!@Lws zQXWnOKr9t7>5pYaOlo5nVYaSSR(l@ehH(EUAf8wd6)}HNYyrJe=D@oOX<#CwAYnmC z8B3$HJ&3s~vBJXy84yrEEJtdS1r+Q=1mBcOFx4V@rX_X7Wc9ddQwW&U&pr5V^11AT z`KkQ5#0_dz>F6yr7iA8fSL%=<;F3J0AaI8|j8Z67D9CO!QeUG*FxiK3^yUg~T*ys0 z2uY_F<_SksIoL5gkjly>Re)gThzP+uQgFC-7_^Ew2lSwx;16$oM5}sg`=P$jFGgm4N1X24c(V)Qaw_P!;N+Gb#CO2TS>a1Wo2m%cr zSQ3&W=vJw5Kv$^HMXEq_;B*kVL?IOFFb8)b+P4d(LZKGLJE>G|k);l%g)Kn1v~{b# zw>8B{Vfd{YWFhsD3@l7;KvZgp*JzRDUgDEGVk>N6LB^io}`#0ximC)SjI}7fZJH_^$#Q5d_v{A>aEDAw>`gQK|r}g3?Zb zA)E@2`sXJ2FDawm8ny45@Tirnl+r+~KqWlq@t+oDV5^d>zyfkMhAgJ^&~dhOoP-`8 z$)WpSOmL+El%UUyDJDRly>XTm9nd7!7)7c>$O;gAB?63Lc~0)EC2@nQNL&Q`b(9{mSP!#b{?!l zLR2ol8-~Q364KZ}Ev&CNOw61R!a8(GFh%`^I0*B!=d=8MkNGq;%gHvByd=G#Q^JE^ z#*rZOV8Z@F<bz+jMnb>SM=1ex*QcNdnigOgb8lr$* zCqJ4`Ex0$exy}-i6vQm{BZ~s30`yt5q3NC=@w(JT8*= zP52d$FMQRSxL-S8DA5#(^@KTkl4lr#sN7xvsL$*gl7EP1mvV*8cQ(8joM@68AmM;6 z(Sr|@!5l+pX*iv&i>6j&O5|sHdlsZov)_XoY1k8rVy|KPOymR58K?FhKKh`LxdZa& zsc;+Kt|`kN5z;=*ri|7WT_7YRG2Svvr~wta5np(;8(E7Zo!pGBl+lbs7N#QiI?_0X zHq#i7L^KLc!HQn%AKc6fQQig*`eYoMNH!Qzfj~8l7fSI#WQ3t@vD2m2WpcSfArki` zEm)SGgFuB!ad**`oWh%H@)Nf+{7QxuZZ3RI#9DR!41nB83= zClOz<_;re+J3yC>5}~;p?PyW8p9rh;&`X~=ycI&iWHcV6z8f!qa5qBSR8-$#Gz$^v zOIfCXKTp6U(U8}u-cVL%d@#`3oI%*lPwV= za{dG~Bx505K}j)_R4mI$!^oF{h>zfq#xWsc-~*LR6>yZE%W;k)Lm^?f)C*`C#?pm+$)L7`Mi$%R zQ^9+QgiL6lJw2)2SwhJwGa5$4;z`rjYDCVxnIRtsg41eM`GM4!$p;v#dz0QSeae6qCBWMJlYgSTC#t z29Nt4p zOhLa3S%IS)xrY!)LctjgkgXIarc(-;4AHQd?5RBjw1i|XG#EhV4XmiL3pIZQS&BZa zGGCG-Z!b_42Ysmw20-A@PX)v+pn!grPNxt4}v7VKCg*t;kSWQLH)$bD0##L7A#Ghim?qhT z;sbeDE6u6MBjkpm-$Sm93GS%4ZQiT*Us{P2^c2;oNVrZ*M^g&FP>d#&(R4wv!j`7o zGPrk1!E$*#IS$K_ARDsBv`tq8+uu&@>osuh=Xc2#@Q`ErCdOBLw*e!Xqn6=+Ww|X8sV)tY^lktM@jyrht z{b|$rOS7nf*;CRWQJxDEsRXXN5g)8CRnP=cmpuKVHp9zMKNC3<3{#>1hC2m&P}>Gt zHc&};5;dGZVZW-nPEsIIIU;NOSeAQAN?ox#84hDZXw?Jb%)Z5#p?g75j+_n6A7v+q zsFuMcQs3+C6$@*%1yP5EAV?t?UTi$y%uu>?j&V^j0Nz9aw=o>F=7fR$-;sd%g!!?vjr50tRkm^|(W#l}S%<)WSZ!qrR?6knu zr1LdX0H?K8!b1g3;H6<@Vc8a0HjmjDS$2*hMoN5X8FYlsRRo|zEkwpsn=gT#P>UXq zGu2Q6Y=zVV2WUZ2qi35V%YGD3`rv6Cc?D^vV3ouKYohf(Ac#zWQGM2jxo8OB7(uc3O1?1TAS$X{5KIh_M@mmv?z zXO)@Aw5gD2=ABk*Q6`9rE;U{F0!UuWAO&YjBt>H8Yz`4nQJsK`Lj+A43lT-%qT-*Y zaAQky=dmTox$YyODnK=wO7!FCAoASRSY zpiP!L3$pA)&e8ybMwKbVz{4mlvWHfJP-S~?@j}6*BjzuDXEi{J4}}~)cEnM+@m-M= zRA|#eMf6$+*V)?2@%Nw+g!)>M*r?>0y6T`40}<|HPoMy)1n@2OvmV_NF0PmxQNV>`ND`13%~AzBJys~uGmK&eX5g2efag4RgLH!7W&j7pS8Ghw&;TiIg@=9uuGB~r-q z2_=u{eqcr!Y9!%%Z4^l+L@3f>MMM+zGcA)?Wgf5M0IKOcR-+s>QdAfFaXO3rpjweg z2YcR!{4fkq{mQ#EUOLrtAbMW z$t5@zG#ApE4&Zq$%N~NQIL%OnYfq0zX&8(#wYnQZog9fNbq`I_D_I>G%U~|5T&55g zWGy{xqR2^=>=bo+{*7FBz_L^o@vO@BH@1tV3R#&2A)8@TZbSl~kNC1eVEqg^Uc$$C z(i3I~bS%@CG_%ZIU9t=~=RzuwOQFOk?r>Pidr|}F2&o^#Mym|1q@MXL6Q+jUA)0)3 z!b8YkArJ|Bk@;#cl`@A1!Bmh**HDme$-X%A$~79yG|77OC=v=rN!HFOW$p`^<3boO z-H||?ORX}XW@tdb)qRREjdeJoe)qQ6DflDC>AY(hpV9OXIwCmw2E;d&+(AiT@JFrhdz;mVA|J`#se1$ z$X|&RZ1`7d z3i>1i6wxtH07-G=JVmDh3YQX4ArS)^6@t)j?|wR^sjw=O+vJ9Pdnq3msbIs!+WB~| zqK6V4)5&bxq*htP4$QleG^m-1hz!P*LYnY*AEZpu7fFM9?;@!bdpFGeES5jK6yA9S zK-HdWQT0#Hgjc;owZNRsf@8`<-Z{ZDk-}g{g8F3GBj%zAD@x&)sEWF^Wb2F_Q)E>p zD~4P46ER0cC?N3mNG>a4i}P%9u_KAii$fIo0H%+qOOijR1_Iy%qy##OBl7`Hf)F{(Kagq-?y^R*(l! zp30^7!kDOHn`zM9O5-CfoB0c9`bED?Nbg$e<)+dHZMKdsfV$*LT0+tKP)w}gxw5C& z&IG5}oZUZbP|c5&>2?v|>&`DTsz>7dR6EwP2HPj9wBjle5yOxtekM{CL{TK~NNABc zV&hRJvR4C1Nb`zzVf#Zt#Cy4%da*vKsR4C#fD1WC4X_-G6K@zG(STt07KJn~lYFBu zo8$<C!G%Y5yY?{$aQPR%F0c(*=P>-3lhX zLC~XJfS@+ z#n}l+%FbbE96163x)D175ORSan)^%!NfeZ1Si4Mv5We&w-GAJyx-3R&6t>+{K_bQVu zp~97bHVjpFCc7w_h z86z=;J_%LDwNE%=l}~iPCq`9Vkv`ONQ?Qb(c>fb54sRFp)9TF*zo1nP-yNmUlm0;i z;t^8?)a({xKC%yHrJ7WgYK?<%;|L!>PISShDyZw=odm5^TXKA+(X|vI-)2Z-6jE8% zVPtQ01ED}|@}vXD55r<%Y)&*Dbj39I-2gRvStdXvA&W{SQ$WL_8}(1>d@(dMzJ<`~ zn;Au~mU0Ck=cGth3{cq9mqM%NCUMtX#(xk00(0|(nt>mpn!a*1|Os{ z$J?+&L3pz|<2XtIXd)B=1APTGr>{Ve1qmP4sn2hhs?R?xSD#B)sn4U=tIxih)aRs7 z^?7{9xYr%+-#hw!^;AE~oc@Aw>w_ovApE>%DcJLj?s@pk!xN%(junzuSu2J_}({aCg zrTU(u!`fec-=~94?jCuiO8%U@IXXFc_v(1w8l>)bqC<{nR;%wh`Eu)Vbf$Iah3n7B zm(ve7j*}PH&gp}@=lJB-yWb)IH63(u^5@zIb@0jY#nHp@y*E%zH+Sab&B=-D$F0Y$ zle$bjj+1w<4*oegar|*|wA-!j@7OVpTZglAjz3Pm96g+Vx##OT=HciV&|ycpzUukc zc&X2vA93?>baDFR@7Cc*oSZm4aDK}9JBQbtJ#pi>^*Q-)d~kemIK=ta zzvCMx56(|GIys!;{D#9rPHvnXadyJ_4M$&L2cB_y;`rm_#Mw1RHz!xFos$D+FPt54 z^mDk#@yY3#ql=RZ*N>AUXU7~4aO-n&KTRNLlFMXd-P;)9 z{3B8p{B}!m&{f;EFeL9VeybSLcoQ$YP%;oP(g>6k^}6VUT{}jYZ&HQVpy=DZ99^W+ zF#3}!&G2$`s@0?~T6Vm^2%1H{dyNaa>7Sm>#6HAE!$DnnSb=pJe(HmCPlIM$G{2LB zI1=|9cXV&O8!fW&g9X98LACuiA!*^Y6sbyyA*i)fsoRG)=zj@`lrT?^5sGQ4q7PCu z@wz8@r_(ngqQ!?LY?ZHssK{TbfUDIYBjYYA=ZZZGJC_aDRn2`Jrm2Iu{- z7gS-971HV?C!=4gGuU?(Amlyxp}V``R4UlZM(KE0*QOairDFE@(&Qc+Bd=&Orw2ik zq)K(mEXpI@oktP<1>e_vHzq!7E-Nb2qDgU8I8*Euds&WiN9~^iC%S* zJcmZAweYjhJLiJin0e|0|A-t zyD0)D?L)`jUi#}(*tThNWJDjal`y1HpvCb^UcOzIHtFBz#gw|FHg)Gu=LcPcUuZq1!wqd z7}06YbZ!Ef`9*IT7q zb*fruI@#k!;GieKsxbjS095w1n?%e+S&KHR%>eammJ-^9G^&vaU5H`b!pi5|0(y!$PCJ}08*UB5R2 zP8QW~n>Auh`z~_k%3rr91eYHx9A)w0VAM9#Uwce-8Pk3?^~~tRxmx|SyG6M59$36+ zufvt*O*4C*%DjGcZja+Vp67ph7%EzO+Bi$=Wm@j*1*_A74`l8gbpGP9W1q$k_$6a; zXqWt-lEg*1%M_k^FRRjD7di46qgC63ZTfUA+oKn0P+E8@Wk~LzL4_w9f8Sc~+I9b& zFHduw;d65lo1@h`r;J2B_Livgt< zhIS^M1+UkCVcPFKJv?D*y!WZ|cGe$Tu8ePNxUz0w(*?&<^G3Ue8%m}M1p9ff<94Ty zSseD^W5U#dOZtCn2pP5Mr?KOY%@!v%TR*kFoBDRinPYB7Gavo(Zs(0jbDnB#eUZ2+ z`L4(4Eq6m!M*DkN-H46Ut2kQ}Is21=h3t01+M4=>o%Da|`hEBIiM?u0&Khcb__@)z zHMKq)uJ1oHC`CGH&(iU4?wYOtDY<&~u%T;SUTeAWNhj%~)tLs_mF9bFjk#;2@o&{H z+LxUhkbJU;HFTbJGxct$c8O(DnH%euCo8!!9bzq+n(_?usUv!5|yWH5U(aZJF?_Uf)KC#v7C z_g|`)HG9+*kGjW~wjMIh-uGreebK9ZE5@%|`%CKbS0e*WYbDPP{}Ni>w`_CXsMu8v zKNggbp~_49OU^hbet6>$YP@TWi$L~k(q*|vUGRrLO@arPytg`ZGDr=fwRA6;hF&#- z-hj;)77wyoWV&Os){3W*36mQ)_bYpHkPIJN@A`OTqgGf{q%=S)!>_)}wUMrZiV0mJ zwm6LQ8`Q1V)bisB3)zIeHnt90dqY#xShL-_!U1*Pb@k4l+Y209q4#zC$bp%f>E?R| z2cL`0-DT^#|JeTYH9w}h@7?ZUD5#bXK4W;czi7;#7dAxa8<9xZ^sEHeS@)6}yJ_^f zpgGU2&k3Ppx27j82TnWQ(wYC&ZOYHpgZjpO9#|giJ~_T%Q@@I|%YJj`zReqU>UDMI zcx8J~gI}ArAY+=JBv;cQ-Lqq-S3`V zlM-Td_NQBY+aC>lZrJzY(1E;aLyZR3tjhDjkpI|r+b?B znK5B}{sFg!)+w*9?%d>98!C6USDJd1&R<%no$|SSMDMa#v)r%^t14nbLznm0S~v5y z!^sI_KOP@6AyK>b;c27YyR&1KXfjj9AL4qJ*r`_AeK&e_?(G$sz9vC4f430j_|3Lh zdo=Drx6?iE_OVs1b|hu6&()pV6}64~ot^HQ+LgL3$kI;vRBq8*|Ad)&*rORy$2T>0 z+pTr;_HBo~b3L${?BaqG@`;*hhq5gUrxni?e;C-e#7VWQ%F> zhhIjG_5*LabhXiRHS=>P-VF5J8K9`uc<($l*YsQIip65>l)BfWdV9t1)eDnMNIy}$ z>P)THVT~|{y7%+3+TLqxo_>-oucL1FS`#~U-=wYzR|KKu3%G-Woe83Y(r`thYcUS+x&!OOwf0~wi=6@ zQ~fmWYHII`H{0%;zBfA6&Maf5r=iU#-9pWl2ah){oHM z)7@uidtLic?_9NERYRS5)v%U*feK^s8SiadJfFZ;?q0PU6HYfj%gnXz-`{p7!Pt{%R9b>hon!#>@!`)&Vqdu(*_PVGak5h>66 zeC#*tLXmifu><9>Z_>rjUENAGmw>~$<;$BA>-)z!&ezyuKI6^A)gSjqetuQH%RL?( z8qZGa=a*PnX*+D_uRWW`hyD@N=+|~U=DLI5>gSrB4xKXFzBPSebn06R4LeW6wHALo z(U3kEsCzykb!g+to|apGyiYl7dC()b%PTk2#4FLiZ>%=7ZkS+Eb>h@d+qM}C;=K&& zYDJX8D|X#~U7-_Wu;So(|IwqgjYcf%a;jO|;hJDj{t`jW>H7;amd)`_zSed9nBdik z16K7nW_w2jW-f}=Fx&Y;@ z?U0~%Y((yx3DL`jU-{fxzVS-vse(<0@oA2JcHO^_VciCuPmwz1Q-5zROLOo$e@T-U zb<}KK0rht+lhyW~h8Kp`GBKrGMm^o}W^>8=YO7(ml%K8ifiz1~g1}=oxdS zmFh5MZ-(*AcgdF~`Hk>joj9_`Kx0##%YmCW$1c|O?RP&f!qw`MlfjI#A~F1(au}0z z>sM{_M$JXwaQU{;O<}F;PC5kWWQokbjFb4>dHgx8Jjil45Y6yv+G)R?8^3HDHn!Vt z{)tEPf~2t0p!-gK(S0<#L>@QmX&hoNgWKpia@hr91=SHu)eA_cqRJnbQ{hWu{yJipZ1;%ta-SbkPq15Z|b|3P_ zJ!)t0<=P$kF--hR9N-d%!#0b6=lXbhYQg zytBc+J9pUDu6pl0=eVg;>0H;xz)#8W-h$X?r@~k-J zyMohq2By?ni=FMhnBFg4zF4H4QvZ5L@AoGbz6;y&=j`J*ikE-V3f@@iQ1_r0MYIbK zhpk_|sr5jiKzp7}gZM+2!Eg9#N$!jGD!M&4vykWSSoAbU#Q6TOdPv-Z&Zm2}^eLmO zojM{ebgJ07^K`9-h4bvOrpHT{x#U5TZ$|eP99`%Z7Jb3^WR>-3eXT5~3l1k|P~OZg zFOarI|2XYnj>S)_?GYQ&29!>vmU%B}h;!#lu9|aUnOhZun!NVK9-ZFA*jYUHo3dN- z)8o$*%eN1FdZb`epPgyL{bW{^mxr}D53Rpr`D0MCUz_Qow5fjn`!u`mk1?AmOJ}1~ z14jQo&C^gk>6ks6YFzY=2-~KOiQxsUUIziaqAUNn(Gc^jWe3~!E$x$I0qM-Gc9g&RF>Ih zzcD$fVyy{{wL=CQUzFMgdrpsCIbl?-S-*(jgsnai{5?gYK;s#dL$9QvzjnF%Ow$b< z#&7G^)I1LOIkxK_+n?sx{lEkb@bPI>E5|P3ct2B z77v{Lc5l@*h&XMwu9!xMUc=W-^)wth#3*0C?ZL;c1K-w9k*$;j?+!Sl^1YOSt;^Hy zE=auQzs7|6o`Wg5vo$w(i1GeY9tL|o3&3Ie6}#R|e)`9<78x|PHLqM_)VLkF93%(>N2A2G?SC!JzlX6DeRky3U(Q* zBW`3%w1?=nOXfV2fSI>sk200%qr7j#Jd2;pD_)u$a0_)1UTm+)xpo*SF&9tLx$q z!GnvP)mZk|Al;T}nu{UN(GeS(hDf)coHbT!Y|7d~+j;HrS0GQA%4t=0w%BjK$!CLM z>o$BP;i<}?7Q`d{6g$7_=bC!qXUt}{q}N5KmYAJGJbEzf51~fm19zo!Lh9YNl|MSU z4w9t^jn1BWFgW>9>poLKLiIh!^Jv2s%P;nB&$sL`zIVj8--M?$;@-Sw*L~4|uJNN6 zj~Km3QfX*(q{{M1gQ3Iyvi2D(fMw~r8Bb>UC7(-Q`@>eq^YaS@Ul@n0Yoqo?EU4hU-M1*53C} z?jo7O1D5qDRU_wN^Jt%*x9?`Am;}zg(LYakZPFO8P*uL<)~A)Oc9*wij?bi>+iYu# z7dg-1ncga0G!NRVEFIa~>$uszu-``d9tq_y->%iCFwi0S>RYVF{%KkpaK`OORH6LZ zv<)Wkcf)d(zn3Lhp6NQHM5VpSq`m3Y+L}lB9T(?jUvDQYn zWJ#WUWwrY&$2yu#Y`tr^*URarHHlZJ&6rzl*rQ>KX??g`%Pxtr%}KxVExj|Ly_8FK zgZn4z#$H?atDc)d{zIdMI#=48n;o9sbM{$03)zHj#_ZW=lK=4aHVZ_)WZm6J=sJAU zs*|yMCRA*`bw0w+`c!Z~N6(_H9me+5J}r_;+I7wUR3TdFwt}X0=VRlY-x|DqGh@Xh z%|ySr&ynSugI$gzBb)?(f5rQ_ZCK)&%&GP+)2Y9g#-va4+ucV~bAPN^r=gU?w?l%R zJPlWv*NHlV!|KRAokXoG=S7Ch(@Z&Hbk_WOZ|^0K-NL-ipLgkAZ76D3X!iNy+DjXA zjJ@L4M(ow0_L+XwuBX9L?U>fZ+w8yEm|ig2d)rdf9Oxii^sC6-vF7wGhm0u4tmJdX z>&z*KJ^FMvy5k)XJT*4%*)pqTJtLAf_Gu;ddx{`n#_GQx1OK7u|C|Igc=*q@^c(W8b87JD?=-CbKiUoOQ*!~H zEjq{J?WCPLJ`<+|`TCe_!C&<8_S-PY+2Lw89VEsB~8~VSPZR}9h zIE)PN^w{k09k{LI9xeW!n>J$=&oy)Xy|;M#c&_yf_{YP)Kei9T&_J;50S literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest7.vmp.exe.i64 b/refbuilds/vmptest7.vmp.exe.i64 new file mode 100644 index 0000000000000000000000000000000000000000..85ff5e0ad6a4fa5bb06d81050df0ca868f6b39da GIT binary patch literal 201258 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace argparse { + namespace detail { + static inline bool _not_space(int ch) { return !std::isspace(ch); } + static inline void _ltrim(std::string& s, bool (*f)(int) = _not_space) { + s.erase(s.begin(), std::find_if(s.begin(), s.end(), f)); + } + static inline void _rtrim(std::string& s, bool (*f)(int) = _not_space) { + s.erase(std::find_if(s.rbegin(), s.rend(), f).base(), s.end()); + } + static inline void _trim(std::string& s, bool (*f)(int) = _not_space) { + _ltrim(s, f); + _rtrim(s, f); + } + static inline std::string _ltrim_copy(std::string s, + bool (*f)(int) = _not_space) { + _ltrim(s, f); + return s; + } + static inline std::string _rtrim_copy(std::string s, + bool (*f)(int) = _not_space) { + _rtrim(s, f); + return s; + } + static inline std::string _trim_copy(std::string s, + bool (*f)(int) = _not_space) { + _trim(s, f); + return s; + } + template + static inline std::string _join(InputIt begin, InputIt end, + const std::string& separator = " ") { + std::ostringstream ss; + if (begin != end) { + ss << *begin++; + } + while (begin != end) { + ss << separator; + ss << *begin++; + } + return ss.str(); + } + static inline bool _is_number(const std::string& arg) { + std::istringstream iss(arg); + float f; + iss >> std::noskipws >> f; + return iss.eof() && !iss.fail(); + } + + static inline int _find_equal(const std::string& s) { + for (size_t i = 0; i < s.length(); ++i) { + // if find graph symbol before equal, end search + // i.e. don't accept --asd)f=0 arguments + // but allow --asd_f and --asd-f arguments + if (std::ispunct(static_cast(s[i]))) { + if (s[i] == '=') { + return static_cast(i); + } + else if (s[i] == '_' || s[i] == '-') { + continue; + } + return -1; + } + } + return -1; + } + + static inline size_t _find_name_end(const std::string& s) { + size_t i; + for (i = 0; i < s.length(); ++i) { + if (std::ispunct(static_cast(s[i]))) { + break; + } + } + return i; + } + + namespace is_vector_impl { + template + struct is_vector : std::false_type {}; + template + struct is_vector> : std::true_type {}; + } // namespace is_vector_impl + + // type trait to utilize the implementation type traits as well as decay the + // type + template + struct is_vector { + static constexpr bool const value = + is_vector_impl::is_vector::type>::value; + }; + } // namespace detail + + class argument_parser_t { + private: + public: + class Argument; + + class Result { + public: + Result() {} + Result(std::string err) noexcept : _error(true), _what(err) {} + + operator bool() const { return _error; } + + friend std::ostream& operator<<(std::ostream& os, const Result& dt); + + const std::string& what() const { return _what; } + + private: + bool _error{ false }; + std::string _what{}; + }; + + class Argument { + public: + enum Position : int { LAST = -1, DONT_CARE = -2 }; + enum Count : int { ANY = -1 }; + + Argument& name(const std::string& name) { + _names.push_back(name); + return *this; + } + + Argument& names(std::vector names) { + _names.insert(_names.end(), names.begin(), names.end()); + return *this; + } + + Argument& description(const std::string& description) { + _desc = description; + return *this; + } + + Argument& required(bool req) { + _required = req; + return *this; + } + + Argument& position(int position) { + if (position != Position::LAST) { + // position + 1 because technically argument zero is the name of the + // executable + _position = position + 1; + } + else { + _position = position; + } + return *this; + } + + Argument& count(int count) { + _count = count; + return *this; + } + + bool found() const { return _found; } + + template + typename std::enable_if::value, T>::type get() { + T t = T(); + typename T::value_type vt; + for (auto& s : _values) { + std::istringstream in(s); + in >> vt; + t.push_back(vt); + } + return t; + } + + template + typename std::enable_if::value, T>::type get() { + std::istringstream in(get()); + T t = T(); + in >> t >> std::ws; + return t; + } + + private: + Argument(const std::string& name, const std::string& desc, + bool required = false) + : _desc(desc), _required(required) { + _names.push_back(name); + } + + Argument() {} + + friend class argument_parser_t; + int _position{ Position::DONT_CARE }; + int _count{ Count::ANY }; + std::vector _names{}; + std::string _desc{}; + bool _found{ false }; + bool _required{ false }; + int _index{ -1 }; + + std::vector _values{}; + }; + + argument_parser_t(std::string bin, std::string desc) + : _bin(bin), _desc(desc) {} + + Argument& add_argument() { + _arguments.push_back({}); + _arguments.back()._index = static_cast(_arguments.size()) - 1; + return _arguments.back(); + } + + Argument& add_argument(const std::string& name, const std::string& long_name, + const std::string& desc, const bool required = false) { + _arguments.push_back(Argument(name, desc, required)); + _arguments.back()._names.push_back(long_name); + _arguments.back()._index = static_cast(_arguments.size()) - 1; + return _arguments.back(); + } + + Argument& add_argument(const std::string& name, const std::string& desc, + const bool required = false) { + _arguments.push_back(Argument(name, desc, required)); + _arguments.back()._index = static_cast(_arguments.size()) - 1; + return _arguments.back(); + } + + void print_help(size_t count = 0, size_t page = 0) { + if (page * count > _arguments.size()) { + return; + } + if (page == 0) { + std::cout << "Usage: " << _bin; + if (_positional_arguments.empty()) { + std::cout << " [options...]" << std::endl; + } + else { + int current = 1; + for (auto& v : _positional_arguments) { + if (v.first != Argument::Position::LAST) { + for (; current < v.first; current++) { + std::cout << " [" << current << "]"; + } + std::cout + << " [" + << detail::_ltrim_copy( + _arguments[static_cast(v.second)]._names[0], + [](int c) -> bool { return c != static_cast('-'); }) + << "]"; + } + } + auto it = _positional_arguments.find(Argument::Position::LAST); + if (it == _positional_arguments.end()) { + std::cout << " [options...]"; + } + else { + std::cout + << " [options...] [" + << detail::_ltrim_copy( + _arguments[static_cast(it->second)]._names[0], + [](int c) -> bool { return c != static_cast('-'); }) + << "]"; + } + std::cout << std::endl; + } + std::cout << "Options:" << std::endl; + } + if (count == 0) { + page = 0; + count = _arguments.size(); + } + for (size_t i = page * count; + i < std::min(page * count + count, _arguments.size()); i++) { + Argument& a = _arguments[i]; + std::string name = a._names[0]; + for (size_t n = 1; n < a._names.size(); ++n) { + name.append(", " + a._names[n]); + } + std::cout << " " << std::setw(23) << std::left << name << std::setw(23) + << a._desc; + if (a._required) { + std::cout << " (Required)"; + } + std::cout << std::endl; + } + } + + Result parse(int argc, const char* argv[]) { + Result err; + if (argc > 1) { + // build name map + for (auto& a : _arguments) { + for (auto& n : a._names) { + std::string name = detail::_ltrim_copy( + n, [](int c) -> bool { return c != static_cast('-'); }); + if (_name_map.find(name) != _name_map.end()) { + return Result("Duplicate of argument name: " + n); + } + _name_map[name] = a._index; + } + if (a._position >= 0 || a._position == Argument::Position::LAST) { + _positional_arguments[a._position] = a._index; + } + } + if (err) { + return err; + } + + // parse + std::string current_arg; + size_t arg_len; + for (int argv_index = 1; argv_index < argc; ++argv_index) { + current_arg = std::string(argv[argv_index]); + arg_len = current_arg.length(); + if (arg_len == 0) { + continue; + } + if (_help_enabled && (current_arg == "-h" || current_arg == "--help")) { + _arguments[static_cast(_name_map["help"])]._found = true; + } + else if (argv_index == argc - 1 && + _positional_arguments.find(Argument::Position::LAST) != + _positional_arguments.end()) { + err = _end_argument(); + Result b = err; + err = _add_value(current_arg, Argument::Position::LAST); + if (b) { + return b; + } + if (err) { + return err; + } + } + else if (arg_len >= 2 && + !detail::_is_number(current_arg)) { // ignores the case if + // the arg is just a - + // look for -a (short) or --arg (long) args + if (current_arg[0] == '-') { + err = _end_argument(); + if (err) { + return err; + } + // look for --arg (long) args + if (current_arg[1] == '-') { + err = _begin_argument(current_arg.substr(2), true, argv_index); + if (err) { + return err; + } + } + else { // short args + err = _begin_argument(current_arg.substr(1), false, argv_index); + if (err) { + return err; + } + } + } + else { // argument value + err = _add_value(current_arg, argv_index); + if (err) { + return err; + } + } + } + else { // argument value + err = _add_value(current_arg, argv_index); + if (err) { + return err; + } + } + } + } + if (_help_enabled && exists("help")) { + return Result(); + } + err = _end_argument(); + if (err) { + return err; + } + for (auto& p : _positional_arguments) { + Argument& a = _arguments[static_cast(p.second)]; + if (a._values.size() > 0 && a._values[0][0] == '-') { + std::string name = detail::_ltrim_copy(a._values[0], [](int c) -> bool { + return c != static_cast('-'); + }); + if (_name_map.find(name) != _name_map.end()) { + if (a._position == Argument::Position::LAST) { + return Result( + "Poisitional argument expected at the end, but argument " + + a._values[0] + " found instead"); + } + else { + return Result("Poisitional argument expected in position " + + std::to_string(a._position) + ", but argument " + + a._values[0] + " found instead"); + } + } + } + } + for (auto& a : _arguments) { + if (a._required && !a._found) { + return Result("Required argument not found: " + a._names[0]); + } + if (a._position >= 0 && argc >= a._position && !a._found) { + return Result("Argument " + a._names[0] + " expected in position " + + std::to_string(a._position)); + } + } + return Result(); + } + + void enable_help() { + add_argument("-h", "--help", "Shows this page", false); + _help_enabled = true; + } + + bool exists(const std::string& name) const { + std::string n = detail::_ltrim_copy( + name, [](int c) -> bool { return c != static_cast('-'); }); + auto it = _name_map.find(n); + if (it != _name_map.end()) { + return _arguments[static_cast(it->second)]._found; + } + return false; + } + + template + T get(const std::string& name) { + auto t = _name_map.find(name); + if (t != _name_map.end()) { + return _arguments[static_cast(t->second)].get(); + } + return T(); + } + + private: + Result _begin_argument(const std::string& arg, bool longarg, int position) { + auto it = _positional_arguments.find(position); + if (it != _positional_arguments.end()) { + Result err = _end_argument(); + Argument& a = _arguments[static_cast(it->second)]; + a._values.push_back((longarg ? "--" : "-") + arg); + a._found = true; + return err; + } + if (_current != -1) { + return Result("Current argument left open"); + } + size_t name_end = detail::_find_name_end(arg); + std::string arg_name = arg.substr(0, name_end); + if (longarg) { + int equal_pos = detail::_find_equal(arg); + auto nmf = _name_map.find(arg_name); + if (nmf == _name_map.end()) { + return Result("Unrecognized command line option '" + arg_name + "'"); + } + _current = nmf->second; + _arguments[static_cast(nmf->second)]._found = true; + if (equal_pos == 0 || + (equal_pos < 0 && + arg_name.length() < arg.length())) { // malformed argument + return Result("Malformed argument: " + arg); + } + else if (equal_pos > 0) { + std::string arg_value = arg.substr(name_end + 1); + _add_value(arg_value, position); + } + } + else { + Result r; + if (arg_name.length() == 1) { + return _begin_argument(arg, true, position); + } + else { + for (char& c : arg_name) { + r = _begin_argument(std::string(1, c), true, position); + if (r) { + return r; + } + r = _end_argument(); + if (r) { + return r; + } + } + } + } + return Result(); + } + + Result _add_value(const std::string& value, int location) { + if (_current >= 0) { + Result err; + Argument& a = _arguments[static_cast(_current)]; + if (a._count >= 0 && static_cast(a._values.size()) >= a._count) { + err = _end_argument(); + if (err) { + return err; + } + goto unnamed; + } + a._values.push_back(value); + if (a._count >= 0 && static_cast(a._values.size()) >= a._count) { + err = _end_argument(); + if (err) { + return err; + } + } + return Result(); + } + else { + unnamed: + auto it = _positional_arguments.find(location); + if (it != _positional_arguments.end()) { + Argument& a = _arguments[static_cast(it->second)]; + a._values.push_back(value); + a._found = true; + } + // TODO + return Result(); + } + } + + Result _end_argument() { + if (_current >= 0) { + Argument& a = _arguments[static_cast(_current)]; + _current = -1; + if (static_cast(a._values.size()) < a._count) { + return Result("Too few arguments given for " + a._names[0]); + } + if (a._count >= 0) { + if (static_cast(a._values.size()) > a._count) { + return Result("Too many arguments given for " + a._names[0]); + } + } + } + return Result(); + } + + bool _help_enabled{ false }; + int _current{ -1 }; + std::string _bin{}; + std::string _desc{}; + std::vector _arguments{}; + std::map _positional_arguments{}; + std::map _name_map{}; + }; + + std::ostream& operator<<(std::ostream& os, const argument_parser_t::Result& r) { + os << r.what(); + return os; + } + template <> + inline std::string argument_parser_t::Argument::get() { + return detail::_join(_values.begin(), _values.end()); + } + template <> + inline std::vector + argument_parser_t::Argument::get>() { + return _values; + } + +} // namespace argparse +#endif \ No newline at end of file diff --git a/src/um-tracer/lconstbzx.asm b/src/um-tracer/lconstbzx.asm new file mode 100644 index 0000000..4a0ea72 --- /dev/null +++ b/src/um-tracer/lconstbzx.asm @@ -0,0 +1,36 @@ +.data + __mbase dq 0h + public __mbase + +.code +__lconstbzx proc + mov al, [rsi] + lea rsi, [rsi+1] + xor al, bl + dec al + ror al, 1 + neg al + xor bl, al + + pushfq ; save flags... + cmp ax, 01Ch + je swap_val + + ; the constant is not 0x1C + popfq ; restore flags... + sub rbp, 2 + mov [rbp], ax + mov rax, __mbase + add rax, 059FEh ; calc jmp rva is 0x59FE... + jmp rax + +swap_val: ; the constant is 0x1C + popfq ; restore flags... + mov ax, 5 ; bit 5 is VMX in ECX after CPUID... + sub rbp, 2 + mov [rbp], ax + mov rax, __mbase + add rax, 059FEh ; calc jmp rva is 0x59FE... + jmp rax +__lconstbzx endp +end \ No newline at end of file diff --git a/src/um-tracer/main.cpp b/src/um-tracer/main.cpp new file mode 100644 index 0000000..bb236c7 --- /dev/null +++ b/src/um-tracer/main.cpp @@ -0,0 +1,210 @@ +#include +#include +#include +#include +#include "vmtracer.hpp" +#include "vmp2.hpp" +#include "cli-parser.hpp" + +extern "C" void __lconstbzx(void); +extern "C" u64 __mbase; + +#define NT_HEADER(x) \ + reinterpret_cast( \ + reinterpret_cast(x)->e_lfanew + x) + +inline std::vector traces; +inline vmp2::file_header trace_header; + +int __cdecl main(int argc, const char** argv) +{ + argparse::argument_parser_t parser( + "um-tracer", "usermode virtual instruction tracer"); + + parser.add_argument() + .names({ "--bin", "--vmpbin" }) + .description("path to a binary protected with VMProtect 2") + .required(true); + + parser.add_argument() + .names({ "--table", "--vmtable" }) + .description("relative virtual address to the vm handler table") + .required(true); + + parser.add_argument() + .names({ "--base", "--imagebase" }) + .description("image base from OptionalHeader::ImageBase") + .required(true); + + parser.add_argument() + .names({ "--out", "--output" }) + .description("name and/or path to output file") + .required(true); + + parser.enable_help(); + auto err = parser.parse(argc, argv); + + if (err) + { + std::cout << err << std::endl; + return -1; + } + + if (parser.exists("help")) + { + parser.print_help(); + return 0; + } + + /* + the vm_handlers are encrypted/encoded with a basic + math operation... typically a NOT, XOR, NEG, etc... + + You can determine what type of encryption your binary + is using by first finding where the LEA r12, vm_handlers + is located, then follow the usage of r12 until you see + MOV GP, [r12 + rax * 8], then follow the usage of the GP... + + For example: + .vmp1:00000001401D1015 lea r12, vm_handlers + .vmp1:00000001401D0C0A mov rdx, [r12+rax*8] + .vmp1:00000001401D0C10 ror rdx, 25h + + Note: + R12 and RAX always seem to be used for this vm handler index... + You could signature scan for LEA r12, ? ? ? ? and find the vm handler + table really easily by manually inspecting each result... + */ + + vm::decrypt_handler_t _decrypt_handler = + [](u64 val) -> u64 + { + return val ^ 0x7F3D2149; + }; + + vm::encrypt_handler_t _encrypt_handler = + [](u64 val) -> u64 + { + return val ^ 0x7F3D2149; + }; + + vm::handler::edit_entry_t _edit_entry = + [](u64* entry_ptr, u64 val) -> void + { + DWORD old_prot; + VirtualProtect(entry_ptr, sizeof val, + PAGE_EXECUTE_READWRITE, &old_prot); + + *entry_ptr = val; + VirtualProtect(entry_ptr, sizeof val, + old_prot, &old_prot); + }; + + const auto module_base = + reinterpret_cast( + LoadLibraryExA(parser.get("bin").c_str(), + NULL, DONT_RESOLVE_DLL_REFERENCES)); + + // used in LCONSTBZX hook... + __mbase = module_base; + + const auto handler_table_rva = std::strtoul( + parser.get("table").c_str(), nullptr, 16); + + const auto image_base = std::strtoull( + parser.get("base").c_str(), nullptr, 16); + + const auto handler_table_ptr = + reinterpret_cast( + module_base + handler_table_rva); + + /* + the VM handler table is an array of 256 QWORD's... each encrypted differently per-binary... + each one of these is an encrypted RVA to a virtual instruction... + + .vmp1:00000001401D25D3 vm_handlers dq 3A28FA000000028h, 3A40E4000000028h, 3A2F5C000000028h + .vmp1:00000001401D25D3 dq 3A1096000000028h, 3A3DBC000000028h, 3A1DDA000000028h + .vmp1:00000001401D25D3 dq 3A6032000000028h, 2 dup(3A40E4000000028h), 3A2B5A000000028h + .vmp1:00000001401D25D3 dq 3A4004000000028h, 3A2810000000028h, 3A446A000000028h + .vmp1:00000001401D25D3 dq 3A39B6000000028h, 3A6728000000028h, 3A6032000000028h + .vmp1:00000001401D25D3 dq 3A34F0000000028h, 3A46F2000000028h, 3A0170000000028h + .vmp1:00000001401D25D3 dq 3A0952000000028h, 3A4004000000028h, 3A494E000000028h + .vmp1:00000001401D25D3 dq 3A35C2000000028h, 3A4A1E000000028h, 3A37D8000000028h + .vmp1:00000001401D25D3 dq 3A1482000000028h, 3A6492000000028h, 3A2948000000028h + .vmp1:00000001401D25D3 dq 3A2D1C000000028h, 2 dup(3A6ABE000000028h), 3A068A000000028h + .vmp1:00000001401D25D3 dq 3A3F52000000028h, 3A118E000000028h, 3A27BE000000028h + + // .... many more ... + */ + + vm::handler::table_t handler_table(handler_table_ptr, _edit_entry); + + // set all vm handler callbacks to just + // print the rolling decrypt key and handler idx... + for (auto idx = 0u; idx < 256; ++idx) + { + handler_table.set_callback(idx, + [](vm::registers* regs, u8 handler_idx) -> void + { + vmp2::entry_t entry; + entry.decrypt_key = regs->rbx; + entry.handler_idx = handler_idx; + entry.vip = regs->rsi; + + memcpy(&entry.regs, ®s->r15, sizeof entry.regs); + memcpy(&entry.vregs, (void*)regs->rdi, sizeof entry.vregs); + + for (auto idx = 0u; idx < sizeof(entry.vsp) / 8; ++idx) + entry.vsp.qword[idx] = reinterpret_cast(regs->rbp)[idx]; + + traces.push_back(entry); + std::printf("> TID = %d, handler idx = %d, decryption key = 0x%p\n", + GetCurrentThreadId(), handler_idx, regs->rbx); + } + ); + } + + vm::tracer_t tracer( + module_base, + image_base, + _decrypt_handler, + _encrypt_handler, + &handler_table + ); + + // change vm handler 0x55 (LCONSTBZX) to our implimentation of it... + auto _meta_data = handler_table.get_meta_data(0x55); + _meta_data.virt = reinterpret_cast(&__lconstbzx); + handler_table.set_meta_data(0x55, _meta_data); + + std::ofstream vmp2_file(parser.get("out"), std::ios::binary); + memcpy(&trace_header.magic, "VMP2", sizeof "VMP2" - 1); + trace_header.epoch_time = time(nullptr); + trace_header.entry_offset = sizeof trace_header; + trace_header.advancement = vmp2::exec_type_t::forward; + trace_header.version = vmp2::version_t::v1; + trace_header.module_base = module_base; + + // patch vm handler table... + tracer.start(); + + // call entry point... + auto result = reinterpret_cast( + NT_HEADER(module_base)->OptionalHeader.AddressOfEntryPoint + module_base)(); + + std::printf("result = %d\n", result); + + // unpatch vm handler table... + tracer.stop(); + + // write vmp2 file to disk... + trace_header.entry_count = traces.size(); + vmp2_file.write((char*)&trace_header, sizeof trace_header); + + for (auto& trace : traces) + vmp2_file.write((char*)&trace, sizeof trace); + + vmp2_file.close(); + std::printf("> finished vm trace...\n"); + std::getchar(); +} \ No newline at end of file diff --git a/src/um-tracer/um-tracer.vcxproj b/src/um-tracer/um-tracer.vcxproj new file mode 100644 index 0000000..d99c648 --- /dev/null +++ b/src/um-tracer/um-tracer.vcxproj @@ -0,0 +1,76 @@ + + + + + Release + x64 + + + + 16.0 + Win32Proj + {3f97516b-dc38-4c7f-857b-0b2d4e079208} + vmtracer + 10.0 + um-tracer + + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + false + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + stdcpp17 + + + Console + true + true + true + $(ProjectDir)..\libs\*;%(AdditionalDependencies) + + + + + + + + + + + + + + + + {f98aafdc-aa2d-4ac2-924a-9bc9895e34d5} + + + + + + + \ No newline at end of file diff --git a/src/um-tracer/um-tracer.vcxproj.filters b/src/um-tracer/um-tracer.vcxproj.filters new file mode 100644 index 0000000..d86317a --- /dev/null +++ b/src/um-tracer/um-tracer.vcxproj.filters @@ -0,0 +1,34 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + \ No newline at end of file diff --git a/src/um-tracer/vmp2.hpp b/src/um-tracer/vmp2.hpp new file mode 100644 index 0000000..5bc3bff --- /dev/null +++ b/src/um-tracer/vmp2.hpp @@ -0,0 +1,72 @@ +#pragma once +#include "vmtracer.hpp" + +namespace vmp2 +{ + enum class exec_type_t + { + forward, + backward + }; + + enum class version_t + { + invalid, + v1 = 0x101 + }; + + struct file_header + { + u32 magic; // VMP2! + u64 epoch_time; + u64 module_base; + exec_type_t advancement; + version_t version; + + u32 entry_count; + u32 entry_offset; + }; + + struct entry_t + { + u8 handler_idx; + u64 decrypt_key; + u64 vip; + + union + { + struct + { + u64 r15; + u64 r14; + u64 r13; + u64 r12; + u64 r11; + u64 r10; + u64 r9; + u64 r8; + u64 rbp; + u64 rdi; + u64 rsi; + u64 rdx; + u64 rcx; + u64 rbx; + u64 rax; + u64 rflags; + }; + u64 raw[16]; + } regs; + + union + { + u64 qword[0x28]; + u8 raw[0x140]; + } vregs; + + union + { + u64 qword[0x20]; + u8 raw[0x100]; + } vsp; + }; +} \ No newline at end of file diff --git a/src/um-tracer/vmtracer.hpp b/src/um-tracer/vmtracer.hpp new file mode 100644 index 0000000..a78d262 --- /dev/null +++ b/src/um-tracer/vmtracer.hpp @@ -0,0 +1,118 @@ +#pragma once +#include +#include + +using u8 = unsigned char; +using u16 = unsigned short; +using u32 = unsigned int; +using u64 = unsigned long long; +using u128 = __m128; +extern "C" void __vtrap(void); + +namespace vm +{ + typedef struct _registers + { + u128 xmm0; + u128 xmm1; + u128 xmm2; + u128 xmm3; + u128 xmm4; + u128 xmm5; + u128 xmm6; + u128 xmm7; + u128 xmm8; + u128 xmm9; + u128 xmm10; + u128 xmm11; + u128 xmm12; + u128 xmm13; + u128 xmm14; + u128 xmm15; + + u64 gap0; + + u64 r15; + u64 r14; + u64 r13; + u64 r12; + u64 r11; + u64 r10; + u64 r9; + u64 r8; + u64 rbp; + u64 rdi; + u64 rsi; + u64 rdx; + u64 rcx; + u64 rbx; + u64 rax; + u64 rflags; + u64 vm_handler; + } registers, * pregisters; + + using decrypt_handler_t = u64(*)(u64); + using encrypt_handler_t = u64(*)(u64); + + namespace handler + { + // these lambdas handle page protections... + using edit_entry_t = void (*)(u64*, u64); + using entry_callback_t = void (*)(vm::registers* regs, u8 handler_idx); + + struct entry_t + { + u64 virt; + u64 encrypted; + u64 decrypted; + entry_callback_t callback; + }; + + class table_t + { + public: + explicit table_t(u64* table_addr, edit_entry_t edit_entry); + u64 get_entry(u8 idx) const; + entry_t get_meta_data(u8 idx) const; + + void set_entry(u8 idx, u64 entry); + void set_meta_data(u8 idx, const entry_t& entry); + void set_callback(u8 idx, entry_callback_t callback); + private: + u64* table_addr; + edit_entry_t edit_entry; + entry_t handlers[256]; + }; + } + + class tracer_t + { + public: + explicit tracer_t( + u64 module_base, + u64 image_base, + decrypt_handler_t decrypt_handler, + encrypt_handler_t encrypt_handler, + vm::handler::table_t* vm_handler_table + ); + + u64 encrypt(u64 val) const; + u64 decrypt(u64 val) const; + void set_trap(u64 val) const; + + void start() const; + void stop() const; + + vm::handler::table_t* handler_table; + private: + const u64 module_base, image_base; + u64 vtrap_encrypted; + + const decrypt_handler_t decrypt_handler; + const encrypt_handler_t encrypt_handler; + }; + + inline vm::tracer_t* g_vmctx = nullptr; +} + +extern "C" void vtrap_wrapper(vm::registers * regs, u8 handler_idx); \ No newline at end of file diff --git a/src/vmptest/ia32.h b/src/vmptest/ia32.h new file mode 100644 index 0000000..95b4d7a --- /dev/null +++ b/src/vmptest/ia32.h @@ -0,0 +1,21527 @@ +/** @file */ +#pragma once +using uint8_t = unsigned char; +using uint16_t = unsigned short; +using uint32_t = unsigned int; +using uint64_t = unsigned long long; + +/** + * @defgroup intel_manual \ + * Intel Manual + * + * @remarks All references are based on Intel(R) 64 and IA-32 architectures software developer's manual combined volumes: + * 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D, and 4 (May 2018). + * @{ + */ + /** + * @defgroup control_registers \ + * Control registers + * + * Control registers (CR0, CR1, CR2, CR3, and CR4) determine operating mode of the processor and the characteristics of the + * currently executing task. These registers are 32 bits in all 32-bit modes and compatibility mode. + * In 64-bit mode, control registers are expanded to 64 bits. The MOV CRn instructions are used to manipulate the register + * bits. Operand-size prefixes for these instructions are ignored. The following is also true: + * - The control registers can be read and loaded (or modified) using the move-to-or-from-control-registers forms of the + * MOV instruction. In protected mode, the MOV instructions allow the control registers to be read or loaded (at privilege + * level 0 only). This restriction means that application programs or operating-system procedures (running at privilege + * levels 1, 2, or 3) are prevented from reading or loading the control registers. + * - Bits 63:32 of CR0 and CR4 are reserved and must be written with zeros. Writing a nonzero value to any of the upper 32 + * bits results in a general-protection exception, \#GP(0). + * - All 64 bits of CR2 are writable by software. + * - Bits 51:40 of CR3 are reserved and must be 0. + * - The MOV CRn instructions do not check that addresses written to CR2 and CR3 are within the linear-address or + * physical-address limitations of the implementation. + * - Register CR8 is available in 64-bit mode only. The control registers are summarized below, and each architecturally + * defined control field in these control registers is described individually. + * - CR0 - Contains system control flags that control operating mode and states of the processor. + * - CR1 - Reserved. + * - CR2 - Contains the page-fault linear address (the linear address that caused a page fault). + * - CR3 - Contains the physical address of the base of the paging-structure hierarchy and two flags (PCD and PWT). Only + * the most-significant bits (less the lower 12 bits) of the base address are specified; the lower 12 bits of the address + * are assumed to be 0. The first paging structure must thus be aligned to a page (4-KByte) boundary. The PCD and PWT flags + * control caching of that paging structure in the processor's internal data caches (they do not control TLB caching of + * page-directory information). When using the physical address extension, the CR3 register contains the base address of + * the page-directorypointer table. In IA-32e mode, the CR3 register contains the base address of the PML4 table. + * - CR4 - Contains a group of flags that enable several architectural extensions, and indicate operating system or + * executive support for specific processor capabilities. + * - CR8 - Provides read and write access to the Task Priority Register (TPR). It specifies the priority threshold value + * that operating systems use to control the priority class of external interrupts allowed to interrupt the processor. This + * register is available only in 64-bit mode. However, interrupt filtering continues to apply in compatibility mode. + * + * @see Vol3A[2.5(CONTROL REGISTERS)] (reference) + * @{ + */ +typedef union +{ + struct + { + /** + * @brief Protection Enable + * + * [Bit 0] Enables protected mode when set; enables real-address mode when clear. This flag does not enable paging + * directly. It only enables segment-level protection. To enable paging, both the PE and PG flags must be set. + * + * @see Vol3A[9.9(Mode Switching)] + */ + uint64_t protection_enable : 1; +#define CR0_PROTECTION_ENABLE_BIT 0 +#define CR0_PROTECTION_ENABLE_FLAG 0x01 +#define CR0_PROTECTION_ENABLE_MASK 0x01 +#define CR0_PROTECTION_ENABLE(_) (((_) >> 0) & 0x01) + + /** + * @brief Monitor Coprocessor + * + * [Bit 1] Controls the interaction of the WAIT (or FWAIT) instruction with the TS flag (bit 3 of CR0). If the MP flag is + * set, a WAIT instruction generates a device-not-available exception (\#NM) if the TS flag is also set. If the MP flag is + * clear, the WAIT instruction ignores the setting of the TS flag. + */ + uint64_t monitor_coprocessor : 1; +#define CR0_MONITOR_COPROCESSOR_BIT 1 +#define CR0_MONITOR_COPROCESSOR_FLAG 0x02 +#define CR0_MONITOR_COPROCESSOR_MASK 0x01 +#define CR0_MONITOR_COPROCESSOR(_) (((_) >> 1) & 0x01) + + /** + * @brief FPU Emulation + * + * [Bit 2] Indicates that the processor does not have an internal or external x87 FPU when set; indicates an x87 FPU is + * present when clear. This flag also affects the execution of MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instructions. + * When the EM flag is set, execution of an x87 FPU instruction generates a device-not-available exception (\#NM). This + * flag must be set when the processor does not have an internal x87 FPU or is not connected to an external math + * coprocessor. Setting this flag forces all floating-point instructions to be handled by software emulation. + * Also, when the EM flag is set, execution of an MMX instruction causes an invalid-opcode exception (\#UD) to be + * generated. Thus, if an IA-32 or Intel 64 processor incorporates MMX technology, the EM flag must be set to 0 to enable + * execution of MMX instructions. Similarly for SSE/SSE2/SSE3/SSSE3/SSE4 extensions, when the EM flag is set, execution of + * most SSE/SSE2/SSE3/SSSE3/SSE4 instructions causes an invalid opcode exception (\#UD) to be generated. If an IA-32 or + * Intel 64 processor incorporates the SSE/SSE2/SSE3/SSSE3/SSE4 extensions, the EM flag must be set to 0 to enable + * execution of these extensions. SSE/SSE2/SSE3/SSSE3/SSE4 instructions not affected by the EM flag include: PAUSE, + * PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT. + */ + uint64_t emulate_fpu : 1; +#define CR0_EMULATE_FPU_BIT 2 +#define CR0_EMULATE_FPU_FLAG 0x04 +#define CR0_EMULATE_FPU_MASK 0x01 +#define CR0_EMULATE_FPU(_) (((_) >> 2) & 0x01) + + /** + * @brief Task Switched + * + * [Bit 3] Allows the saving of the x87 FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 context on a task switch to be delayed until an + * x87 FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instruction is actually executed by the new task. The processor sets this flag on + * every task switch and tests it when executing x87 FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instructions. + * - If the TS flag is set and the EM flag (bit 2 of CR0) is clear, a device-not-available exception (\#NM) is raised prior + * to the execution of any x87 FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instruction; with the exception of PAUSE, PREFETCHh, + * SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT. + * - If the TS flag is set and the MP flag (bit 1 of CR0) and EM flag are clear, an \#NM exception is not raised prior to + * the execution of an x87 FPU WAIT/FWAIT instruction. + * - If the EM flag is set, the setting of the TS flag has no effect on the execution of x87 + * FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instructions. + * The processor does not automatically save the context of the x87 FPU, XMM, and MXCSR registers on a task switch. + * Instead, it sets the TS flag, which causes the processor to raise an \#NM exception whenever it encounters an x87 + * FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instruction in the instruction stream for the new task (with the exception of the + * instructions listed above). + * The fault handler for the \#NM exception can then be used to clear the TS flag (with the CLTS instruction) and save + * the context of the x87 FPU, XMM, and MXCSR registers. If the task never encounters an x87 + * FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 instruction, the x87 FPU/MMX/SSE/SSE2/SSE3/SSSE3/SSE4 context is never saved. + */ + uint64_t task_switched : 1; +#define CR0_TASK_SWITCHED_BIT 3 +#define CR0_TASK_SWITCHED_FLAG 0x08 +#define CR0_TASK_SWITCHED_MASK 0x01 +#define CR0_TASK_SWITCHED(_) (((_) >> 3) & 0x01) + + /** + * @brief Extension Type + * + * [Bit 4] Reserved in the Pentium 4, Intel Xeon, P6 family, and Pentium processors. In the Pentium 4, Intel Xeon, and P6 + * family processors, this flag is hardcoded to 1. In the Intel386 and Intel486 processors, this flag indicates support of + * Intel 387 DX math coprocessor instructions when set. + */ + uint64_t extension_type : 1; +#define CR0_EXTENSION_TYPE_BIT 4 +#define CR0_EXTENSION_TYPE_FLAG 0x10 +#define CR0_EXTENSION_TYPE_MASK 0x01 +#define CR0_EXTENSION_TYPE(_) (((_) >> 4) & 0x01) + + /** + * @brief Numeric Error + * + * [Bit 5] Enables the native (internal) mechanism for reporting x87 FPU errors when set; enables the PC-style x87 FPU + * error reporting mechanism when clear. When the NE flag is clear and the IGNNE\# input is asserted, x87 FPU errors are + * ignored. When the NE flag is clear and the IGNNE\# input is deasserted, an unmasked x87 FPU error causes the processor + * to assert the FERR\# pin to generate an external interrupt and to stop instruction execution immediately before + * executing the next waiting floating-point instruction or WAIT/FWAIT instruction. + * The FERR\# pin is intended to drive an input to an external interrupt controller (the FERR\# pin emulates the ERROR\# + * pin of the Intel 287 and Intel 387 DX math coprocessors). The NE flag, IGNNE\# pin, and FERR\# pin are used with + * external logic to implement PC-style error reporting. Using FERR\# and IGNNE\# to handle floating-point exceptions is + * deprecated by modern operating systems; this non-native approach also limits newer processors to operate with one + * logical processor active. + * + * @see Vol1[8.7(Handling x87 FPU Exceptions in Software)] + * @see Vol1[A.1(APPENDIX A | EFLAGS Cross-Reference)] + */ + uint64_t numeric_error : 1; +#define CR0_NUMERIC_ERROR_BIT 5 +#define CR0_NUMERIC_ERROR_FLAG 0x20 +#define CR0_NUMERIC_ERROR_MASK 0x01 +#define CR0_NUMERIC_ERROR(_) (((_) >> 5) & 0x01) + uint64_t reserved1 : 10; + + /** + * @brief Write Protect + * + * [Bit 16] When set, inhibits supervisor-level procedures from writing into readonly pages; when clear, allows + * supervisor-level procedures to write into read-only pages (regardless of the U/S bit setting). This flag facilitates + * implementation of the copy-onwrite method of creating a new process (forking) used by operating systems such as UNIX. + * + * @see Vol3A[4.1.3(Paging-Mode Modifiers)] + * @see Vol3A[4.6(ACCESS RIGHTS)] + */ + uint64_t write_protect : 1; +#define CR0_WRITE_PROTECT_BIT 16 +#define CR0_WRITE_PROTECT_FLAG 0x10000 +#define CR0_WRITE_PROTECT_MASK 0x01 +#define CR0_WRITE_PROTECT(_) (((_) >> 16) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief Alignment Mask + * + * [Bit 18] Enables automatic alignment checking when set; disables alignment checking when clear. Alignment checking is + * performed only when the AM flag is set, the AC flag in the EFLAGS register is set, CPL is 3, and the processor is + * operating in either protected or virtual-8086 mode. + */ + uint64_t alignment_mask : 1; +#define CR0_ALIGNMENT_MASK_BIT 18 +#define CR0_ALIGNMENT_MASK_FLAG 0x40000 +#define CR0_ALIGNMENT_MASK_MASK 0x01 +#define CR0_ALIGNMENT_MASK(_) (((_) >> 18) & 0x01) + uint64_t reserved3 : 10; + + /** + * @brief Not Write-through + * + * [Bit 29] When the NW and CD flags are clear, write-back (for Pentium 4, Intel Xeon, P6 family, and Pentium processors) + * or write-through (for Intel486 processors) is enabled for writes that hit the cache and invalidation cycles are enabled. + */ + uint64_t not_write_through : 1; +#define CR0_NOT_WRITE_THROUGH_BIT 29 +#define CR0_NOT_WRITE_THROUGH_FLAG 0x20000000 +#define CR0_NOT_WRITE_THROUGH_MASK 0x01 +#define CR0_NOT_WRITE_THROUGH(_) (((_) >> 29) & 0x01) + + /** + * @brief Cache Disable + * + * [Bit 30] When the CD and NW flags are clear, caching of memory locations for the whole of physical memory in the + * processor's internal (and external) caches is enabled. When the CD flag is set, caching is restricted. To prevent the + * processor from accessing and updating its caches, the CD flag must be set and the caches must be invalidated so that no + * cache hits can occur. + * + * @see Vol3A[11.5.3(Preventing Caching)] + * @see Vol3A[11.5(CACHE CONTROL)] + */ + uint64_t cache_disable : 1; +#define CR0_CACHE_DISABLE_BIT 30 +#define CR0_CACHE_DISABLE_FLAG 0x40000000 +#define CR0_CACHE_DISABLE_MASK 0x01 +#define CR0_CACHE_DISABLE(_) (((_) >> 30) & 0x01) + + /** + * @brief Paging Enable + * + * [Bit 31] Enables paging when set; disables paging when clear. When paging is disabled, all linear addresses are treated + * as physical addresses. The PG flag has no effect if the PE flag (bit 0 of register CR0) is not also set; setting the PG + * flag when the PE flag is clear causes a general-protection exception (\#GP). + * On Intel 64 processors, enabling and disabling IA-32e mode operation also requires modifying CR0.PG. + * + * @see Vol3A[4(PAGING)] + */ + uint64_t paging_enable : 1; +#define CR0_PAGING_ENABLE_BIT 31 +#define CR0_PAGING_ENABLE_FLAG 0x80000000 +#define CR0_PAGING_ENABLE_MASK 0x01 +#define CR0_PAGING_ENABLE(_) (((_) >> 31) & 0x01) + uint64_t reserved4 : 32; + }; + + uint64_t flags; +} cr0; + +typedef union +{ + struct + { + uint64_t reserved1 : 3; + + /** + * @brief Page-level Write-Through + * + * [Bit 3] Controls the memory type used to access the first paging structure of the current paging-structure hierarchy. + * This bit is not used if paging is disabled, with PAE paging, or with 4-level paging if CR4.PCIDE=1. + * + * @see Vol3A[4.9(PAGING AND MEMORY TYPING)] + */ + uint64_t page_level_write_through : 1; +#define CR3_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define CR3_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define CR3_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define CR3_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * @brief Page-level Cache Disable + * + * [Bit 4] Controls the memory type used to access the first paging structure of the current paging-structure hierarchy. + * This bit is not used if paging is disabled, with PAE paging, or with 4-level paging2 if CR4.PCIDE=1. + * + * @see Vol3A[4.9(PAGING AND MEMORY TYPING)] + */ + uint64_t page_level_cache_disable : 1; +#define CR3_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define CR3_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define CR3_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define CR3_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + uint64_t reserved2 : 7; + + /** + * @brief Address of page directory + * + * [Bits 47:12] Physical address of the 4-KByte aligned page directory (32-bit paging) or PML4 table (64-bit paging) used + * for linear-address translation. + * + * @see Vol3A[4.3(32-BIT PAGING)] + * @see Vol3A[4.5(4-LEVEL PAGING)] + */ + uint64_t address_of_page_directory : 36; +#define CR3_ADDRESS_OF_PAGE_DIRECTORY_BIT 12 +#define CR3_ADDRESS_OF_PAGE_DIRECTORY_FLAG 0xFFFFFFFFF000 +#define CR3_ADDRESS_OF_PAGE_DIRECTORY_MASK 0xFFFFFFFFF +#define CR3_ADDRESS_OF_PAGE_DIRECTORY(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved3 : 16; + }; + + uint64_t flags; +} cr3; + +typedef union +{ + struct + { + /** + * @brief Virtual-8086 Mode Extensions + * + * [Bit 0] Enables interrupt- and exception-handling extensions in virtual-8086 mode when set; disables the extensions when + * clear. Use of the virtual mode extensions can improve the performance of virtual-8086 applications by eliminating the + * overhead of calling the virtual- 8086 monitor to handle interrupts and exceptions that occur while executing an 8086 + * program and, instead, redirecting the interrupts and exceptions back to the 8086 program's handlers. It also provides + * hardware support for a virtual interrupt flag (VIF) to improve reliability of running 8086 programs in multitasking and + * multiple-processor environments. + * + * @see Vol3B[20.3(INTERRUPT AND EXCEPTION HANDLING IN VIRTUAL-8086 MODE)] + */ + uint64_t virtual_mode_extensions : 1; +#define CR4_VIRTUAL_MODE_EXTENSIONS_BIT 0 +#define CR4_VIRTUAL_MODE_EXTENSIONS_FLAG 0x01 +#define CR4_VIRTUAL_MODE_EXTENSIONS_MASK 0x01 +#define CR4_VIRTUAL_MODE_EXTENSIONS(_) (((_) >> 0) & 0x01) + + /** + * @brief Protected-Mode Virtual Interrupts + * + * [Bit 1] Enables hardware support for a virtual interrupt flag (VIF) in protected mode when set; disables the VIF flag in + * protected mode when clear. + * + * @see Vol3B[20.4(PROTECTED-MODE VIRTUAL INTERRUPTS)] + */ + uint64_t protected_mode_virtual_interrupts : 1; +#define CR4_PROTECTED_MODE_VIRTUAL_INTERRUPTS_BIT 1 +#define CR4_PROTECTED_MODE_VIRTUAL_INTERRUPTS_FLAG 0x02 +#define CR4_PROTECTED_MODE_VIRTUAL_INTERRUPTS_MASK 0x01 +#define CR4_PROTECTED_MODE_VIRTUAL_INTERRUPTS(_) (((_) >> 1) & 0x01) + + /** + * @brief Time Stamp Disable + * + * [Bit 2] Restricts the execution of the RDTSC instruction to procedures running at privilege level 0 when set; allows + * RDTSC instruction to be executed at any privilege level when clear. This bit also applies to the RDTSCP instruction if + * supported (if CPUID.80000001H:EDX[27] = 1). + */ + uint64_t timestamp_disable : 1; +#define CR4_TIMESTAMP_DISABLE_BIT 2 +#define CR4_TIMESTAMP_DISABLE_FLAG 0x04 +#define CR4_TIMESTAMP_DISABLE_MASK 0x01 +#define CR4_TIMESTAMP_DISABLE(_) (((_) >> 2) & 0x01) + + /** + * @brief Debugging Extensions + * + * [Bit 3] References to debug registers DR4 and DR5 cause an undefined opcode (\#UD) exception to be generated when set; + * when clear, processor aliases references to registers DR4 and DR5 for compatibility with software written to run on + * earlier IA-32 processors. + * + * @see Vol3B[17.2.2(Debug Registers DR4 and DR5)] + */ + uint64_t debugging_extensions : 1; +#define CR4_DEBUGGING_EXTENSIONS_BIT 3 +#define CR4_DEBUGGING_EXTENSIONS_FLAG 0x08 +#define CR4_DEBUGGING_EXTENSIONS_MASK 0x01 +#define CR4_DEBUGGING_EXTENSIONS(_) (((_) >> 3) & 0x01) + + /** + * @brief Page Size Extensions + * + * [Bit 4] Enables 4-MByte pages with 32-bit paging when set; restricts 32-bit paging to pages of 4 KBytes when clear. + * + * @see Vol3A[4.3(32-BIT PAGING)] + */ + uint64_t page_size_extensions : 1; +#define CR4_PAGE_SIZE_EXTENSIONS_BIT 4 +#define CR4_PAGE_SIZE_EXTENSIONS_FLAG 0x10 +#define CR4_PAGE_SIZE_EXTENSIONS_MASK 0x01 +#define CR4_PAGE_SIZE_EXTENSIONS(_) (((_) >> 4) & 0x01) + + /** + * @brief Physical Address Extension + * + * [Bit 5] When set, enables paging to produce physical addresses with more than 32 bits. When clear, restricts physical + * addresses to 32 bits. PAE must be set before entering IA-32e mode. + * + * @see Vol3A[4(PAGING)] + */ + uint64_t physical_address_extension : 1; +#define CR4_PHYSICAL_ADDRESS_EXTENSION_BIT 5 +#define CR4_PHYSICAL_ADDRESS_EXTENSION_FLAG 0x20 +#define CR4_PHYSICAL_ADDRESS_EXTENSION_MASK 0x01 +#define CR4_PHYSICAL_ADDRESS_EXTENSION(_) (((_) >> 5) & 0x01) + + /** + * @brief Machine-Check Enable + * + * [Bit 6] Enables the machine-check exception when set; disables the machine-check exception when clear. + * + * @see Vol3B[15(MACHINE-CHECK ARCHITECTURE)] + */ + uint64_t machine_check_enable : 1; +#define CR4_MACHINE_CHECK_ENABLE_BIT 6 +#define CR4_MACHINE_CHECK_ENABLE_FLAG 0x40 +#define CR4_MACHINE_CHECK_ENABLE_MASK 0x01 +#define CR4_MACHINE_CHECK_ENABLE(_) (((_) >> 6) & 0x01) + + /** + * @brief Page Global Enable + * + * [Bit 7] (Introduced in the P6 family processors.) Enables the global page feature when set; disables the global page + * feature when clear. The global page feature allows frequently used or shared pages to be marked as global to all users + * (done with the global flag, bit 8, in a page-directory or page-table entry). Global pages are not flushed from the + * translation-lookaside buffer (TLB) on a task switch or a write to register CR3. When enabling the global page feature, + * paging must be enabled (by setting the PG flag in control register CR0) before the PGE flag is set. Reversing this + * sequence may affect program correctness, and processor performance will be impacted. + * + * @see Vol3A[4.10(CACHING TRANSLATION INFORMATION)] + */ + uint64_t page_global_enable : 1; +#define CR4_PAGE_GLOBAL_ENABLE_BIT 7 +#define CR4_PAGE_GLOBAL_ENABLE_FLAG 0x80 +#define CR4_PAGE_GLOBAL_ENABLE_MASK 0x01 +#define CR4_PAGE_GLOBAL_ENABLE(_) (((_) >> 7) & 0x01) + + /** + * @brief Performance-Monitoring Counter Enable + * + * [Bit 8] Enables execution of the RDPMC instruction for programs or procedures running at any protection level when set; + * RDPMC instruction can be executed only at protection level 0 when clear. + */ + uint64_t performance_monitoring_counter_enable : 1; +#define CR4_PERFORMANCE_MONITORING_COUNTER_ENABLE_BIT 8 +#define CR4_PERFORMANCE_MONITORING_COUNTER_ENABLE_FLAG 0x100 +#define CR4_PERFORMANCE_MONITORING_COUNTER_ENABLE_MASK 0x01 +#define CR4_PERFORMANCE_MONITORING_COUNTER_ENABLE(_) (((_) >> 8) & 0x01) + + /** + * @brief Operating System Support for FXSAVE and FXRSTOR instructions + * + * [Bit 9] When set, this flag: + * -# indicates to software that the operating system supports the use of the FXSAVE and FXRSTOR instructions, + * -# enables the FXSAVE and FXRSTOR instructions to save and restore the contents of the XMM and MXCSR registers along + * with the contents of the x87 FPU and MMX registers, and + * -# enables the processor to execute SSE/SSE2/SSE3/SSSE3/SSE4 instructions, with the exception of the PAUSE, PREFETCHh, + * SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT. + * If this flag is clear, the FXSAVE and FXRSTOR instructions will save and restore the contents of the x87 FPU and MMX + * registers, but they may not save and restore the contents of the XMM and MXCSR registers. Also, the processor will + * generate an invalid opcode exception (\#UD) if it attempts to execute any SSE/SSE2/SSE3 instruction, with the exception + * of PAUSE, PREFETCHh, SFENCE, LFENCE, MFENCE, MOVNTI, CLFLUSH, CRC32, and POPCNT. The operating system or executive must + * explicitly set this flag. + * + * @remarks CPUID feature flag FXSR indicates availability of the FXSAVE/FXRSTOR instructions. The OSFXSR bit provides + * operating system software with a means of enabling FXSAVE/FXRSTOR to save/restore the contents of the X87 FPU, XMM and + * MXCSR registers. Consequently OSFXSR bit indicates that the operating system provides context switch support for + * SSE/SSE2/SSE3/SSSE3/SSE4. + */ + uint64_t os_fxsave_fxrstor_support : 1; +#define CR4_OS_FXSAVE_FXRSTOR_SUPPORT_BIT 9 +#define CR4_OS_FXSAVE_FXRSTOR_SUPPORT_FLAG 0x200 +#define CR4_OS_FXSAVE_FXRSTOR_SUPPORT_MASK 0x01 +#define CR4_OS_FXSAVE_FXRSTOR_SUPPORT(_) (((_) >> 9) & 0x01) + + /** + * @brief Operating System Support for Unmasked SIMD Floating-Point Exceptions + * + * [Bit 10] Operating System Support for Unmasked SIMD Floating-Point Exceptions - When set, indicates that the operating + * system supports the handling of unmasked SIMD floating-point exceptions through an exception handler that is invoked + * when a SIMD floating-point exception (\#XM) is generated. SIMD floating-point exceptions are only generated by + * SSE/SSE2/SSE3/SSE4.1 SIMD floatingpoint instructions. + * The operating system or executive must explicitly set this flag. If this flag is not set, the processor will generate an + * invalid opcode exception (\#UD) whenever it detects an unmasked SIMD floating-point exception. + */ + uint64_t os_xmm_exception_support : 1; +#define CR4_OS_XMM_EXCEPTION_SUPPORT_BIT 10 +#define CR4_OS_XMM_EXCEPTION_SUPPORT_FLAG 0x400 +#define CR4_OS_XMM_EXCEPTION_SUPPORT_MASK 0x01 +#define CR4_OS_XMM_EXCEPTION_SUPPORT(_) (((_) >> 10) & 0x01) + + /** + * @brief User-Mode Instruction Prevention + * + * [Bit 11] When set, the following instructions cannot be executed if CPL > 0: SGDT, SIDT, SLDT, SMSW, and STR. An attempt + * at such execution causes a generalprotection exception (\#GP). + */ + uint64_t usermode_instruction_prevention : 1; +#define CR4_USERMODE_INSTRUCTION_PREVENTION_BIT 11 +#define CR4_USERMODE_INSTRUCTION_PREVENTION_FLAG 0x800 +#define CR4_USERMODE_INSTRUCTION_PREVENTION_MASK 0x01 +#define CR4_USERMODE_INSTRUCTION_PREVENTION(_) (((_) >> 11) & 0x01) + uint64_t reserved1 : 1; + + /** + * @brief VMX-Enable + * + * [Bit 13] Enables VMX operation when set. + * + * @see Vol3C[23(INTRODUCTION TO VIRTUAL MACHINE EXTENSIONS)] + */ + uint64_t vmx_enable : 1; +#define CR4_VMX_ENABLE_BIT 13 +#define CR4_VMX_ENABLE_FLAG 0x2000 +#define CR4_VMX_ENABLE_MASK 0x01 +#define CR4_VMX_ENABLE(_) (((_) >> 13) & 0x01) + + /** + * @brief SMX-Enable + * + * [Bit 14] Enables SMX operation when set. + * + * @see Vol2[6(SAFER MODE EXTENSIONS REFERENCE)] + */ + uint64_t smx_enable : 1; +#define CR4_SMX_ENABLE_BIT 14 +#define CR4_SMX_ENABLE_FLAG 0x4000 +#define CR4_SMX_ENABLE_MASK 0x01 +#define CR4_SMX_ENABLE(_) (((_) >> 14) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief FSGSBASE-Enable + * + * [Bit 16] Enables the instructions RDFSBASE, RDGSBASE, WRFSBASE, and WRGSBASE. + */ + uint64_t fsgsbase_enable : 1; +#define CR4_FSGSBASE_ENABLE_BIT 16 +#define CR4_FSGSBASE_ENABLE_FLAG 0x10000 +#define CR4_FSGSBASE_ENABLE_MASK 0x01 +#define CR4_FSGSBASE_ENABLE(_) (((_) >> 16) & 0x01) + + /** + * @brief PCID-Enable + * + * [Bit 17] Enables process-context identifiers (PCIDs) when set. Can be set only in IA-32e mode (if IA32_EFER.LMA = 1). + * + * @see Vol3A[4.10.1(Process-Context Identifiers (PCIDs))] + */ + uint64_t pcid_enable : 1; +#define CR4_PCID_ENABLE_BIT 17 +#define CR4_PCID_ENABLE_FLAG 0x20000 +#define CR4_PCID_ENABLE_MASK 0x01 +#define CR4_PCID_ENABLE(_) (((_) >> 17) & 0x01) + + /** + * @brief XSAVE and Processor Extended States-Enable + * + * [Bit 18] When set, this flag: + * -# indicates (via CPUID.01H:ECX.OSXSAVE[bit 27]) that the operating system supports the use of the XGETBV, XSAVE and + * XRSTOR instructions by general software; + * -# enables the XSAVE and XRSTOR instructions to save and restore the x87 FPU state (including MMX registers), the SSE + * state (XMM registers and MXCSR), along with other processor extended states enabled in XCR0; + * -# enables the processor to execute XGETBV and XSETBV instructions in order to read and write XCR0. + * + * @see Vol3A[2.6(EXTENDED CONTROL REGISTERS (INCLUDING XCR0))] + * @see Vol3A[13(SYSTEM PROGRAMMING FOR INSTRUCTION SET EXTENSIONS AND PROCESSOR EXTENDED)] + */ + uint64_t os_xsave : 1; +#define CR4_OS_XSAVE_BIT 18 +#define CR4_OS_XSAVE_FLAG 0x40000 +#define CR4_OS_XSAVE_MASK 0x01 +#define CR4_OS_XSAVE(_) (((_) >> 18) & 0x01) + uint64_t reserved3 : 1; + + /** + * @brief SMEP-Enable + * + * [Bit 20] Enables supervisor-mode execution prevention (SMEP) when set. + * + * @see Vol3A[4.6(ACCESS RIGHTS)] + */ + uint64_t smep_enable : 1; +#define CR4_SMEP_ENABLE_BIT 20 +#define CR4_SMEP_ENABLE_FLAG 0x100000 +#define CR4_SMEP_ENABLE_MASK 0x01 +#define CR4_SMEP_ENABLE(_) (((_) >> 20) & 0x01) + + /** + * @brief SMAP-Enable + * + * [Bit 21] Enables supervisor-mode access prevention (SMAP) when set. + * + * @see Vol3A[4.6(ACCESS RIGHTS)] + */ + uint64_t smap_enable : 1; +#define CR4_SMAP_ENABLE_BIT 21 +#define CR4_SMAP_ENABLE_FLAG 0x200000 +#define CR4_SMAP_ENABLE_MASK 0x01 +#define CR4_SMAP_ENABLE(_) (((_) >> 21) & 0x01) + + /** + * @brief Protection-Key-Enable + * + * [Bit 22] Enables 4-level paging to associate each linear address with a protection key. The PKRU register specifies, for + * each protection key, whether user-mode linear addresses with that protection key can be read or written. This bit also + * enables access to the PKRU register using the RDPKRU and WRPKRU instructions. + */ + uint64_t protection_key_enable : 1; +#define CR4_PROTECTION_KEY_ENABLE_BIT 22 +#define CR4_PROTECTION_KEY_ENABLE_FLAG 0x400000 +#define CR4_PROTECTION_KEY_ENABLE_MASK 0x01 +#define CR4_PROTECTION_KEY_ENABLE(_) (((_) >> 22) & 0x01) + uint64_t reserved4 : 41; + }; + + uint64_t flags; +} cr4; + +typedef union +{ + struct + { + /** + * @brief Task Priority Level + * + * [Bits 3:0] This sets the threshold value corresponding to the highestpriority interrupt to be blocked. A value of 0 + * means all interrupts are enabled. This field is available in 64- bit mode. A value of 15 means all interrupts will be + * disabled. + */ + uint64_t task_priority_level : 4; +#define CR8_TASK_PRIORITY_LEVEL_BIT 0 +#define CR8_TASK_PRIORITY_LEVEL_FLAG 0x0F +#define CR8_TASK_PRIORITY_LEVEL_MASK 0x0F +#define CR8_TASK_PRIORITY_LEVEL(_) (((_) >> 0) & 0x0F) + + /** + * @brief Reserved + * + * [Bits 63:4] Reserved and must be written with zeros. Failure to do this causes a general-protection exception. + */ + uint64_t reserved : 60; +#define CR8_RESERVED_BIT 4 +#define CR8_RESERVED_FLAG 0xFFFFFFFFFFFFFFF0 +#define CR8_RESERVED_MASK 0xFFFFFFFFFFFFFFF +#define CR8_RESERVED(_) (((_) >> 4) & 0xFFFFFFFFFFFFFFF) + }; + + uint64_t flags; +} cr8; + +/** + * @} + */ + + /** + * @defgroup debug_registers \ + * Debug registers + * + * Eight debug registers control the debug operation of the processor. These registers can be written to and read using the + * move to/from debug register form of the MOV instruction. A debug register may be the source or destination operand for + * one of these instructions. + * Debug registers are privileged resources; a MOV instruction that accesses these registers can only be executed in + * real-address mode, in SMM or in protected mode at a CPL of 0. An attempt to read or write the debug registers from any + * other privilege level generates a general-protection exception (\#GP). The primary function of the debug registers is to + * set up and monitor from 1 to 4 breakpoints, numbered 0 though 3. For each breakpoint, the following information can be + * specified: + * - The linear address where the breakpoint is to occur. + * - The length of the breakpoint location: 1, 2, 4, or 8 bytes. + * - The operation that must be performed at the address for a debug exception to be generated. + * - Whether the breakpoint is enabled. + * - Whether the breakpoint condition was present when the debug exception was generated. + * + * @see Vol3B[17.2.4(Debug Control Register (DR7))] + * @see Vol3B[17.2(DEBUG REGISTERS)] (reference) + * @{ + */ +typedef union +{ + struct + { + /** + * @brief B0 through B3 (breakpoint condition detected) flags + * + * [Bits 3:0] Indicates (when set) that its associated breakpoint condition was met when a debug exception was generated. + * These flags are set if the condition described for each breakpoint by the LENn, and R/Wn flags in debug control register + * DR7 is true. They may or may not be set if the breakpoint is not enabled by the Ln or the Gn flags in register DR7. + * Therefore on a \#DB, a debug handler should check only those B0-B3 bits which correspond to an enabled breakpoint. + */ + uint64_t breakpoint_condition : 4; +#define DR6_BREAKPOINT_CONDITION_BIT 0 +#define DR6_BREAKPOINT_CONDITION_FLAG 0x0F +#define DR6_BREAKPOINT_CONDITION_MASK 0x0F +#define DR6_BREAKPOINT_CONDITION(_) (((_) >> 0) & 0x0F) + uint64_t reserved1 : 9; + + /** + * @brief BD (debug register access detected) flag + * + * [Bit 13] Indicates that the next instruction in the instruction stream accesses one of the debug registers (DR0 through + * DR7). This flag is enabled when the GD (general detect) flag in debug control register DR7 is set. + * + * @see Vol3B[17.2.4(Debug Control Register (DR7))] + */ + uint64_t debug_register_access_detected : 1; +#define DR6_DEBUG_REGISTER_ACCESS_DETECTED_BIT 13 +#define DR6_DEBUG_REGISTER_ACCESS_DETECTED_FLAG 0x2000 +#define DR6_DEBUG_REGISTER_ACCESS_DETECTED_MASK 0x01 +#define DR6_DEBUG_REGISTER_ACCESS_DETECTED(_) (((_) >> 13) & 0x01) + + /** + * @brief BS (single step) flag + * + * [Bit 14] Indicates (when set) that the debug exception was triggered by the singlestep execution mode (enabled with the + * TF flag in the EFLAGS register). The single-step mode is the highestpriority debug exception. When the BS flag is set, + * any of the other debug status bits also may be set. + */ + uint64_t single_instruction : 1; +#define DR6_SINGLE_INSTRUCTION_BIT 14 +#define DR6_SINGLE_INSTRUCTION_FLAG 0x4000 +#define DR6_SINGLE_INSTRUCTION_MASK 0x01 +#define DR6_SINGLE_INSTRUCTION(_) (((_) >> 14) & 0x01) + + /** + * @brief BT (task switch) flag + * + * [Bit 15] Indicates (when set) that the debug exception was triggered by the singlestep execution mode (enabled with the + * TF flag in the EFLAGS register). The single-step mode is the highestpriority debug exception. When the BS flag is set, + * any of the other debug status bits also may be set. + */ + uint64_t task_switch : 1; +#define DR6_TASK_SWITCH_BIT 15 +#define DR6_TASK_SWITCH_FLAG 0x8000 +#define DR6_TASK_SWITCH_MASK 0x01 +#define DR6_TASK_SWITCH(_) (((_) >> 15) & 0x01) + + /** + * @brief RTM (restricted transactional memory) flag + * + * [Bit 16] Indicates (when clear) that a debug exception (\#DB) or breakpoint exception (\#BP) occurred inside an RTM + * region while advanced debugging of RTM transactional regions was enabled. This bit is set for any other debug exception + * (including all those that occur when advanced debugging of RTM transactional regions is not enabled). This bit is always + * 1 if the processor does not support RTM. + * + * @see Vol3B[17.3.3(Debug Exceptions, Breakpoint Exceptions, and Restricted Transactional Memory (RTM))] + */ + uint64_t restricted_transactional_memory : 1; +#define DR6_RESTRICTED_TRANSACTIONAL_MEMORY_BIT 16 +#define DR6_RESTRICTED_TRANSACTIONAL_MEMORY_FLAG 0x10000 +#define DR6_RESTRICTED_TRANSACTIONAL_MEMORY_MASK 0x01 +#define DR6_RESTRICTED_TRANSACTIONAL_MEMORY(_) (((_) >> 16) & 0x01) + uint64_t reserved2 : 47; + }; + + uint64_t flags; +} dr6; + +typedef union +{ + struct + { + /** + * @brief L0 through L3 (local breakpoint enable) flags (bits 0, 2, 4, and 6) + * + * [Bit 0] Enables (when set) the breakpoint condition for the associated breakpoint for the current task. When a + * breakpoint condition is detected and its associated Ln flag is set, a debug exception is generated. The processor + * automatically clears these flags on every task switch to avoid unwanted breakpoint conditions in the new task. + */ + uint64_t local_breakpoint_0 : 1; +#define DR7_LOCAL_BREAKPOINT_0_BIT 0 +#define DR7_LOCAL_BREAKPOINT_0_FLAG 0x01 +#define DR7_LOCAL_BREAKPOINT_0_MASK 0x01 +#define DR7_LOCAL_BREAKPOINT_0(_) (((_) >> 0) & 0x01) + + /** + * @brief G0 through G3 (global breakpoint enable) flags (bits 1, 3, 5, and 7) + * + * [Bit 1] Enables (when set) the breakpoint condition for the associated breakpoint for all tasks. When a breakpoint + * condition is detected and its associated Gn flag is set, a debug exception is generated. The processor does not clear + * these flags on a task switch, allowing a breakpoint to be enabled for all tasks. + */ + uint64_t global_breakpoint_0 : 1; +#define DR7_GLOBAL_BREAKPOINT_0_BIT 1 +#define DR7_GLOBAL_BREAKPOINT_0_FLAG 0x02 +#define DR7_GLOBAL_BREAKPOINT_0_MASK 0x01 +#define DR7_GLOBAL_BREAKPOINT_0(_) (((_) >> 1) & 0x01) + uint64_t local_breakpoint_1 : 1; +#define DR7_LOCAL_BREAKPOINT_1_BIT 2 +#define DR7_LOCAL_BREAKPOINT_1_FLAG 0x04 +#define DR7_LOCAL_BREAKPOINT_1_MASK 0x01 +#define DR7_LOCAL_BREAKPOINT_1(_) (((_) >> 2) & 0x01) + uint64_t global_breakpoint_1 : 1; +#define DR7_GLOBAL_BREAKPOINT_1_BIT 3 +#define DR7_GLOBAL_BREAKPOINT_1_FLAG 0x08 +#define DR7_GLOBAL_BREAKPOINT_1_MASK 0x01 +#define DR7_GLOBAL_BREAKPOINT_1(_) (((_) >> 3) & 0x01) + uint64_t local_breakpoint_2 : 1; +#define DR7_LOCAL_BREAKPOINT_2_BIT 4 +#define DR7_LOCAL_BREAKPOINT_2_FLAG 0x10 +#define DR7_LOCAL_BREAKPOINT_2_MASK 0x01 +#define DR7_LOCAL_BREAKPOINT_2(_) (((_) >> 4) & 0x01) + uint64_t global_breakpoint_2 : 1; +#define DR7_GLOBAL_BREAKPOINT_2_BIT 5 +#define DR7_GLOBAL_BREAKPOINT_2_FLAG 0x20 +#define DR7_GLOBAL_BREAKPOINT_2_MASK 0x01 +#define DR7_GLOBAL_BREAKPOINT_2(_) (((_) >> 5) & 0x01) + uint64_t local_breakpoint_3 : 1; +#define DR7_LOCAL_BREAKPOINT_3_BIT 6 +#define DR7_LOCAL_BREAKPOINT_3_FLAG 0x40 +#define DR7_LOCAL_BREAKPOINT_3_MASK 0x01 +#define DR7_LOCAL_BREAKPOINT_3(_) (((_) >> 6) & 0x01) + uint64_t global_breakpoint_3 : 1; +#define DR7_GLOBAL_BREAKPOINT_3_BIT 7 +#define DR7_GLOBAL_BREAKPOINT_3_FLAG 0x80 +#define DR7_GLOBAL_BREAKPOINT_3_MASK 0x01 +#define DR7_GLOBAL_BREAKPOINT_3(_) (((_) >> 7) & 0x01) + + /** + * @brief LE (local exact breakpoint enable) + * + * [Bit 8] This feature is not supported in the P6 family processors, later IA-32 processors, and Intel 64 processors. When + * set, these flags cause the processor to detect the exact instruction that caused a data breakpoint condition. For + * backward and forward compatibility with other Intel processors, we recommend that the LE and GE flags be set to 1 if + * exact breakpoints are required. + */ + uint64_t local_exact_breakpoint : 1; +#define DR7_LOCAL_EXACT_BREAKPOINT_BIT 8 +#define DR7_LOCAL_EXACT_BREAKPOINT_FLAG 0x100 +#define DR7_LOCAL_EXACT_BREAKPOINT_MASK 0x01 +#define DR7_LOCAL_EXACT_BREAKPOINT(_) (((_) >> 8) & 0x01) + uint64_t global_exact_breakpoint : 1; +#define DR7_GLOBAL_EXACT_BREAKPOINT_BIT 9 +#define DR7_GLOBAL_EXACT_BREAKPOINT_FLAG 0x200 +#define DR7_GLOBAL_EXACT_BREAKPOINT_MASK 0x01 +#define DR7_GLOBAL_EXACT_BREAKPOINT(_) (((_) >> 9) & 0x01) + uint64_t reserved1 : 1; + + /** + * @brief RTM (restricted transactional memory) flag + * + * [Bit 11] Enables (when set) advanced debugging of RTM transactional regions. This advanced debugging is enabled only if + * IA32_DEBUGCTL.RTM is also set. + * + * @see Vol3B[17.3.3(Debug Exceptions, Breakpoint Exceptions, and Restricted Transactional Memory (RTM))] + */ + uint64_t restricted_transactional_memory : 1; +#define DR7_RESTRICTED_TRANSACTIONAL_MEMORY_BIT 11 +#define DR7_RESTRICTED_TRANSACTIONAL_MEMORY_FLAG 0x800 +#define DR7_RESTRICTED_TRANSACTIONAL_MEMORY_MASK 0x01 +#define DR7_RESTRICTED_TRANSACTIONAL_MEMORY(_) (((_) >> 11) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief GD (general detect enable) flag + * + * [Bit 13] Enables (when set) debug-register protection, which causes a debug exception to be generated prior to any MOV + * instruction that accesses a debug register. When such a condition is detected, the BD flag in debug status register DR6 + * is set prior to generating the exception. This condition is provided to support in-circuit emulators. + * When the emulator needs to access the debug registers, emulator software can set the GD flag to prevent interference + * from the program currently executing on the processor. + * The processor clears the GD flag upon entering to the debug exception handler, to allow the handler access to the debug + * registers. + */ + uint64_t general_detect : 1; +#define DR7_GENERAL_DETECT_BIT 13 +#define DR7_GENERAL_DETECT_FLAG 0x2000 +#define DR7_GENERAL_DETECT_MASK 0x01 +#define DR7_GENERAL_DETECT(_) (((_) >> 13) & 0x01) + uint64_t reserved3 : 2; + + /** + * @brief R/W0 through R/W3 (read/write) fields (bits 16, 17, 20, 21, 24, 25, 28, and 29) + * + * [Bits 17:16] Specifies the breakpoint condition for the corresponding breakpoint. The DE (debug extensions) flag in + * control register CR4 determines how the bits in the R/Wn fields are interpreted. When the DE flag is set, the processor + * interprets bits as follows: + * - 00 - Break on instruction execution only. + * - 01 - Break on data writes only. + * - 10 - Break on I/O reads or writes. + * - 11 - Break on data reads or writes but not instruction fetches. + * When the DE flag is clear, the processor interprets the R/Wn bits the same as for the Intel386(TM) and Intel486(TM) + * processors, which is as follows: + * - 00 - Break on instruction execution only. + * - 01 - Break on data writes only. + * - 10 - Undefined. + * - 11 - Break on data reads or writes but not instruction fetches. + */ + uint64_t read_write_0 : 2; +#define DR7_READ_WRITE_0_BIT 16 +#define DR7_READ_WRITE_0_FLAG 0x30000 +#define DR7_READ_WRITE_0_MASK 0x03 +#define DR7_READ_WRITE_0(_) (((_) >> 16) & 0x03) + + /** + * @brief LEN0 through LEN3 (Length) fields (bits 18, 19, 22, 23, 26, 27, 30, and 31) + * + * [Bits 19:18] Specify the size of the memory location at the address specified in the corresponding breakpoint address + * register (DR0 through DR3). These fields are interpreted as follows: + * - 00 - 1-byte length. + * - 01 - 2-byte length. + * - 10 - Undefined (or 8 byte length, see note below). + * - 11 - 4-byte length. + * If the corresponding RWn field in register DR7 is 00 (instruction execution), then the LENn field should also be 00. The + * effect of using other lengths is undefined. + * + * @see Vol3B[17.2.5(Breakpoint Field Recognition)] + */ + uint64_t length_0 : 2; +#define DR7_LENGTH_0_BIT 18 +#define DR7_LENGTH_0_FLAG 0xC0000 +#define DR7_LENGTH_0_MASK 0x03 +#define DR7_LENGTH_0(_) (((_) >> 18) & 0x03) + uint64_t read_write_1 : 2; +#define DR7_READ_WRITE_1_BIT 20 +#define DR7_READ_WRITE_1_FLAG 0x300000 +#define DR7_READ_WRITE_1_MASK 0x03 +#define DR7_READ_WRITE_1(_) (((_) >> 20) & 0x03) + uint64_t length_1 : 2; +#define DR7_LENGTH_1_BIT 22 +#define DR7_LENGTH_1_FLAG 0xC00000 +#define DR7_LENGTH_1_MASK 0x03 +#define DR7_LENGTH_1(_) (((_) >> 22) & 0x03) + uint64_t read_write_2 : 2; +#define DR7_READ_WRITE_2_BIT 24 +#define DR7_READ_WRITE_2_FLAG 0x3000000 +#define DR7_READ_WRITE_2_MASK 0x03 +#define DR7_READ_WRITE_2(_) (((_) >> 24) & 0x03) + uint64_t length_2 : 2; +#define DR7_LENGTH_2_BIT 26 +#define DR7_LENGTH_2_FLAG 0xC000000 +#define DR7_LENGTH_2_MASK 0x03 +#define DR7_LENGTH_2(_) (((_) >> 26) & 0x03) + uint64_t read_write_3 : 2; +#define DR7_READ_WRITE_3_BIT 28 +#define DR7_READ_WRITE_3_FLAG 0x30000000 +#define DR7_READ_WRITE_3_MASK 0x03 +#define DR7_READ_WRITE_3(_) (((_) >> 28) & 0x03) + uint64_t length_3 : 2; +#define DR7_LENGTH_3_BIT 30 +#define DR7_LENGTH_3_FLAG 0xC0000000 +#define DR7_LENGTH_3_MASK 0x03 +#define DR7_LENGTH_3(_) (((_) >> 30) & 0x03) + uint64_t reserved4 : 32; + }; + + uint64_t flags; +} dr7; + +/** + * @} + */ + + /** + * @defgroup cpuid \ + * CPUID + * + * @see Vol2A[3.2(CPUID)] (reference) + * @{ + */ + /** + * @brief Returns CPUID's Highest Value for Basic Processor Information and the Vendor Identification String + * + * When CPUID executes with EAX set to 0, the processor returns the highest value the CPUID recognizes for returning basic + * processor information. The value is returned in the EAX register and is processor specific. + * A vendor identification string is also returned in EBX, EDX, and ECX. For Intel processors, the string is "GenuineIntel" + * and is expressed: + * - EBX <- 756e6547h (* "Genu", with G in the low eight bits of BL *) + * - EDX <- 49656e69h (* "ineI", with i in the low eight bits of DL *) + * - ECX <- 6c65746eh (* "ntel", with n in the low eight bits of CL *) + */ +#define CPUID_SIGNATURE 0x00000000 +typedef struct +{ + /** + * @brief EAX + * + * Maximum Input Value for Basic CPUID Information. + */ + uint32_t max_cpuid_input_value; + + /** + * @brief EBX + * + * "Genu" + */ + uint32_t ebx_value_genu; + + /** + * @brief ECX + * + * "ntel" + */ + uint32_t ecx_value_ntel; + + /** + * @brief EDX + * + * "ineI" + */ + uint32_t edx_value_inei; +} cpuid_eax_00; + + +/** + * @brief Returns Model, Family, Stepping Information, Additional Information and Feature Information + * + * Returns: + * * Model, Family, Stepping Information in EAX + * * Additional Information in EBX + * * Feature Information in ECX and EDX + */ +#define CPUID_VERSION_INFORMATION 0x00000001 +typedef struct +{ + /** + * @brief When CPUID executes with EAX set to 01H, version information is returned in EAX + */ + union + { + struct + { + uint32_t stepping_id : 4; +#define CPUID_VERSION_INFORMATION_STEPPING_ID_BIT 0 +#define CPUID_VERSION_INFORMATION_STEPPING_ID_FLAG 0x0F +#define CPUID_VERSION_INFORMATION_STEPPING_ID_MASK 0x0F +#define CPUID_VERSION_INFORMATION_STEPPING_ID(_) (((_) >> 0) & 0x0F) + uint32_t model : 4; +#define CPUID_VERSION_INFORMATION_MODEL_BIT 4 +#define CPUID_VERSION_INFORMATION_MODEL_FLAG 0xF0 +#define CPUID_VERSION_INFORMATION_MODEL_MASK 0x0F +#define CPUID_VERSION_INFORMATION_MODEL(_) (((_) >> 4) & 0x0F) + uint32_t family_id : 4; +#define CPUID_VERSION_INFORMATION_FAMILY_ID_BIT 8 +#define CPUID_VERSION_INFORMATION_FAMILY_ID_FLAG 0xF00 +#define CPUID_VERSION_INFORMATION_FAMILY_ID_MASK 0x0F +#define CPUID_VERSION_INFORMATION_FAMILY_ID(_) (((_) >> 8) & 0x0F) + + /** + * [Bits 13:12] - 0 - Original OEM Processor + * - 1 - Intel OverDrive(R) Processor + * - 2 - Dual processor (not applicable to Intel486 processors) + * - 3 - Intel reserved + */ + uint32_t processor_type : 2; +#define CPUID_VERSION_INFORMATION_PROCESSOR_TYPE_BIT 12 +#define CPUID_VERSION_INFORMATION_PROCESSOR_TYPE_FLAG 0x3000 +#define CPUID_VERSION_INFORMATION_PROCESSOR_TYPE_MASK 0x03 +#define CPUID_VERSION_INFORMATION_PROCESSOR_TYPE(_) (((_) >> 12) & 0x03) + uint32_t reserved1 : 2; + + /** + * [Bits 19:16] The Extended Model ID needs to be examined only when the Family ID is 06H or 0FH. + */ + uint32_t extended_model_id : 4; +#define CPUID_VERSION_INFORMATION_EXTENDED_MODEL_ID_BIT 16 +#define CPUID_VERSION_INFORMATION_EXTENDED_MODEL_ID_FLAG 0xF0000 +#define CPUID_VERSION_INFORMATION_EXTENDED_MODEL_ID_MASK 0x0F +#define CPUID_VERSION_INFORMATION_EXTENDED_MODEL_ID(_) (((_) >> 16) & 0x0F) + + /** + * [Bits 27:20] The Extended Family ID needs to be examined only when the Family ID is 0FH. + */ + uint32_t extended_family_id : 8; +#define CPUID_VERSION_INFORMATION_EXTENDED_FAMILY_ID_BIT 20 +#define CPUID_VERSION_INFORMATION_EXTENDED_FAMILY_ID_FLAG 0xFF00000 +#define CPUID_VERSION_INFORMATION_EXTENDED_FAMILY_ID_MASK 0xFF +#define CPUID_VERSION_INFORMATION_EXTENDED_FAMILY_ID(_) (((_) >> 20) & 0xFF) + uint32_t reserved2 : 4; + }; + + uint32_t flags; + } cpuid_version_information; + + /** + * @brief When CPUID executes with EAX set to 01H, additional information is returned to the EBX register + */ + union + { + struct + { + /** + * [Bits 7:0] This number provides an entry into a brand string table that contains brand strings for IA-32 processors. + * More information about this field is provided later in this section. + */ + uint32_t brand_index : 8; +#define CPUID_ADDITIONAL_INFORMATION_BRAND_INDEX_BIT 0 +#define CPUID_ADDITIONAL_INFORMATION_BRAND_INDEX_FLAG 0xFF +#define CPUID_ADDITIONAL_INFORMATION_BRAND_INDEX_MASK 0xFF +#define CPUID_ADDITIONAL_INFORMATION_BRAND_INDEX(_) (((_) >> 0) & 0xFF) + + /** + * @brief Value * 8 = cache line size in bytes; used also by CLFLUSHOPT + * + * [Bits 15:8] This number indicates the size of the cache line flushed by the CLFLUSH and CLFLUSHOPT instructions in + * 8-byte increments. This field was introduced in the Pentium 4 processor. + */ + uint32_t clflush_line_size : 8; +#define CPUID_ADDITIONAL_INFORMATION_CLFLUSH_LINE_SIZE_BIT 8 +#define CPUID_ADDITIONAL_INFORMATION_CLFLUSH_LINE_SIZE_FLAG 0xFF00 +#define CPUID_ADDITIONAL_INFORMATION_CLFLUSH_LINE_SIZE_MASK 0xFF +#define CPUID_ADDITIONAL_INFORMATION_CLFLUSH_LINE_SIZE(_) (((_) >> 8) & 0xFF) + + /** + * [Bits 23:16] Maximum number of addressable IDs for logical processors in this physical package. + * + * @remarks The nearest power-of-2 integer that is not smaller than EBX[23:16] is the number of unique initial APIC IDs + * reserved for addressing different logical processors in a physical package. This field is only valid if + * CPUID.1.EDX.HTT[bit 28] = 1. + */ + uint32_t max_addressable_ids : 8; +#define CPUID_ADDITIONAL_INFORMATION_MAX_ADDRESSABLE_IDS_BIT 16 +#define CPUID_ADDITIONAL_INFORMATION_MAX_ADDRESSABLE_IDS_FLAG 0xFF0000 +#define CPUID_ADDITIONAL_INFORMATION_MAX_ADDRESSABLE_IDS_MASK 0xFF +#define CPUID_ADDITIONAL_INFORMATION_MAX_ADDRESSABLE_IDS(_) (((_) >> 16) & 0xFF) + + /** + * [Bits 31:24] This number is the 8-bit ID that is assigned to the local APIC on the processor during power up. This field + * was introduced in the Pentium 4 processor. + */ + uint32_t initial_apic_id : 8; +#define CPUID_ADDITIONAL_INFORMATION_INITIAL_APIC_ID_BIT 24 +#define CPUID_ADDITIONAL_INFORMATION_INITIAL_APIC_ID_FLAG 0xFF000000 +#define CPUID_ADDITIONAL_INFORMATION_INITIAL_APIC_ID_MASK 0xFF +#define CPUID_ADDITIONAL_INFORMATION_INITIAL_APIC_ID(_) (((_) >> 24) & 0xFF) + }; + + uint32_t flags; + } cpuid_additional_information; + + /** + * @brief When CPUID executes with EAX set to 01H, feature information is reurned in ECX and EDtX + */ + union + { + struct + { + /** + * @brief Streaming SIMD Extensions 3 (SSE3) + * + * [Bit 0] A value of 1 indicates the processor supports this technology. + */ + uint32_t streaming_simd_extensions_3 : 1; +#define CPUID_FEATURE_INFORMATION_ECX_STREAMING_SIMD_EXTENSIONS_3_BIT 0 +#define CPUID_FEATURE_INFORMATION_ECX_STREAMING_SIMD_EXTENSIONS_3_FLAG 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_STREAMING_SIMD_EXTENSIONS_3_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_STREAMING_SIMD_EXTENSIONS_3(_) (((_) >> 0) & 0x01) + + /** + * @brief PCLMULQDQ instruction + * + * [Bit 1] A value of 1 indicates the processor supports the PCLMULQDQ instruction. + */ + uint32_t pclmulqdq_instruction : 1; +#define CPUID_FEATURE_INFORMATION_ECX_PCLMULQDQ_INSTRUCTION_BIT 1 +#define CPUID_FEATURE_INFORMATION_ECX_PCLMULQDQ_INSTRUCTION_FLAG 0x02 +#define CPUID_FEATURE_INFORMATION_ECX_PCLMULQDQ_INSTRUCTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_PCLMULQDQ_INSTRUCTION(_) (((_) >> 1) & 0x01) + + /** + * @brief 64-bit DS Area + * + * [Bit 2] A value of 1 indicates the processor supports DS area using 64-bit layout. + */ + uint32_t ds_area_64bit_layout : 1; +#define CPUID_FEATURE_INFORMATION_ECX_DS_AREA_64BIT_LAYOUT_BIT 2 +#define CPUID_FEATURE_INFORMATION_ECX_DS_AREA_64BIT_LAYOUT_FLAG 0x04 +#define CPUID_FEATURE_INFORMATION_ECX_DS_AREA_64BIT_LAYOUT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_DS_AREA_64BIT_LAYOUT(_) (((_) >> 2) & 0x01) + + /** + * @brief MONITOR/MWAIT instruction + * + * [Bit 3] A value of 1 indicates the processor supports this feature. + */ + uint32_t monitor_mwait_instruction : 1; +#define CPUID_FEATURE_INFORMATION_ECX_MONITOR_MWAIT_INSTRUCTION_BIT 3 +#define CPUID_FEATURE_INFORMATION_ECX_MONITOR_MWAIT_INSTRUCTION_FLAG 0x08 +#define CPUID_FEATURE_INFORMATION_ECX_MONITOR_MWAIT_INSTRUCTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_MONITOR_MWAIT_INSTRUCTION(_) (((_) >> 3) & 0x01) + + /** + * @brief CPL Qualified Debug Store + * + * [Bit 4] A value of 1 indicates the processor supports the extensions to the Debug Store feature to allow for branch + * message storage qualified by CPL. + */ + uint32_t cpl_qualified_debug_store : 1; +#define CPUID_FEATURE_INFORMATION_ECX_CPL_QUALIFIED_DEBUG_STORE_BIT 4 +#define CPUID_FEATURE_INFORMATION_ECX_CPL_QUALIFIED_DEBUG_STORE_FLAG 0x10 +#define CPUID_FEATURE_INFORMATION_ECX_CPL_QUALIFIED_DEBUG_STORE_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_CPL_QUALIFIED_DEBUG_STORE(_) (((_) >> 4) & 0x01) + + /** + * @brief Virtual Machine Extensions + * + * [Bit 5] A value of 1 indicates that the processor supports this technology. + */ + uint32_t virtual_machine_extensions : 1; +#define CPUID_FEATURE_INFORMATION_ECX_VIRTUAL_MACHINE_EXTENSIONS_BIT 5 +#define CPUID_FEATURE_INFORMATION_ECX_VIRTUAL_MACHINE_EXTENSIONS_FLAG 0x20 +#define CPUID_FEATURE_INFORMATION_ECX_VIRTUAL_MACHINE_EXTENSIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_VIRTUAL_MACHINE_EXTENSIONS(_) (((_) >> 5) & 0x01) + + /** + * @brief Safer Mode Extensions + * + * [Bit 6] A value of 1 indicates that the processor supports this technology. + * + * @see Vol2[6(SAFER MODE EXTENSIONS REFERENCE)] + */ + uint32_t safer_mode_extensions : 1; +#define CPUID_FEATURE_INFORMATION_ECX_SAFER_MODE_EXTENSIONS_BIT 6 +#define CPUID_FEATURE_INFORMATION_ECX_SAFER_MODE_EXTENSIONS_FLAG 0x40 +#define CPUID_FEATURE_INFORMATION_ECX_SAFER_MODE_EXTENSIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_SAFER_MODE_EXTENSIONS(_) (((_) >> 6) & 0x01) + + /** + * @brief Enhanced Intel SpeedStep(R) technology + * + * [Bit 7] A value of 1 indicates that the processor supports this technology. + */ + uint32_t enhanced_intel_speedstep_technology : 1; +#define CPUID_FEATURE_INFORMATION_ECX_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY_BIT 7 +#define CPUID_FEATURE_INFORMATION_ECX_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY_FLAG 0x80 +#define CPUID_FEATURE_INFORMATION_ECX_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY(_) (((_) >> 7) & 0x01) + + /** + * @brief Thermal Monitor 2 + * + * [Bit 8] A value of 1 indicates whether the processor supports this technology. + */ + uint32_t thermal_monitor_2 : 1; +#define CPUID_FEATURE_INFORMATION_ECX_THERMAL_MONITOR_2_BIT 8 +#define CPUID_FEATURE_INFORMATION_ECX_THERMAL_MONITOR_2_FLAG 0x100 +#define CPUID_FEATURE_INFORMATION_ECX_THERMAL_MONITOR_2_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_THERMAL_MONITOR_2(_) (((_) >> 8) & 0x01) + + /** + * @brief Supplemental Streaming SIMD Extensions 3 (SSSE3) + * + * [Bit 9] A value of 1 indicates the presence of the Supplemental Streaming SIMD Extensions 3 (SSSE3). A value of 0 + * indicates the instruction extensions are not present in the processor. + */ + uint32_t supplemental_streaming_simd_extensions_3 : 1; +#define CPUID_FEATURE_INFORMATION_ECX_SUPPLEMENTAL_STREAMING_SIMD_EXTENSIONS_3_BIT 9 +#define CPUID_FEATURE_INFORMATION_ECX_SUPPLEMENTAL_STREAMING_SIMD_EXTENSIONS_3_FLAG 0x200 +#define CPUID_FEATURE_INFORMATION_ECX_SUPPLEMENTAL_STREAMING_SIMD_EXTENSIONS_3_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_SUPPLEMENTAL_STREAMING_SIMD_EXTENSIONS_3(_) (((_) >> 9) & 0x01) + + /** + * @brief L1 Context ID + * + * [Bit 10] A value of 1 indicates the L1 data cache mode can be set to either adaptive mode or shared mode. A value of 0 + * indicates this feature is not supported. See definition of the IA32_MISC_ENABLE MSR Bit 24 (L1 Data Cache Context Mode) + * for details. + */ + uint32_t l1_context_id : 1; +#define CPUID_FEATURE_INFORMATION_ECX_L1_CONTEXT_ID_BIT 10 +#define CPUID_FEATURE_INFORMATION_ECX_L1_CONTEXT_ID_FLAG 0x400 +#define CPUID_FEATURE_INFORMATION_ECX_L1_CONTEXT_ID_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_L1_CONTEXT_ID(_) (((_) >> 10) & 0x01) + + /** + * @brief IA32_DEBUG_INTERFACE MSR for silicon debug + * + * [Bit 11] A value of 1 indicates the processor supports IA32_DEBUG_INTERFACE MSR for silicon debug. + */ + uint32_t silicon_debug : 1; +#define CPUID_FEATURE_INFORMATION_ECX_SILICON_DEBUG_BIT 11 +#define CPUID_FEATURE_INFORMATION_ECX_SILICON_DEBUG_FLAG 0x800 +#define CPUID_FEATURE_INFORMATION_ECX_SILICON_DEBUG_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_SILICON_DEBUG(_) (((_) >> 11) & 0x01) + + /** + * @brief FMA extensions using YMM state + * + * [Bit 12] A value of 1 indicates the processor supports FMA (Fused Multiple Add) extensions using YMM state. + */ + uint32_t fma_extensions : 1; +#define CPUID_FEATURE_INFORMATION_ECX_FMA_EXTENSIONS_BIT 12 +#define CPUID_FEATURE_INFORMATION_ECX_FMA_EXTENSIONS_FLAG 0x1000 +#define CPUID_FEATURE_INFORMATION_ECX_FMA_EXTENSIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_FMA_EXTENSIONS(_) (((_) >> 12) & 0x01) + + /** + * @brief CMPXCHG16B instruction + * + * [Bit 13] A value of 1 indicates that the feature is available. + */ + uint32_t cmpxchg16b_instruction : 1; +#define CPUID_FEATURE_INFORMATION_ECX_CMPXCHG16B_INSTRUCTION_BIT 13 +#define CPUID_FEATURE_INFORMATION_ECX_CMPXCHG16B_INSTRUCTION_FLAG 0x2000 +#define CPUID_FEATURE_INFORMATION_ECX_CMPXCHG16B_INSTRUCTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_CMPXCHG16B_INSTRUCTION(_) (((_) >> 13) & 0x01) + + /** + * @brief xTPR Update Control + * + * [Bit 14] A value of 1 indicates that the processor supports changing IA32_MISC_ENABLE[bit 23]. + */ + uint32_t xtpr_update_control : 1; +#define CPUID_FEATURE_INFORMATION_ECX_XTPR_UPDATE_CONTROL_BIT 14 +#define CPUID_FEATURE_INFORMATION_ECX_XTPR_UPDATE_CONTROL_FLAG 0x4000 +#define CPUID_FEATURE_INFORMATION_ECX_XTPR_UPDATE_CONTROL_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_XTPR_UPDATE_CONTROL(_) (((_) >> 14) & 0x01) + + /** + * @brief Perfmon and Debug Capability + * + * [Bit 15] A value of 1 indicates the processor supports the performance and debug feature indication MSR + * IA32_PERF_CAPABILITIES. + */ + uint32_t perfmon_and_debug_capability : 1; +#define CPUID_FEATURE_INFORMATION_ECX_PERFMON_AND_DEBUG_CAPABILITY_BIT 15 +#define CPUID_FEATURE_INFORMATION_ECX_PERFMON_AND_DEBUG_CAPABILITY_FLAG 0x8000 +#define CPUID_FEATURE_INFORMATION_ECX_PERFMON_AND_DEBUG_CAPABILITY_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_PERFMON_AND_DEBUG_CAPABILITY(_) (((_) >> 15) & 0x01) + uint32_t reserved1 : 1; + + /** + * @brief Process-context identifiers + * + * [Bit 17] A value of 1 indicates that the processor supports PCIDs and that software may set CR4.PCIDE to 1. + */ + uint32_t process_context_identifiers : 1; +#define CPUID_FEATURE_INFORMATION_ECX_PROCESS_CONTEXT_IDENTIFIERS_BIT 17 +#define CPUID_FEATURE_INFORMATION_ECX_PROCESS_CONTEXT_IDENTIFIERS_FLAG 0x20000 +#define CPUID_FEATURE_INFORMATION_ECX_PROCESS_CONTEXT_IDENTIFIERS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_PROCESS_CONTEXT_IDENTIFIERS(_) (((_) >> 17) & 0x01) + + /** + * @brief Direct Cache Access + * + * [Bit 18] A value of 1 indicates the processor supports the ability to prefetch data from a memory mapped device (Direct + * Cache Access). + */ + uint32_t direct_cache_access : 1; +#define CPUID_FEATURE_INFORMATION_ECX_DIRECT_CACHE_ACCESS_BIT 18 +#define CPUID_FEATURE_INFORMATION_ECX_DIRECT_CACHE_ACCESS_FLAG 0x40000 +#define CPUID_FEATURE_INFORMATION_ECX_DIRECT_CACHE_ACCESS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_DIRECT_CACHE_ACCESS(_) (((_) >> 18) & 0x01) + + /** + * @brief SSE4.1 support + * + * [Bit 19] A value of 1 indicates that the processor supports SSE4.1. + */ + uint32_t sse41_support : 1; +#define CPUID_FEATURE_INFORMATION_ECX_SSE41_SUPPORT_BIT 19 +#define CPUID_FEATURE_INFORMATION_ECX_SSE41_SUPPORT_FLAG 0x80000 +#define CPUID_FEATURE_INFORMATION_ECX_SSE41_SUPPORT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_SSE41_SUPPORT(_) (((_) >> 19) & 0x01) + + /** + * @brief SSE4.2 support + * + * [Bit 20] A value of 1 indicates that the processor supports SSE4.2. + */ + uint32_t sse42_support : 1; +#define CPUID_FEATURE_INFORMATION_ECX_SSE42_SUPPORT_BIT 20 +#define CPUID_FEATURE_INFORMATION_ECX_SSE42_SUPPORT_FLAG 0x100000 +#define CPUID_FEATURE_INFORMATION_ECX_SSE42_SUPPORT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_SSE42_SUPPORT(_) (((_) >> 20) & 0x01) + + /** + * @brief x2APIC support + * + * [Bit 21] A value of 1 indicates that the processor supports x2APIC feature. + */ + uint32_t x2apic_support : 1; +#define CPUID_FEATURE_INFORMATION_ECX_X2APIC_SUPPORT_BIT 21 +#define CPUID_FEATURE_INFORMATION_ECX_X2APIC_SUPPORT_FLAG 0x200000 +#define CPUID_FEATURE_INFORMATION_ECX_X2APIC_SUPPORT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_X2APIC_SUPPORT(_) (((_) >> 21) & 0x01) + + /** + * @brief MOVBE instruction + * + * [Bit 22] A value of 1 indicates that the processor supports MOVBE instruction. + */ + uint32_t movbe_instruction : 1; +#define CPUID_FEATURE_INFORMATION_ECX_MOVBE_INSTRUCTION_BIT 22 +#define CPUID_FEATURE_INFORMATION_ECX_MOVBE_INSTRUCTION_FLAG 0x400000 +#define CPUID_FEATURE_INFORMATION_ECX_MOVBE_INSTRUCTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_MOVBE_INSTRUCTION(_) (((_) >> 22) & 0x01) + + /** + * @brief POPCNT instruction + * + * [Bit 23] A value of 1 indicates that the processor supports the POPCNT instruction. + */ + uint32_t popcnt_instruction : 1; +#define CPUID_FEATURE_INFORMATION_ECX_POPCNT_INSTRUCTION_BIT 23 +#define CPUID_FEATURE_INFORMATION_ECX_POPCNT_INSTRUCTION_FLAG 0x800000 +#define CPUID_FEATURE_INFORMATION_ECX_POPCNT_INSTRUCTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_POPCNT_INSTRUCTION(_) (((_) >> 23) & 0x01) + + /** + * @brief TSC Deadline + * + * [Bit 24] A value of 1 indicates that the processor's local APIC timer supports one-shot operation using a TSC deadline + * value. + */ + uint32_t tsc_deadline : 1; +#define CPUID_FEATURE_INFORMATION_ECX_TSC_DEADLINE_BIT 24 +#define CPUID_FEATURE_INFORMATION_ECX_TSC_DEADLINE_FLAG 0x1000000 +#define CPUID_FEATURE_INFORMATION_ECX_TSC_DEADLINE_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_TSC_DEADLINE(_) (((_) >> 24) & 0x01) + + /** + * @brief AESNI instruction extensions + * + * [Bit 25] A value of 1 indicates that the processor supports the AESNI instruction extensions. + */ + uint32_t aesni_instruction_extensions : 1; +#define CPUID_FEATURE_INFORMATION_ECX_AESNI_INSTRUCTION_EXTENSIONS_BIT 25 +#define CPUID_FEATURE_INFORMATION_ECX_AESNI_INSTRUCTION_EXTENSIONS_FLAG 0x2000000 +#define CPUID_FEATURE_INFORMATION_ECX_AESNI_INSTRUCTION_EXTENSIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_AESNI_INSTRUCTION_EXTENSIONS(_) (((_) >> 25) & 0x01) + + /** + * @brief XSAVE/XRSTOR instruction extensions + * + * [Bit 26] A value of 1 indicates that the processor supports the XSAVE/XRSTOR processor extended states feature, the + * XSETBV/XGETBV instructions, and XCR0. + */ + uint32_t xsave_xrstor_instruction : 1; +#define CPUID_FEATURE_INFORMATION_ECX_XSAVE_XRSTOR_INSTRUCTION_BIT 26 +#define CPUID_FEATURE_INFORMATION_ECX_XSAVE_XRSTOR_INSTRUCTION_FLAG 0x4000000 +#define CPUID_FEATURE_INFORMATION_ECX_XSAVE_XRSTOR_INSTRUCTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_XSAVE_XRSTOR_INSTRUCTION(_) (((_) >> 26) & 0x01) + + /** + * @brief CR4.OSXSAVE[bit 18] set + * + * [Bit 27] A value of 1 indicates that the OS has set CR4.OSXSAVE[bit 18] to enable XSETBV/XGETBV instructions to access + * XCR0 and to support processor extended state management using XSAVE/XRSTOR. + */ + uint32_t osx_save : 1; +#define CPUID_FEATURE_INFORMATION_ECX_OSX_SAVE_BIT 27 +#define CPUID_FEATURE_INFORMATION_ECX_OSX_SAVE_FLAG 0x8000000 +#define CPUID_FEATURE_INFORMATION_ECX_OSX_SAVE_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_OSX_SAVE(_) (((_) >> 27) & 0x01) + + /** + * @brief AVX instruction extensions support + * + * [Bit 28] A value of 1 indicates the processor supports the AVX instruction extensions. + */ + uint32_t avx_support : 1; +#define CPUID_FEATURE_INFORMATION_ECX_AVX_SUPPORT_BIT 28 +#define CPUID_FEATURE_INFORMATION_ECX_AVX_SUPPORT_FLAG 0x10000000 +#define CPUID_FEATURE_INFORMATION_ECX_AVX_SUPPORT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_AVX_SUPPORT(_) (((_) >> 28) & 0x01) + + /** + * @brief 16-bit floating-point conversion instructions support + * + * [Bit 29] A value of 1 indicates that processor supports 16-bit floating-point conversion instructions. + */ + uint32_t half_precision_conversion_instructions : 1; +#define CPUID_FEATURE_INFORMATION_ECX_HALF_PRECISION_CONVERSION_INSTRUCTIONS_BIT 29 +#define CPUID_FEATURE_INFORMATION_ECX_HALF_PRECISION_CONVERSION_INSTRUCTIONS_FLAG 0x20000000 +#define CPUID_FEATURE_INFORMATION_ECX_HALF_PRECISION_CONVERSION_INSTRUCTIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_HALF_PRECISION_CONVERSION_INSTRUCTIONS(_) (((_) >> 29) & 0x01) + + /** + * @brief RDRAND instruction support + * + * [Bit 30] A value of 1 indicates that processor supports RDRAND instruction. + */ + uint32_t rdrand_instruction : 1; +#define CPUID_FEATURE_INFORMATION_ECX_RDRAND_INSTRUCTION_BIT 30 +#define CPUID_FEATURE_INFORMATION_ECX_RDRAND_INSTRUCTION_FLAG 0x40000000 +#define CPUID_FEATURE_INFORMATION_ECX_RDRAND_INSTRUCTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_ECX_RDRAND_INSTRUCTION(_) (((_) >> 30) & 0x01) + uint32_t reserved2 : 1; + }; + + uint32_t flags; + } cpuid_feature_information_ecx; + + /** + * @brief When CPUID executes with EAX set to 01H, feature information is returned in ECX and EDX + */ + union + { + struct + { + /** + * @brief Floating Point Unit On-Chip + * + * [Bit 0] The processor contains an x87 FPU. + */ + uint32_t floating_point_unit_on_chip : 1; +#define CPUID_FEATURE_INFORMATION_EDX_FLOATING_POINT_UNIT_ON_CHIP_BIT 0 +#define CPUID_FEATURE_INFORMATION_EDX_FLOATING_POINT_UNIT_ON_CHIP_FLAG 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_FLOATING_POINT_UNIT_ON_CHIP_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_FLOATING_POINT_UNIT_ON_CHIP(_) (((_) >> 0) & 0x01) + + /** + * @brief Virtual 8086 Mode Enhancements + * + * [Bit 1] Virtual 8086 mode enhancements, including CR4.VME for controlling the feature, CR4.PVI for protected mode + * virtual interrupts, software interrupt indirection, expansion of the TSS with the software indirection bitmap, and + * EFLAGS.VIF and EFLAGS.VIP flags. + */ + uint32_t virtual_8086_mode_enhancements : 1; +#define CPUID_FEATURE_INFORMATION_EDX_VIRTUAL_8086_MODE_ENHANCEMENTS_BIT 1 +#define CPUID_FEATURE_INFORMATION_EDX_VIRTUAL_8086_MODE_ENHANCEMENTS_FLAG 0x02 +#define CPUID_FEATURE_INFORMATION_EDX_VIRTUAL_8086_MODE_ENHANCEMENTS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_VIRTUAL_8086_MODE_ENHANCEMENTS(_) (((_) >> 1) & 0x01) + + /** + * @brief Debugging Extensions + * + * [Bit 2] Support for I/O breakpoints, including CR4.DE for controlling the feature, and optional trapping of accesses to + * DR4 and DR5. + */ + uint32_t debugging_extensions : 1; +#define CPUID_FEATURE_INFORMATION_EDX_DEBUGGING_EXTENSIONS_BIT 2 +#define CPUID_FEATURE_INFORMATION_EDX_DEBUGGING_EXTENSIONS_FLAG 0x04 +#define CPUID_FEATURE_INFORMATION_EDX_DEBUGGING_EXTENSIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_DEBUGGING_EXTENSIONS(_) (((_) >> 2) & 0x01) + + /** + * @brief Page Size Extension + * + * [Bit 3] Large pages of size 4 MByte are supported, including CR4.PSE for controlling the feature, the defined dirty bit + * in PDE (Page Directory Entries), optional reserved bit trapping in CR3, PDEs, and PTEs. + */ + uint32_t page_size_extension : 1; +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION_BIT 3 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION_FLAG 0x08 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION(_) (((_) >> 3) & 0x01) + + /** + * @brief Time Stamp Counter + * + * [Bit 4] The RDTSC instruction is supported, including CR4.TSD for controlling privilege. + */ + uint32_t timestamp_counter : 1; +#define CPUID_FEATURE_INFORMATION_EDX_TIMESTAMP_COUNTER_BIT 4 +#define CPUID_FEATURE_INFORMATION_EDX_TIMESTAMP_COUNTER_FLAG 0x10 +#define CPUID_FEATURE_INFORMATION_EDX_TIMESTAMP_COUNTER_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_TIMESTAMP_COUNTER(_) (((_) >> 4) & 0x01) + + /** + * @brief Model Specific Registers RDMSR and WRMSR Instructions + * + * [Bit 5] The RDMSR and WRMSR instructions are supported. Some of the MSRs are implementation dependent. + */ + uint32_t rdmsr_wrmsr_instructions : 1; +#define CPUID_FEATURE_INFORMATION_EDX_RDMSR_WRMSR_INSTRUCTIONS_BIT 5 +#define CPUID_FEATURE_INFORMATION_EDX_RDMSR_WRMSR_INSTRUCTIONS_FLAG 0x20 +#define CPUID_FEATURE_INFORMATION_EDX_RDMSR_WRMSR_INSTRUCTIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_RDMSR_WRMSR_INSTRUCTIONS(_) (((_) >> 5) & 0x01) + + /** + * @brief Physical Address Extension + * + * [Bit 6] Physical addresses greater than 32 bits are supported: extended page table entry formats, an extra level in the + * page translation tables is defined, 2-MByte pages are supported instead of 4 Mbyte pages if PAE bit is 1. + */ + uint32_t physical_address_extension : 1; +#define CPUID_FEATURE_INFORMATION_EDX_PHYSICAL_ADDRESS_EXTENSION_BIT 6 +#define CPUID_FEATURE_INFORMATION_EDX_PHYSICAL_ADDRESS_EXTENSION_FLAG 0x40 +#define CPUID_FEATURE_INFORMATION_EDX_PHYSICAL_ADDRESS_EXTENSION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_PHYSICAL_ADDRESS_EXTENSION(_) (((_) >> 6) & 0x01) + + /** + * @brief Machine Check Exception + * + * [Bit 7] Exception 18 is defined for Machine Checks, including CR4.MCE for controlling the feature. This feature does not + * define the model-specific implementations of machine-check error logging, reporting, and processor shutdowns. Machine + * Check exception handlers may have to depend on processor version to do model specific processing of the exception, or + * test for the presence of the Machine Check feature. + */ + uint32_t machine_check_exception : 1; +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_EXCEPTION_BIT 7 +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_EXCEPTION_FLAG 0x80 +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_EXCEPTION_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_EXCEPTION(_) (((_) >> 7) & 0x01) + + /** + * @brief CMPXCHG8B Instruction + * + * [Bit 8] The compare-and-exchange 8 bytes (64 bits) instruction is supported (implicitly locked and atomic). + */ + uint32_t cmpxchg8b : 1; +#define CPUID_FEATURE_INFORMATION_EDX_CMPXCHG8B_BIT 8 +#define CPUID_FEATURE_INFORMATION_EDX_CMPXCHG8B_FLAG 0x100 +#define CPUID_FEATURE_INFORMATION_EDX_CMPXCHG8B_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_CMPXCHG8B(_) (((_) >> 8) & 0x01) + + /** + * @brief APIC On-Chip + * + * [Bit 9] The processor contains an Advanced Programmable Interrupt Controller (APIC), responding to memory mapped + * commands in the physical address range FFFE0000H to FFFE0FFFH (by default - some processors permit the APIC to be + * relocated). + */ + uint32_t apic_on_chip : 1; +#define CPUID_FEATURE_INFORMATION_EDX_APIC_ON_CHIP_BIT 9 +#define CPUID_FEATURE_INFORMATION_EDX_APIC_ON_CHIP_FLAG 0x200 +#define CPUID_FEATURE_INFORMATION_EDX_APIC_ON_CHIP_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_APIC_ON_CHIP(_) (((_) >> 9) & 0x01) + uint32_t reserved1 : 1; + + /** + * @brief SYSENTER and SYSEXIT Instructions + * + * [Bit 11] The SYSENTER and SYSEXIT and associated MSRs are supported. + */ + uint32_t sysenter_sysexit_instructions : 1; +#define CPUID_FEATURE_INFORMATION_EDX_SYSENTER_SYSEXIT_INSTRUCTIONS_BIT 11 +#define CPUID_FEATURE_INFORMATION_EDX_SYSENTER_SYSEXIT_INSTRUCTIONS_FLAG 0x800 +#define CPUID_FEATURE_INFORMATION_EDX_SYSENTER_SYSEXIT_INSTRUCTIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_SYSENTER_SYSEXIT_INSTRUCTIONS(_) (((_) >> 11) & 0x01) + + /** + * @brief Memory Type Range Registers + * + * [Bit 12] MTRRs are supported. The MTRRcap MSR contains feature bits that describe what memory types are supported, how + * many variable MTRRs are supported, and whether fixed MTRRs are supported. + */ + uint32_t memory_type_range_registers : 1; +#define CPUID_FEATURE_INFORMATION_EDX_MEMORY_TYPE_RANGE_REGISTERS_BIT 12 +#define CPUID_FEATURE_INFORMATION_EDX_MEMORY_TYPE_RANGE_REGISTERS_FLAG 0x1000 +#define CPUID_FEATURE_INFORMATION_EDX_MEMORY_TYPE_RANGE_REGISTERS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_MEMORY_TYPE_RANGE_REGISTERS(_) (((_) >> 12) & 0x01) + + /** + * @brief Page Global Bit + * + * [Bit 13] The global bit is supported in paging-structure entries that map a page, indicating TLB entries that are common + * to different processes and need not be flushed. The CR4.PGE bit controls this feature. + */ + uint32_t page_global_bit : 1; +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_GLOBAL_BIT_BIT 13 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_GLOBAL_BIT_FLAG 0x2000 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_GLOBAL_BIT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_GLOBAL_BIT(_) (((_) >> 13) & 0x01) + + /** + * @brief Machine Check Architecture + * + * [Bit 14] A value of 1 indicates the Machine Check Architecture of reporting machine errors is supported. The MCG_CAP MSR + * contains feature bits describing how many banks of error reporting MSRs are supported. + */ + uint32_t machine_check_architecture : 1; +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_ARCHITECTURE_BIT 14 +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_ARCHITECTURE_FLAG 0x4000 +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_ARCHITECTURE_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_MACHINE_CHECK_ARCHITECTURE(_) (((_) >> 14) & 0x01) + + /** + * @brief Conditional Move Instructions + * + * [Bit 15] The conditional move instruction CMOV is supported. In addition, if x87 FPU is present as indicated by the + * CPUID.FPU feature bit, then the FCOMI and FCMOV instructions are supported + */ + uint32_t conditional_move_instructions : 1; +#define CPUID_FEATURE_INFORMATION_EDX_CONDITIONAL_MOVE_INSTRUCTIONS_BIT 15 +#define CPUID_FEATURE_INFORMATION_EDX_CONDITIONAL_MOVE_INSTRUCTIONS_FLAG 0x8000 +#define CPUID_FEATURE_INFORMATION_EDX_CONDITIONAL_MOVE_INSTRUCTIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_CONDITIONAL_MOVE_INSTRUCTIONS(_) (((_) >> 15) & 0x01) + + /** + * @brief Page Attribute Table + * + * [Bit 16] Page Attribute Table is supported. This feature augments the Memory Type Range Registers (MTRRs), allowing an + * operating system to specify attributes of memory accessed through a linear address on a 4KB granularity. + */ + uint32_t page_attribute_table : 1; +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_ATTRIBUTE_TABLE_BIT 16 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_ATTRIBUTE_TABLE_FLAG 0x10000 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_ATTRIBUTE_TABLE_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_ATTRIBUTE_TABLE(_) (((_) >> 16) & 0x01) + + /** + * @brief 36-Bit Page Size Extension + * + * [Bit 17] 4-MByte pages addressing physical memory beyond 4 GBytes are supported with 32-bit paging. This feature + * indicates that upper bits of the physical address of a 4-MByte page are encoded in bits 20:13 of the page-directory + * entry. Such physical addresses are limited by MAXPHYADDR and may be up to 40 bits in size. + */ + uint32_t page_size_extension_36bit : 1; +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION_36BIT_BIT 17 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION_36BIT_FLAG 0x20000 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION_36BIT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_PAGE_SIZE_EXTENSION_36BIT(_) (((_) >> 17) & 0x01) + + /** + * @brief Processor Serial Number + * + * [Bit 18] The processor supports the 96-bit processor identification number feature and the feature is enabled. + */ + uint32_t processor_serial_number : 1; +#define CPUID_FEATURE_INFORMATION_EDX_PROCESSOR_SERIAL_NUMBER_BIT 18 +#define CPUID_FEATURE_INFORMATION_EDX_PROCESSOR_SERIAL_NUMBER_FLAG 0x40000 +#define CPUID_FEATURE_INFORMATION_EDX_PROCESSOR_SERIAL_NUMBER_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_PROCESSOR_SERIAL_NUMBER(_) (((_) >> 18) & 0x01) + + /** + * @brief CLFLUSH Instruction + * + * [Bit 19] CLFLUSH Instruction is supported. + */ + uint32_t clflush : 1; +#define CPUID_FEATURE_INFORMATION_EDX_CLFLUSH_BIT 19 +#define CPUID_FEATURE_INFORMATION_EDX_CLFLUSH_FLAG 0x80000 +#define CPUID_FEATURE_INFORMATION_EDX_CLFLUSH_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_CLFLUSH(_) (((_) >> 19) & 0x01) + uint32_t reserved2 : 1; + + /** + * @brief Debug Store + * + * [Bit 21] The processor supports the ability to write debug information into a memory resident buffer. This feature is + * used by the branch trace store (BTS) and processor event-based sampling (PEBS) facilities. + * + * @see Vol3C[23(INTRODUCTION TO VIRTUAL MACHINE EXTENSIONS)] + */ + uint32_t debug_store : 1; +#define CPUID_FEATURE_INFORMATION_EDX_DEBUG_STORE_BIT 21 +#define CPUID_FEATURE_INFORMATION_EDX_DEBUG_STORE_FLAG 0x200000 +#define CPUID_FEATURE_INFORMATION_EDX_DEBUG_STORE_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_DEBUG_STORE(_) (((_) >> 21) & 0x01) + + /** + * @brief Thermal Monitor and Software Controlled Clock Facilities + * + * [Bit 22] The processor implements internal MSRs that allow processor temperature to be monitored and processor + * performance to be modulated in predefined duty cycles under software control. + */ + uint32_t thermal_control_msrs_for_acpi : 1; +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_CONTROL_MSRS_FOR_ACPI_BIT 22 +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_CONTROL_MSRS_FOR_ACPI_FLAG 0x400000 +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_CONTROL_MSRS_FOR_ACPI_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_CONTROL_MSRS_FOR_ACPI(_) (((_) >> 22) & 0x01) + + /** + * @brief Intel MMX Technology + * + * [Bit 23] The processor supports the Intel MMX technology. + */ + uint32_t mmx_support : 1; +#define CPUID_FEATURE_INFORMATION_EDX_MMX_SUPPORT_BIT 23 +#define CPUID_FEATURE_INFORMATION_EDX_MMX_SUPPORT_FLAG 0x800000 +#define CPUID_FEATURE_INFORMATION_EDX_MMX_SUPPORT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_MMX_SUPPORT(_) (((_) >> 23) & 0x01) + + /** + * @brief FXSAVE and FXRSTOR Instructions + * + * [Bit 24] The FXSAVE and FXRSTOR instructions are supported for fast save and restore of the floating point context. + * Presence of this bit also indicates that CR4.OSFXSR is available for an operating system to indicate that it supports + * the FXSAVE and FXRSTOR instructions. + */ + uint32_t fxsave_fxrstor_instructions : 1; +#define CPUID_FEATURE_INFORMATION_EDX_FXSAVE_FXRSTOR_INSTRUCTIONS_BIT 24 +#define CPUID_FEATURE_INFORMATION_EDX_FXSAVE_FXRSTOR_INSTRUCTIONS_FLAG 0x1000000 +#define CPUID_FEATURE_INFORMATION_EDX_FXSAVE_FXRSTOR_INSTRUCTIONS_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_FXSAVE_FXRSTOR_INSTRUCTIONS(_) (((_) >> 24) & 0x01) + + /** + * @brief SSE extensions support + * + * [Bit 25] The processor supports the SSE extensions. + */ + uint32_t sse_support : 1; +#define CPUID_FEATURE_INFORMATION_EDX_SSE_SUPPORT_BIT 25 +#define CPUID_FEATURE_INFORMATION_EDX_SSE_SUPPORT_FLAG 0x2000000 +#define CPUID_FEATURE_INFORMATION_EDX_SSE_SUPPORT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_SSE_SUPPORT(_) (((_) >> 25) & 0x01) + + /** + * @brief SSE2 extensions support + * + * [Bit 26] The processor supports the SSE2 extensions. + */ + uint32_t sse2_support : 1; +#define CPUID_FEATURE_INFORMATION_EDX_SSE2_SUPPORT_BIT 26 +#define CPUID_FEATURE_INFORMATION_EDX_SSE2_SUPPORT_FLAG 0x4000000 +#define CPUID_FEATURE_INFORMATION_EDX_SSE2_SUPPORT_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_SSE2_SUPPORT(_) (((_) >> 26) & 0x01) + + /** + * @brief Self Snoop + * + * [Bit 27] The processor supports the management of conflicting memory types by performing a snoop of its own cache + * structure for transactions issued to the bus. + */ + uint32_t self_snoop : 1; +#define CPUID_FEATURE_INFORMATION_EDX_SELF_SNOOP_BIT 27 +#define CPUID_FEATURE_INFORMATION_EDX_SELF_SNOOP_FLAG 0x8000000 +#define CPUID_FEATURE_INFORMATION_EDX_SELF_SNOOP_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_SELF_SNOOP(_) (((_) >> 27) & 0x01) + + /** + * @brief Max APIC IDs reserved field is Valid + * + * [Bit 28] A value of 0 for HTT indicates there is only a single logical processor in the package and software should + * assume only a single APIC ID is reserved. A value of 1 for HTT indicates the value in CPUID.1.EBX[23:16] (the Maximum + * number of addressable IDs for logical processors in this package) is valid for the package. + */ + uint32_t hyper_threading_technology : 1; +#define CPUID_FEATURE_INFORMATION_EDX_HYPER_THREADING_TECHNOLOGY_BIT 28 +#define CPUID_FEATURE_INFORMATION_EDX_HYPER_THREADING_TECHNOLOGY_FLAG 0x10000000 +#define CPUID_FEATURE_INFORMATION_EDX_HYPER_THREADING_TECHNOLOGY_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_HYPER_THREADING_TECHNOLOGY(_) (((_) >> 28) & 0x01) + + /** + * @brief Thermal Monitor + * + * [Bit 29] The processor implements the thermal monitor automatic thermal control circuitry (TCC). + */ + uint32_t thermal_monitor : 1; +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_MONITOR_BIT 29 +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_MONITOR_FLAG 0x20000000 +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_MONITOR_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_THERMAL_MONITOR(_) (((_) >> 29) & 0x01) + uint32_t reserved3 : 1; + + /** + * @brief Pending Break Enable + * + * [Bit 31] The processor supports the use of the FERR\#/PBE\# pin when the processor is in the stop-clock state (STPCLK\# + * is asserted) to signal the processor that an interrupt is pending and that the processor should return to normal + * operation to handle the interrupt. Bit 10 (PBE enable) in the IA32_MISC_ENABLE MSR enables this capability. + */ + uint32_t pending_break_enable : 1; +#define CPUID_FEATURE_INFORMATION_EDX_PENDING_BREAK_ENABLE_BIT 31 +#define CPUID_FEATURE_INFORMATION_EDX_PENDING_BREAK_ENABLE_FLAG 0x80000000 +#define CPUID_FEATURE_INFORMATION_EDX_PENDING_BREAK_ENABLE_MASK 0x01 +#define CPUID_FEATURE_INFORMATION_EDX_PENDING_BREAK_ENABLE(_) (((_) >> 31) & 0x01) + }; + + uint32_t flags; + } cpuid_feature_information_edx; + +} cpuid_eax_01; + + +/** + * @brief Deterministic Cache Parameters Leaf + * + * When CPUID executes with EAX set to 04H and ECX contains an index value, the processor returns encoded data that + * describe a set of deterministic cache parameters (for the cache level associated with the input in ECX). Valid index + * values start from 0. + * Software can enumerate the deterministic cache parameters for each level of the cache hierarchy starting with an index + * value of 0, until the parameters report the value associated with the cache type field is 0. The architecturally defined + * fields reported by deterministic cache parameters are documented in Table 3-8. + * This Cache Size in Bytes + * - = (Ways + 1) * (Partitions + 1) * (Line_Size + 1) * (Sets + 1) + * - = (EBX[31:22] + 1) * (EBX[21:12] + 1) * (EBX[11:0] + 1) * (ECX + 1) + * The CPUID leaf 04H also reports data that can be used to derive the topology of processor cores in a physical package. + * This information is constant for all valid index values. Software can query the raw data reported by executing CPUID + * with EAX=04H and ECX=0 and use it as part of the topology enumeration algorithm. + * + * @see Vol3A[8(Multiple-Processor Management)] + */ +#define CPUID_CACHE_PARAMETERS 0x00000004 +typedef struct +{ + union + { + struct + { + /** + * [Bits 4:0] - 0 = Null - No more caches. + * - 1 = Data Cache. + * - 2 = Instruction Cache. + * - 3 = Unified Cache. + * - 4-31 = Reserved. + */ + uint32_t cache_type_field : 5; +#define CPUID_EAX_CACHE_TYPE_FIELD_BIT 0 +#define CPUID_EAX_CACHE_TYPE_FIELD_FLAG 0x1F +#define CPUID_EAX_CACHE_TYPE_FIELD_MASK 0x1F +#define CPUID_EAX_CACHE_TYPE_FIELD(_) (((_) >> 0) & 0x1F) + + /** + * [Bits 7:5] Cache Level (starts at 1). + */ + uint32_t cache_level : 3; +#define CPUID_EAX_CACHE_LEVEL_BIT 5 +#define CPUID_EAX_CACHE_LEVEL_FLAG 0xE0 +#define CPUID_EAX_CACHE_LEVEL_MASK 0x07 +#define CPUID_EAX_CACHE_LEVEL(_) (((_) >> 5) & 0x07) + + /** + * [Bit 8] Self Initializing cache level (does not need SW initialization). + */ + uint32_t self_initializing_cache_level : 1; +#define CPUID_EAX_SELF_INITIALIZING_CACHE_LEVEL_BIT 8 +#define CPUID_EAX_SELF_INITIALIZING_CACHE_LEVEL_FLAG 0x100 +#define CPUID_EAX_SELF_INITIALIZING_CACHE_LEVEL_MASK 0x01 +#define CPUID_EAX_SELF_INITIALIZING_CACHE_LEVEL(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] Fully Associative cache. + */ + uint32_t fully_associative_cache : 1; +#define CPUID_EAX_FULLY_ASSOCIATIVE_CACHE_BIT 9 +#define CPUID_EAX_FULLY_ASSOCIATIVE_CACHE_FLAG 0x200 +#define CPUID_EAX_FULLY_ASSOCIATIVE_CACHE_MASK 0x01 +#define CPUID_EAX_FULLY_ASSOCIATIVE_CACHE(_) (((_) >> 9) & 0x01) + uint32_t reserved1 : 4; + + /** + * [Bits 25:14] Maximum number of addressable IDs for logical processors sharing this cache. + * + * @note Add one to the return value to get the result. + * The nearest power-of-2 integer that is not smaller than (1 + EAX[25:14]) is the number of unique initial APIC IDs + * reserved for addressing different logical processors sharing this cache. + */ + uint32_t max_addressable_ids_for_logical_processors_sharing_this_cache : 12; +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_SHARING_THIS_CACHE_BIT 14 +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_SHARING_THIS_CACHE_FLAG 0x3FFC000 +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_SHARING_THIS_CACHE_MASK 0xFFF +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_SHARING_THIS_CACHE(_) (((_) >> 14) & 0xFFF) + + /** + * [Bits 31:26] Maximum number of addressable IDs for processor cores in the physical package. + * + * @note Add one to the return value to get the result. + * The nearest power-of-2 integer that is not smaller than (1 + EAX[31:26]) is the number of unique Core_IDs reserved for + * addressing different processor cores in a physical package. Core ID is a subset of bits of the initial APIC ID. + * The returned value is constant for valid initial values in ECX. Valid ECX values start from 0. + */ + uint32_t max_addressable_ids_for_processor_cores_in_physical_package : 6; +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_PROCESSOR_CORES_IN_PHYSICAL_PACKAGE_BIT 26 +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_PROCESSOR_CORES_IN_PHYSICAL_PACKAGE_FLAG 0xFC000000 +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_PROCESSOR_CORES_IN_PHYSICAL_PACKAGE_MASK 0x3F +#define CPUID_EAX_MAX_ADDRESSABLE_IDS_FOR_PROCESSOR_CORES_IN_PHYSICAL_PACKAGE(_) (((_) >> 26) & 0x3F) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 11:0] System Coherency Line Size. + * + * @note Add one to the return value to get the result. + */ + uint32_t system_coherency_line_size : 12; +#define CPUID_EBX_SYSTEM_COHERENCY_LINE_SIZE_BIT 0 +#define CPUID_EBX_SYSTEM_COHERENCY_LINE_SIZE_FLAG 0xFFF +#define CPUID_EBX_SYSTEM_COHERENCY_LINE_SIZE_MASK 0xFFF +#define CPUID_EBX_SYSTEM_COHERENCY_LINE_SIZE(_) (((_) >> 0) & 0xFFF) + + /** + * [Bits 21:12] Physical Line partitions. + * + * @note Add one to the return value to get the result. + */ + uint32_t physical_line_partitions : 10; +#define CPUID_EBX_PHYSICAL_LINE_PARTITIONS_BIT 12 +#define CPUID_EBX_PHYSICAL_LINE_PARTITIONS_FLAG 0x3FF000 +#define CPUID_EBX_PHYSICAL_LINE_PARTITIONS_MASK 0x3FF +#define CPUID_EBX_PHYSICAL_LINE_PARTITIONS(_) (((_) >> 12) & 0x3FF) + + /** + * [Bits 31:22] Ways of associativity. + * + * @note Add one to the return value to get the result. + */ + uint32_t ways_of_associativity : 10; +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_BIT 22 +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_FLAG 0xFFC00000 +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_MASK 0x3FF +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY(_) (((_) >> 22) & 0x3FF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Number of Sets. + * + * @note Add one to the return value to get the result. + */ + uint32_t number_of_sets : 32; +#define CPUID_ECX_NUMBER_OF_SETS_BIT 0 +#define CPUID_ECX_NUMBER_OF_SETS_FLAG 0xFFFFFFFF +#define CPUID_ECX_NUMBER_OF_SETS_MASK 0xFFFFFFFF +#define CPUID_ECX_NUMBER_OF_SETS(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * @brief Write-Back Invalidate/Invalidate + * + * [Bit 0] - 0 = WBINVD/INVD from threads sharing this cache acts upon lower level caches for threads sharing this cache. + * - 1 = WBINVD/INVD is not guaranteed to act upon lower level caches of non-originating threads sharing this cache. + */ + uint32_t write_back_invalidate : 1; +#define CPUID_EDX_WRITE_BACK_INVALIDATE_BIT 0 +#define CPUID_EDX_WRITE_BACK_INVALIDATE_FLAG 0x01 +#define CPUID_EDX_WRITE_BACK_INVALIDATE_MASK 0x01 +#define CPUID_EDX_WRITE_BACK_INVALIDATE(_) (((_) >> 0) & 0x01) + + /** + * @brief Cache Inclusiveness + * + * [Bit 1] - 0 = Cache is not inclusive of lower cache levels. + * - 1 = Cache is inclusive of lower cache levels. + */ + uint32_t cache_inclusiveness : 1; +#define CPUID_EDX_CACHE_INCLUSIVENESS_BIT 1 +#define CPUID_EDX_CACHE_INCLUSIVENESS_FLAG 0x02 +#define CPUID_EDX_CACHE_INCLUSIVENESS_MASK 0x01 +#define CPUID_EDX_CACHE_INCLUSIVENESS(_) (((_) >> 1) & 0x01) + + /** + * @brief Complex Cache Indexing + * + * [Bit 2] - 0 = Direct mapped cache. + * - 1 = A complex function is used to index the cache, potentially using all address bits. + */ + uint32_t complex_cache_indexing : 1; +#define CPUID_EDX_COMPLEX_CACHE_INDEXING_BIT 2 +#define CPUID_EDX_COMPLEX_CACHE_INDEXING_FLAG 0x04 +#define CPUID_EDX_COMPLEX_CACHE_INDEXING_MASK 0x01 +#define CPUID_EDX_COMPLEX_CACHE_INDEXING(_) (((_) >> 2) & 0x01) + uint32_t reserved1 : 29; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_04; + + +/** + * @brief MONITOR/MWAIT Leaf + * + * When CPUID executes with EAX set to 05H, the processor returns information about features available to MONITOR/MWAIT + * instructions. The MONITOR instruction is used for address-range monitoring in conjunction with MWAIT instruction. The + * MWAIT instruction optionally provides additional extensions for advanced power management. + */ +#define CPUID_MONITOR_MWAIT 0x00000005 +typedef struct +{ + union + { + struct + { + /** + * [Bits 15:0] Smallest monitor-line size in bytes (default is processor's monitor granularity). + */ + uint32_t smallest_monitor_line_size : 16; +#define CPUID_EAX_SMALLEST_MONITOR_LINE_SIZE_BIT 0 +#define CPUID_EAX_SMALLEST_MONITOR_LINE_SIZE_FLAG 0xFFFF +#define CPUID_EAX_SMALLEST_MONITOR_LINE_SIZE_MASK 0xFFFF +#define CPUID_EAX_SMALLEST_MONITOR_LINE_SIZE(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 15:0] Largest monitor-line size in bytes (default is processor's monitor granularity). + */ + uint32_t largest_monitor_line_size : 16; +#define CPUID_EBX_LARGEST_MONITOR_LINE_SIZE_BIT 0 +#define CPUID_EBX_LARGEST_MONITOR_LINE_SIZE_FLAG 0xFFFF +#define CPUID_EBX_LARGEST_MONITOR_LINE_SIZE_MASK 0xFFFF +#define CPUID_EBX_LARGEST_MONITOR_LINE_SIZE(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bit 0] Enumeration of Monitor-Mwait extensions (beyond EAX and EBX registers) supported. + */ + uint32_t enumeration_of_monitor_mwait_extensions : 1; +#define CPUID_ECX_ENUMERATION_OF_MONITOR_MWAIT_EXTENSIONS_BIT 0 +#define CPUID_ECX_ENUMERATION_OF_MONITOR_MWAIT_EXTENSIONS_FLAG 0x01 +#define CPUID_ECX_ENUMERATION_OF_MONITOR_MWAIT_EXTENSIONS_MASK 0x01 +#define CPUID_ECX_ENUMERATION_OF_MONITOR_MWAIT_EXTENSIONS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Supports treating interrupts as break-event for MWAIT, even when interrupts disabled. + */ + uint32_t supports_treating_interrupts_as_break_event_for_mwait : 1; +#define CPUID_ECX_SUPPORTS_TREATING_INTERRUPTS_AS_BREAK_EVENT_FOR_MWAIT_BIT 1 +#define CPUID_ECX_SUPPORTS_TREATING_INTERRUPTS_AS_BREAK_EVENT_FOR_MWAIT_FLAG 0x02 +#define CPUID_ECX_SUPPORTS_TREATING_INTERRUPTS_AS_BREAK_EVENT_FOR_MWAIT_MASK 0x01 +#define CPUID_ECX_SUPPORTS_TREATING_INTERRUPTS_AS_BREAK_EVENT_FOR_MWAIT(_) (((_) >> 1) & 0x01) + uint32_t reserved1 : 30; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 3:0] Number of C0 sub C-states supported using MWAIT. + */ + uint32_t number_of_c0_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C0_SUB_C_STATES_BIT 0 +#define CPUID_EDX_NUMBER_OF_C0_SUB_C_STATES_FLAG 0x0F +#define CPUID_EDX_NUMBER_OF_C0_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C0_SUB_C_STATES(_) (((_) >> 0) & 0x0F) + + /** + * [Bits 7:4] Number of C1 sub C-states supported using MWAIT. + */ + uint32_t number_of_c1_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C1_SUB_C_STATES_BIT 4 +#define CPUID_EDX_NUMBER_OF_C1_SUB_C_STATES_FLAG 0xF0 +#define CPUID_EDX_NUMBER_OF_C1_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C1_SUB_C_STATES(_) (((_) >> 4) & 0x0F) + + /** + * [Bits 11:8] Number of C2 sub C-states supported using MWAIT. + */ + uint32_t number_of_c2_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C2_SUB_C_STATES_BIT 8 +#define CPUID_EDX_NUMBER_OF_C2_SUB_C_STATES_FLAG 0xF00 +#define CPUID_EDX_NUMBER_OF_C2_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C2_SUB_C_STATES(_) (((_) >> 8) & 0x0F) + + /** + * [Bits 15:12] Number of C3 sub C-states supported using MWAIT. + */ + uint32_t number_of_c3_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C3_SUB_C_STATES_BIT 12 +#define CPUID_EDX_NUMBER_OF_C3_SUB_C_STATES_FLAG 0xF000 +#define CPUID_EDX_NUMBER_OF_C3_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C3_SUB_C_STATES(_) (((_) >> 12) & 0x0F) + + /** + * [Bits 19:16] Number of C4 sub C-states supported using MWAIT. + */ + uint32_t number_of_c4_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C4_SUB_C_STATES_BIT 16 +#define CPUID_EDX_NUMBER_OF_C4_SUB_C_STATES_FLAG 0xF0000 +#define CPUID_EDX_NUMBER_OF_C4_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C4_SUB_C_STATES(_) (((_) >> 16) & 0x0F) + + /** + * [Bits 23:20] Number of C5 sub C-states supported using MWAIT. + */ + uint32_t number_of_c5_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C5_SUB_C_STATES_BIT 20 +#define CPUID_EDX_NUMBER_OF_C5_SUB_C_STATES_FLAG 0xF00000 +#define CPUID_EDX_NUMBER_OF_C5_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C5_SUB_C_STATES(_) (((_) >> 20) & 0x0F) + + /** + * [Bits 27:24] Number of C6 sub C-states supported using MWAIT. + */ + uint32_t number_of_c6_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C6_SUB_C_STATES_BIT 24 +#define CPUID_EDX_NUMBER_OF_C6_SUB_C_STATES_FLAG 0xF000000 +#define CPUID_EDX_NUMBER_OF_C6_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C6_SUB_C_STATES(_) (((_) >> 24) & 0x0F) + + /** + * [Bits 31:28] Number of C7 sub C-states supported using MWAIT. + */ + uint32_t number_of_c7_sub_c_states : 4; +#define CPUID_EDX_NUMBER_OF_C7_SUB_C_STATES_BIT 28 +#define CPUID_EDX_NUMBER_OF_C7_SUB_C_STATES_FLAG 0xF0000000 +#define CPUID_EDX_NUMBER_OF_C7_SUB_C_STATES_MASK 0x0F +#define CPUID_EDX_NUMBER_OF_C7_SUB_C_STATES(_) (((_) >> 28) & 0x0F) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_05; + + +/** + * @brief Thermal and Power Management Leaf + * + * When CPUID executes with EAX set to 06H, the processor returns information about thermal and power management features. + */ +#define CPUID_THERMAL_AND_POWER_MANAGEMENT 0x00000006 +typedef struct +{ + union + { + struct + { + /** + * [Bit 0] Digital temperature sensor is supported if set. + */ + uint32_t temperature_sensor_supported : 1; +#define CPUID_EAX_TEMPERATURE_SENSOR_SUPPORTED_BIT 0 +#define CPUID_EAX_TEMPERATURE_SENSOR_SUPPORTED_FLAG 0x01 +#define CPUID_EAX_TEMPERATURE_SENSOR_SUPPORTED_MASK 0x01 +#define CPUID_EAX_TEMPERATURE_SENSOR_SUPPORTED(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Intel Turbo Boost Technology available (see description of IA32_MISC_ENABLE[38]). + */ + uint32_t intel_turbo_boost_technology_available : 1; +#define CPUID_EAX_INTEL_TURBO_BOOST_TECHNOLOGY_AVAILABLE_BIT 1 +#define CPUID_EAX_INTEL_TURBO_BOOST_TECHNOLOGY_AVAILABLE_FLAG 0x02 +#define CPUID_EAX_INTEL_TURBO_BOOST_TECHNOLOGY_AVAILABLE_MASK 0x01 +#define CPUID_EAX_INTEL_TURBO_BOOST_TECHNOLOGY_AVAILABLE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] ARAT. APIC-Timer-always-running feature is supported if set. + */ + uint32_t apic_timer_always_running : 1; +#define CPUID_EAX_APIC_TIMER_ALWAYS_RUNNING_BIT 2 +#define CPUID_EAX_APIC_TIMER_ALWAYS_RUNNING_FLAG 0x04 +#define CPUID_EAX_APIC_TIMER_ALWAYS_RUNNING_MASK 0x01 +#define CPUID_EAX_APIC_TIMER_ALWAYS_RUNNING(_) (((_) >> 2) & 0x01) + uint32_t reserved1 : 1; + + /** + * [Bit 4] PLN. Power limit notification controls are supported if set. + */ + uint32_t power_limit_notification : 1; +#define CPUID_EAX_POWER_LIMIT_NOTIFICATION_BIT 4 +#define CPUID_EAX_POWER_LIMIT_NOTIFICATION_FLAG 0x10 +#define CPUID_EAX_POWER_LIMIT_NOTIFICATION_MASK 0x01 +#define CPUID_EAX_POWER_LIMIT_NOTIFICATION(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] ECMD. Clock modulation duty cycle extension is supported if set. + */ + uint32_t clock_modulation_duty : 1; +#define CPUID_EAX_CLOCK_MODULATION_DUTY_BIT 5 +#define CPUID_EAX_CLOCK_MODULATION_DUTY_FLAG 0x20 +#define CPUID_EAX_CLOCK_MODULATION_DUTY_MASK 0x01 +#define CPUID_EAX_CLOCK_MODULATION_DUTY(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] PTM. Package thermal management is supported if set. + */ + uint32_t package_thermal_management : 1; +#define CPUID_EAX_PACKAGE_THERMAL_MANAGEMENT_BIT 6 +#define CPUID_EAX_PACKAGE_THERMAL_MANAGEMENT_FLAG 0x40 +#define CPUID_EAX_PACKAGE_THERMAL_MANAGEMENT_MASK 0x01 +#define CPUID_EAX_PACKAGE_THERMAL_MANAGEMENT(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] HWP. HWP base registers (IA32_PM_ENABLE[bit 0], IA32_HWP_CAPABILITIES, IA32_HWP_REQUEST, IA32_HWP_STATUS) are + * supported if set. + */ + uint32_t hwp_base_registers : 1; +#define CPUID_EAX_HWP_BASE_REGISTERS_BIT 7 +#define CPUID_EAX_HWP_BASE_REGISTERS_FLAG 0x80 +#define CPUID_EAX_HWP_BASE_REGISTERS_MASK 0x01 +#define CPUID_EAX_HWP_BASE_REGISTERS(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] HWP_Notification. IA32_HWP_INTERRUPT MSR is supported if set. + */ + uint32_t hwp_notification : 1; +#define CPUID_EAX_HWP_NOTIFICATION_BIT 8 +#define CPUID_EAX_HWP_NOTIFICATION_FLAG 0x100 +#define CPUID_EAX_HWP_NOTIFICATION_MASK 0x01 +#define CPUID_EAX_HWP_NOTIFICATION(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] HWP_Activity_Window. IA32_HWP_REQUEST[bits 41:32] is supported if set. + */ + uint32_t hwp_activity_window : 1; +#define CPUID_EAX_HWP_ACTIVITY_WINDOW_BIT 9 +#define CPUID_EAX_HWP_ACTIVITY_WINDOW_FLAG 0x200 +#define CPUID_EAX_HWP_ACTIVITY_WINDOW_MASK 0x01 +#define CPUID_EAX_HWP_ACTIVITY_WINDOW(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] HWP_Energy_Performance_Preference. IA32_HWP_REQUEST[bits 31:24] is supported if set. + */ + uint32_t hwp_energy_performance_preference : 1; +#define CPUID_EAX_HWP_ENERGY_PERFORMANCE_PREFERENCE_BIT 10 +#define CPUID_EAX_HWP_ENERGY_PERFORMANCE_PREFERENCE_FLAG 0x400 +#define CPUID_EAX_HWP_ENERGY_PERFORMANCE_PREFERENCE_MASK 0x01 +#define CPUID_EAX_HWP_ENERGY_PERFORMANCE_PREFERENCE(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] HWP_Package_Level_Request. IA32_HWP_REQUEST_PKG MSR is supported if set. + */ + uint32_t hwp_package_level_request : 1; +#define CPUID_EAX_HWP_PACKAGE_LEVEL_REQUEST_BIT 11 +#define CPUID_EAX_HWP_PACKAGE_LEVEL_REQUEST_FLAG 0x800 +#define CPUID_EAX_HWP_PACKAGE_LEVEL_REQUEST_MASK 0x01 +#define CPUID_EAX_HWP_PACKAGE_LEVEL_REQUEST(_) (((_) >> 11) & 0x01) + uint32_t reserved2 : 1; + + /** + * [Bit 13] HDC. HDC base registers IA32_PKG_HDC_CTL, IA32_PM_CTL1, IA32_THREAD_STALL MSRs are supported if set. + */ + uint32_t hdc : 1; +#define CPUID_EAX_HDC_BIT 13 +#define CPUID_EAX_HDC_FLAG 0x2000 +#define CPUID_EAX_HDC_MASK 0x01 +#define CPUID_EAX_HDC(_) (((_) >> 13) & 0x01) + + /** + * [Bit 14] Intel(R) Turbo Boost Max Technology 3.0 available. + */ + uint32_t intel_turbo_boost_max_technology_3_available : 1; +#define CPUID_EAX_INTEL_TURBO_BOOST_MAX_TECHNOLOGY_3_AVAILABLE_BIT 14 +#define CPUID_EAX_INTEL_TURBO_BOOST_MAX_TECHNOLOGY_3_AVAILABLE_FLAG 0x4000 +#define CPUID_EAX_INTEL_TURBO_BOOST_MAX_TECHNOLOGY_3_AVAILABLE_MASK 0x01 +#define CPUID_EAX_INTEL_TURBO_BOOST_MAX_TECHNOLOGY_3_AVAILABLE(_) (((_) >> 14) & 0x01) + + /** + * [Bit 15] HWP Capabilities. Highest Performance change is supported if set. + */ + uint32_t hwp_capabilities : 1; +#define CPUID_EAX_HWP_CAPABILITIES_BIT 15 +#define CPUID_EAX_HWP_CAPABILITIES_FLAG 0x8000 +#define CPUID_EAX_HWP_CAPABILITIES_MASK 0x01 +#define CPUID_EAX_HWP_CAPABILITIES(_) (((_) >> 15) & 0x01) + + /** + * [Bit 16] HWP PECI override is supported if set. + */ + uint32_t hwp_peci_override : 1; +#define CPUID_EAX_HWP_PECI_OVERRIDE_BIT 16 +#define CPUID_EAX_HWP_PECI_OVERRIDE_FLAG 0x10000 +#define CPUID_EAX_HWP_PECI_OVERRIDE_MASK 0x01 +#define CPUID_EAX_HWP_PECI_OVERRIDE(_) (((_) >> 16) & 0x01) + + /** + * [Bit 17] Flexible HWP is supported if set. + */ + uint32_t flexible_hwp : 1; +#define CPUID_EAX_FLEXIBLE_HWP_BIT 17 +#define CPUID_EAX_FLEXIBLE_HWP_FLAG 0x20000 +#define CPUID_EAX_FLEXIBLE_HWP_MASK 0x01 +#define CPUID_EAX_FLEXIBLE_HWP(_) (((_) >> 17) & 0x01) + + /** + * [Bit 18] Fast access mode for the IA32_HWP_REQUEST MSR is supported if set. + */ + uint32_t fast_access_mode_for_hwp_request_msr : 1; +#define CPUID_EAX_FAST_ACCESS_MODE_FOR_HWP_REQUEST_MSR_BIT 18 +#define CPUID_EAX_FAST_ACCESS_MODE_FOR_HWP_REQUEST_MSR_FLAG 0x40000 +#define CPUID_EAX_FAST_ACCESS_MODE_FOR_HWP_REQUEST_MSR_MASK 0x01 +#define CPUID_EAX_FAST_ACCESS_MODE_FOR_HWP_REQUEST_MSR(_) (((_) >> 18) & 0x01) + uint32_t reserved3 : 1; + + /** + * [Bit 20] Ignoring Idle Logical Processor HWP request is supported if set. + */ + uint32_t ignoring_idle_logical_processor_hwp_request : 1; +#define CPUID_EAX_IGNORING_IDLE_LOGICAL_PROCESSOR_HWP_REQUEST_BIT 20 +#define CPUID_EAX_IGNORING_IDLE_LOGICAL_PROCESSOR_HWP_REQUEST_FLAG 0x100000 +#define CPUID_EAX_IGNORING_IDLE_LOGICAL_PROCESSOR_HWP_REQUEST_MASK 0x01 +#define CPUID_EAX_IGNORING_IDLE_LOGICAL_PROCESSOR_HWP_REQUEST(_) (((_) >> 20) & 0x01) + uint32_t reserved4 : 11; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 3:0] Number of Interrupt Thresholds in Digital Thermal Sensor. + */ + uint32_t number_of_interrupt_thresholds_in_thermal_sensor : 4; +#define CPUID_EBX_NUMBER_OF_INTERRUPT_THRESHOLDS_IN_THERMAL_SENSOR_BIT 0 +#define CPUID_EBX_NUMBER_OF_INTERRUPT_THRESHOLDS_IN_THERMAL_SENSOR_FLAG 0x0F +#define CPUID_EBX_NUMBER_OF_INTERRUPT_THRESHOLDS_IN_THERMAL_SENSOR_MASK 0x0F +#define CPUID_EBX_NUMBER_OF_INTERRUPT_THRESHOLDS_IN_THERMAL_SENSOR(_) (((_) >> 0) & 0x0F) + uint32_t reserved1 : 28; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bit 0] Hardware Coordination Feedback Capability (Presence of IA32_MPERF and IA32_APERF). The capability to provide a + * measure of delivered processor performance (since last reset of the counters), as a percentage of the expected processor + * performance when running at the TSC frequency. + */ + uint32_t hardware_coordination_feedback_capability : 1; +#define CPUID_ECX_HARDWARE_COORDINATION_FEEDBACK_CAPABILITY_BIT 0 +#define CPUID_ECX_HARDWARE_COORDINATION_FEEDBACK_CAPABILITY_FLAG 0x01 +#define CPUID_ECX_HARDWARE_COORDINATION_FEEDBACK_CAPABILITY_MASK 0x01 +#define CPUID_ECX_HARDWARE_COORDINATION_FEEDBACK_CAPABILITY(_) (((_) >> 0) & 0x01) + uint32_t reserved1 : 2; + + /** + * [Bit 3] The processor supports performance-energy bias preference if CPUID.06H:ECX.SETBH[bit 3] is set and it also + * implies the presence of a new architectural MSR called IA32_ENERGY_PERF_BIAS (1B0H). + */ + uint32_t performance_energy_bias_preference : 1; +#define CPUID_ECX_PERFORMANCE_ENERGY_BIAS_PREFERENCE_BIT 3 +#define CPUID_ECX_PERFORMANCE_ENERGY_BIAS_PREFERENCE_FLAG 0x08 +#define CPUID_ECX_PERFORMANCE_ENERGY_BIAS_PREFERENCE_MASK 0x01 +#define CPUID_ECX_PERFORMANCE_ENERGY_BIAS_PREFERENCE(_) (((_) >> 3) & 0x01) + uint32_t reserved2 : 28; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_06; + + +/** + * @brief Structured Extended Feature Flags Enumeration Leaf (Output depends on ECX input value) + * + * When CPUID executes with EAX set to 07H and ECX = 0, the processor returns information about the maximum input value for + * sub-leaves that contain extended feature flags. + * When CPUID executes with EAX set to 07H and the input value of ECX is invalid (see leaf 07H entry in Table 3-8), the + * processor returns 0 in EAX/EBX/ECX/EDX. In subleaf 0, EAX returns the maximum input value of the highest leaf 7 + * sub-leaf, and EBX, ECX & EDX contain information of extended feature flags. + */ +#define CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS 0x00000007 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Reports the maximum input value for supported leaf 7 sub-leaves. + */ + uint32_t number_of_sub_leaves : 32; +#define CPUID_EAX_NUMBER_OF_SUB_LEAVES_BIT 0 +#define CPUID_EAX_NUMBER_OF_SUB_LEAVES_FLAG 0xFFFFFFFF +#define CPUID_EAX_NUMBER_OF_SUB_LEAVES_MASK 0xFFFFFFFF +#define CPUID_EAX_NUMBER_OF_SUB_LEAVES(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bit 0] Supports RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE if 1. + */ + uint32_t fsgsbase : 1; +#define CPUID_EBX_FSGSBASE_BIT 0 +#define CPUID_EBX_FSGSBASE_FLAG 0x01 +#define CPUID_EBX_FSGSBASE_MASK 0x01 +#define CPUID_EBX_FSGSBASE(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] IA32_TSC_ADJUST MSR is supported if 1. + */ + uint32_t ia32_tsc_adjust_msr : 1; +#define CPUID_EBX_IA32_TSC_ADJUST_MSR_BIT 1 +#define CPUID_EBX_IA32_TSC_ADJUST_MSR_FLAG 0x02 +#define CPUID_EBX_IA32_TSC_ADJUST_MSR_MASK 0x01 +#define CPUID_EBX_IA32_TSC_ADJUST_MSR(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Supports Intel(R) Software Guard Extensions (Intel(R) SGX Extensions) if 1. + */ + uint32_t sgx : 1; +#define CPUID_EBX_SGX_BIT 2 +#define CPUID_EBX_SGX_FLAG 0x04 +#define CPUID_EBX_SGX_MASK 0x01 +#define CPUID_EBX_SGX(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] BMI1. + */ + uint32_t bmi1 : 1; +#define CPUID_EBX_BMI1_BIT 3 +#define CPUID_EBX_BMI1_FLAG 0x08 +#define CPUID_EBX_BMI1_MASK 0x01 +#define CPUID_EBX_BMI1(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] HLE. + */ + uint32_t hle : 1; +#define CPUID_EBX_HLE_BIT 4 +#define CPUID_EBX_HLE_FLAG 0x10 +#define CPUID_EBX_HLE_MASK 0x01 +#define CPUID_EBX_HLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] AVX2. + */ + uint32_t avx2 : 1; +#define CPUID_EBX_AVX2_BIT 5 +#define CPUID_EBX_AVX2_FLAG 0x20 +#define CPUID_EBX_AVX2_MASK 0x01 +#define CPUID_EBX_AVX2(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] x87 FPU Data Pointer updated only on x87 exceptions if 1. + */ + uint32_t fdp_excptn_only : 1; +#define CPUID_EBX_FDP_EXCPTN_ONLY_BIT 6 +#define CPUID_EBX_FDP_EXCPTN_ONLY_FLAG 0x40 +#define CPUID_EBX_FDP_EXCPTN_ONLY_MASK 0x01 +#define CPUID_EBX_FDP_EXCPTN_ONLY(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Supports Supervisor-Mode Execution Prevention if 1. + */ + uint32_t smep : 1; +#define CPUID_EBX_SMEP_BIT 7 +#define CPUID_EBX_SMEP_FLAG 0x80 +#define CPUID_EBX_SMEP_MASK 0x01 +#define CPUID_EBX_SMEP(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] BMI2. + */ + uint32_t bmi2 : 1; +#define CPUID_EBX_BMI2_BIT 8 +#define CPUID_EBX_BMI2_FLAG 0x100 +#define CPUID_EBX_BMI2_MASK 0x01 +#define CPUID_EBX_BMI2(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] Supports Enhanced REP MOVSB/STOSB if 1. + */ + uint32_t enhanced_rep_movsb_stosb : 1; +#define CPUID_EBX_ENHANCED_REP_MOVSB_STOSB_BIT 9 +#define CPUID_EBX_ENHANCED_REP_MOVSB_STOSB_FLAG 0x200 +#define CPUID_EBX_ENHANCED_REP_MOVSB_STOSB_MASK 0x01 +#define CPUID_EBX_ENHANCED_REP_MOVSB_STOSB(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] If 1, supports INVPCID instruction for system software that manages process-context identifiers. + */ + uint32_t invpcid : 1; +#define CPUID_EBX_INVPCID_BIT 10 +#define CPUID_EBX_INVPCID_FLAG 0x400 +#define CPUID_EBX_INVPCID_MASK 0x01 +#define CPUID_EBX_INVPCID(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] RTM. + */ + uint32_t rtm : 1; +#define CPUID_EBX_RTM_BIT 11 +#define CPUID_EBX_RTM_FLAG 0x800 +#define CPUID_EBX_RTM_MASK 0x01 +#define CPUID_EBX_RTM(_) (((_) >> 11) & 0x01) + + /** + * [Bit 12] Supports Intel(R) Resource Director Technology (Intel(R) RDT) Monitoring capability if 1. + */ + uint32_t rdt_m : 1; +#define CPUID_EBX_RDT_M_BIT 12 +#define CPUID_EBX_RDT_M_FLAG 0x1000 +#define CPUID_EBX_RDT_M_MASK 0x01 +#define CPUID_EBX_RDT_M(_) (((_) >> 12) & 0x01) + + /** + * [Bit 13] Deprecates FPU CS and FPU DS values if 1. + */ + uint32_t deprecates : 1; +#define CPUID_EBX_DEPRECATES_BIT 13 +#define CPUID_EBX_DEPRECATES_FLAG 0x2000 +#define CPUID_EBX_DEPRECATES_MASK 0x01 +#define CPUID_EBX_DEPRECATES(_) (((_) >> 13) & 0x01) + + /** + * [Bit 14] Supports Intel(R) Memory Protection Extensions if 1. + */ + uint32_t mpx : 1; +#define CPUID_EBX_MPX_BIT 14 +#define CPUID_EBX_MPX_FLAG 0x4000 +#define CPUID_EBX_MPX_MASK 0x01 +#define CPUID_EBX_MPX(_) (((_) >> 14) & 0x01) + + /** + * [Bit 15] Supports Intel(R) Resource Director Technology (Intel(R) RDT) Allocation capability if 1. + */ + uint32_t rdt : 1; +#define CPUID_EBX_RDT_BIT 15 +#define CPUID_EBX_RDT_FLAG 0x8000 +#define CPUID_EBX_RDT_MASK 0x01 +#define CPUID_EBX_RDT(_) (((_) >> 15) & 0x01) + + /** + * [Bit 16] AVX512F. + */ + uint32_t avx512f : 1; +#define CPUID_EBX_AVX512F_BIT 16 +#define CPUID_EBX_AVX512F_FLAG 0x10000 +#define CPUID_EBX_AVX512F_MASK 0x01 +#define CPUID_EBX_AVX512F(_) (((_) >> 16) & 0x01) + + /** + * [Bit 17] AVX512DQ. + */ + uint32_t avx512dq : 1; +#define CPUID_EBX_AVX512DQ_BIT 17 +#define CPUID_EBX_AVX512DQ_FLAG 0x20000 +#define CPUID_EBX_AVX512DQ_MASK 0x01 +#define CPUID_EBX_AVX512DQ(_) (((_) >> 17) & 0x01) + + /** + * [Bit 18] RDSEED. + */ + uint32_t rdseed : 1; +#define CPUID_EBX_RDSEED_BIT 18 +#define CPUID_EBX_RDSEED_FLAG 0x40000 +#define CPUID_EBX_RDSEED_MASK 0x01 +#define CPUID_EBX_RDSEED(_) (((_) >> 18) & 0x01) + + /** + * [Bit 19] ADX. + */ + uint32_t adx : 1; +#define CPUID_EBX_ADX_BIT 19 +#define CPUID_EBX_ADX_FLAG 0x80000 +#define CPUID_EBX_ADX_MASK 0x01 +#define CPUID_EBX_ADX(_) (((_) >> 19) & 0x01) + + /** + * [Bit 20] Supports Supervisor-Mode Access Prevention (and the CLAC/STAC instructions) if 1. + */ + uint32_t smap : 1; +#define CPUID_EBX_SMAP_BIT 20 +#define CPUID_EBX_SMAP_FLAG 0x100000 +#define CPUID_EBX_SMAP_MASK 0x01 +#define CPUID_EBX_SMAP(_) (((_) >> 20) & 0x01) + + /** + * [Bit 21] AVX512_IFMA. + */ + uint32_t avx512_ifma : 1; +#define CPUID_EBX_AVX512_IFMA_BIT 21 +#define CPUID_EBX_AVX512_IFMA_FLAG 0x200000 +#define CPUID_EBX_AVX512_IFMA_MASK 0x01 +#define CPUID_EBX_AVX512_IFMA(_) (((_) >> 21) & 0x01) + uint32_t reserved1 : 1; + + /** + * [Bit 23] CLFLUSHOPT. + */ + uint32_t clflushopt : 1; +#define CPUID_EBX_CLFLUSHOPT_BIT 23 +#define CPUID_EBX_CLFLUSHOPT_FLAG 0x800000 +#define CPUID_EBX_CLFLUSHOPT_MASK 0x01 +#define CPUID_EBX_CLFLUSHOPT(_) (((_) >> 23) & 0x01) + + /** + * [Bit 24] CLWB. + */ + uint32_t clwb : 1; +#define CPUID_EBX_CLWB_BIT 24 +#define CPUID_EBX_CLWB_FLAG 0x1000000 +#define CPUID_EBX_CLWB_MASK 0x01 +#define CPUID_EBX_CLWB(_) (((_) >> 24) & 0x01) + + /** + * [Bit 25] Intel Processor Trace. + */ + uint32_t intel : 1; +#define CPUID_EBX_INTEL_BIT 25 +#define CPUID_EBX_INTEL_FLAG 0x2000000 +#define CPUID_EBX_INTEL_MASK 0x01 +#define CPUID_EBX_INTEL(_) (((_) >> 25) & 0x01) + + /** + * [Bit 26] (Intel(R) Xeon Phi(TM) only). + */ + uint32_t avx512pf : 1; +#define CPUID_EBX_AVX512PF_BIT 26 +#define CPUID_EBX_AVX512PF_FLAG 0x4000000 +#define CPUID_EBX_AVX512PF_MASK 0x01 +#define CPUID_EBX_AVX512PF(_) (((_) >> 26) & 0x01) + + /** + * [Bit 27] (Intel(R) Xeon Phi(TM) only). + */ + uint32_t avx512er : 1; +#define CPUID_EBX_AVX512ER_BIT 27 +#define CPUID_EBX_AVX512ER_FLAG 0x8000000 +#define CPUID_EBX_AVX512ER_MASK 0x01 +#define CPUID_EBX_AVX512ER(_) (((_) >> 27) & 0x01) + + /** + * [Bit 28] AVX512CD. + */ + uint32_t avx512cd : 1; +#define CPUID_EBX_AVX512CD_BIT 28 +#define CPUID_EBX_AVX512CD_FLAG 0x10000000 +#define CPUID_EBX_AVX512CD_MASK 0x01 +#define CPUID_EBX_AVX512CD(_) (((_) >> 28) & 0x01) + + /** + * [Bit 29] Supports Intel(R) Secure Hash Algorithm Extensions (Intel(R) SHA Extensions) if 1. + */ + uint32_t sha : 1; +#define CPUID_EBX_SHA_BIT 29 +#define CPUID_EBX_SHA_FLAG 0x20000000 +#define CPUID_EBX_SHA_MASK 0x01 +#define CPUID_EBX_SHA(_) (((_) >> 29) & 0x01) + + /** + * [Bit 30] AVX512BW. + */ + uint32_t avx512bw : 1; +#define CPUID_EBX_AVX512BW_BIT 30 +#define CPUID_EBX_AVX512BW_FLAG 0x40000000 +#define CPUID_EBX_AVX512BW_MASK 0x01 +#define CPUID_EBX_AVX512BW(_) (((_) >> 30) & 0x01) + + /** + * [Bit 31] AVX512VL. + */ + uint32_t avx512vl : 1; +#define CPUID_EBX_AVX512VL_BIT 31 +#define CPUID_EBX_AVX512VL_FLAG 0x80000000 +#define CPUID_EBX_AVX512VL_MASK 0x01 +#define CPUID_EBX_AVX512VL(_) (((_) >> 31) & 0x01) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bit 0] (Intel(R) Xeon Phi(TM) only). + */ + uint32_t prefetchwt1 : 1; +#define CPUID_ECX_PREFETCHWT1_BIT 0 +#define CPUID_ECX_PREFETCHWT1_FLAG 0x01 +#define CPUID_ECX_PREFETCHWT1_MASK 0x01 +#define CPUID_ECX_PREFETCHWT1(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] AVX512_VBMI. + */ + uint32_t avx512_vbmi : 1; +#define CPUID_ECX_AVX512_VBMI_BIT 1 +#define CPUID_ECX_AVX512_VBMI_FLAG 0x02 +#define CPUID_ECX_AVX512_VBMI_MASK 0x01 +#define CPUID_ECX_AVX512_VBMI(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Supports user-mode instruction prevention if 1. + */ + uint32_t umip : 1; +#define CPUID_ECX_UMIP_BIT 2 +#define CPUID_ECX_UMIP_FLAG 0x04 +#define CPUID_ECX_UMIP_MASK 0x01 +#define CPUID_ECX_UMIP(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Supports protection keys for user-mode pages if 1. + */ + uint32_t pku : 1; +#define CPUID_ECX_PKU_BIT 3 +#define CPUID_ECX_PKU_FLAG 0x08 +#define CPUID_ECX_PKU_MASK 0x01 +#define CPUID_ECX_PKU(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] If 1, OS has set CR4.PKE to enable protection keys (and the RDPKRU/WRPKRU instructions). + */ + uint32_t ospke : 1; +#define CPUID_ECX_OSPKE_BIT 4 +#define CPUID_ECX_OSPKE_FLAG 0x10 +#define CPUID_ECX_OSPKE_MASK 0x01 +#define CPUID_ECX_OSPKE(_) (((_) >> 4) & 0x01) + uint32_t reserved1 : 12; + + /** + * [Bits 21:17] The value of MAWAU used by the BNDLDX and BNDSTX instructions in 64-bit mode. + */ + uint32_t mawau : 5; +#define CPUID_ECX_MAWAU_BIT 17 +#define CPUID_ECX_MAWAU_FLAG 0x3E0000 +#define CPUID_ECX_MAWAU_MASK 0x1F +#define CPUID_ECX_MAWAU(_) (((_) >> 17) & 0x1F) + + /** + * [Bit 22] RDPID and IA32_TSC_AUX are available if 1. + */ + uint32_t rdpid : 1; +#define CPUID_ECX_RDPID_BIT 22 +#define CPUID_ECX_RDPID_FLAG 0x400000 +#define CPUID_ECX_RDPID_MASK 0x01 +#define CPUID_ECX_RDPID(_) (((_) >> 22) & 0x01) + uint32_t reserved2 : 7; + + /** + * [Bit 30] Supports SGX Launch Configuration if 1. + */ + uint32_t sgx_lc : 1; +#define CPUID_ECX_SGX_LC_BIT 30 +#define CPUID_ECX_SGX_LC_FLAG 0x40000000 +#define CPUID_ECX_SGX_LC_MASK 0x01 +#define CPUID_ECX_SGX_LC(_) (((_) >> 30) & 0x01) + uint32_t reserved3 : 1; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_07; + + +/** + * @brief Direct Cache Access Information Leaf + * + * When CPUID executes with EAX set to 09H, the processor returns information about Direct Cache Access capabilities. + */ +#define CPUID_DIRECT_CACHE_ACCESS_INFORMATION 0x00000009 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Value of bits [31:0] of IA32_PLATFORM_DCA_CAP MSR (address 1F8H). + */ + uint32_t ia32_platform_dca_cap : 32; +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_BIT 0 +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_FLAG 0xFFFFFFFF +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_MASK 0xFFFFFFFF +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_09; + + +/** + * @brief Architectural Performance Monitoring Leaf + * + * When CPUID executes with EAX set to 0AH, the processor returns information about support for architectural performance + * monitoring capabilities. Architectural performance monitoring is supported if the version ID is greater than Pn 0. For + * each version of architectural performance monitoring capability, software must enumerate this leaf to discover the + * programming facilities and the architectural performance events available in the processor. + * + * @see Vol3C[23(Introduction to Virtual-Machine Extensions)] + */ +#define CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING 0x0000000A +typedef struct +{ + union + { + struct + { + /** + * [Bits 7:0] Version ID of architectural performance monitoring. + */ + uint32_t version_id_of_architectural_performance_monitoring : 8; +#define CPUID_EAX_VERSION_ID_OF_ARCHITECTURAL_PERFORMANCE_MONITORING_BIT 0 +#define CPUID_EAX_VERSION_ID_OF_ARCHITECTURAL_PERFORMANCE_MONITORING_FLAG 0xFF +#define CPUID_EAX_VERSION_ID_OF_ARCHITECTURAL_PERFORMANCE_MONITORING_MASK 0xFF +#define CPUID_EAX_VERSION_ID_OF_ARCHITECTURAL_PERFORMANCE_MONITORING(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 15:8] Number of general-purpose performance monitoring counter per logical processor. + */ + uint32_t number_of_performance_monitoring_counter_per_logical_processor : 8; +#define CPUID_EAX_NUMBER_OF_PERFORMANCE_MONITORING_COUNTER_PER_LOGICAL_PROCESSOR_BIT 8 +#define CPUID_EAX_NUMBER_OF_PERFORMANCE_MONITORING_COUNTER_PER_LOGICAL_PROCESSOR_FLAG 0xFF00 +#define CPUID_EAX_NUMBER_OF_PERFORMANCE_MONITORING_COUNTER_PER_LOGICAL_PROCESSOR_MASK 0xFF +#define CPUID_EAX_NUMBER_OF_PERFORMANCE_MONITORING_COUNTER_PER_LOGICAL_PROCESSOR(_) (((_) >> 8) & 0xFF) + + /** + * [Bits 23:16] Bit width of general-purpose, performance monitoring counter. + */ + uint32_t bit_width_of_performance_monitoring_counter : 8; +#define CPUID_EAX_BIT_WIDTH_OF_PERFORMANCE_MONITORING_COUNTER_BIT 16 +#define CPUID_EAX_BIT_WIDTH_OF_PERFORMANCE_MONITORING_COUNTER_FLAG 0xFF0000 +#define CPUID_EAX_BIT_WIDTH_OF_PERFORMANCE_MONITORING_COUNTER_MASK 0xFF +#define CPUID_EAX_BIT_WIDTH_OF_PERFORMANCE_MONITORING_COUNTER(_) (((_) >> 16) & 0xFF) + + /** + * [Bits 31:24] Length of EBX bit vector to enumerate architectural performance monitoring events. + */ + uint32_t ebx_bit_vector_length : 8; +#define CPUID_EAX_EBX_BIT_VECTOR_LENGTH_BIT 24 +#define CPUID_EAX_EBX_BIT_VECTOR_LENGTH_FLAG 0xFF000000 +#define CPUID_EAX_EBX_BIT_VECTOR_LENGTH_MASK 0xFF +#define CPUID_EAX_EBX_BIT_VECTOR_LENGTH(_) (((_) >> 24) & 0xFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bit 0] Core cycle event not available if 1. + */ + uint32_t core_cycle_event_not_available : 1; +#define CPUID_EBX_CORE_CYCLE_EVENT_NOT_AVAILABLE_BIT 0 +#define CPUID_EBX_CORE_CYCLE_EVENT_NOT_AVAILABLE_FLAG 0x01 +#define CPUID_EBX_CORE_CYCLE_EVENT_NOT_AVAILABLE_MASK 0x01 +#define CPUID_EBX_CORE_CYCLE_EVENT_NOT_AVAILABLE(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Instruction retired event not available if 1. + */ + uint32_t instruction_retired_event_not_available : 1; +#define CPUID_EBX_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE_BIT 1 +#define CPUID_EBX_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE_FLAG 0x02 +#define CPUID_EBX_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE_MASK 0x01 +#define CPUID_EBX_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Reference cycles event not available if 1. + */ + uint32_t reference_cycles_event_not_available : 1; +#define CPUID_EBX_REFERENCE_CYCLES_EVENT_NOT_AVAILABLE_BIT 2 +#define CPUID_EBX_REFERENCE_CYCLES_EVENT_NOT_AVAILABLE_FLAG 0x04 +#define CPUID_EBX_REFERENCE_CYCLES_EVENT_NOT_AVAILABLE_MASK 0x01 +#define CPUID_EBX_REFERENCE_CYCLES_EVENT_NOT_AVAILABLE(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Last-level cache reference event not available if 1. + */ + uint32_t last_level_cache_reference_event_not_available : 1; +#define CPUID_EBX_LAST_LEVEL_CACHE_REFERENCE_EVENT_NOT_AVAILABLE_BIT 3 +#define CPUID_EBX_LAST_LEVEL_CACHE_REFERENCE_EVENT_NOT_AVAILABLE_FLAG 0x08 +#define CPUID_EBX_LAST_LEVEL_CACHE_REFERENCE_EVENT_NOT_AVAILABLE_MASK 0x01 +#define CPUID_EBX_LAST_LEVEL_CACHE_REFERENCE_EVENT_NOT_AVAILABLE(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Last-level cache misses event not available if 1. + */ + uint32_t last_level_cache_misses_event_not_available : 1; +#define CPUID_EBX_LAST_LEVEL_CACHE_MISSES_EVENT_NOT_AVAILABLE_BIT 4 +#define CPUID_EBX_LAST_LEVEL_CACHE_MISSES_EVENT_NOT_AVAILABLE_FLAG 0x10 +#define CPUID_EBX_LAST_LEVEL_CACHE_MISSES_EVENT_NOT_AVAILABLE_MASK 0x01 +#define CPUID_EBX_LAST_LEVEL_CACHE_MISSES_EVENT_NOT_AVAILABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Branch instruction retired event not available if 1. + */ + uint32_t branch_instruction_retired_event_not_available : 1; +#define CPUID_EBX_BRANCH_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE_BIT 5 +#define CPUID_EBX_BRANCH_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE_FLAG 0x20 +#define CPUID_EBX_BRANCH_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE_MASK 0x01 +#define CPUID_EBX_BRANCH_INSTRUCTION_RETIRED_EVENT_NOT_AVAILABLE(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Branch mispredict retired event not available if 1. + */ + uint32_t branch_mispredict_retired_event_not_available : 1; +#define CPUID_EBX_BRANCH_MISPREDICT_RETIRED_EVENT_NOT_AVAILABLE_BIT 6 +#define CPUID_EBX_BRANCH_MISPREDICT_RETIRED_EVENT_NOT_AVAILABLE_FLAG 0x40 +#define CPUID_EBX_BRANCH_MISPREDICT_RETIRED_EVENT_NOT_AVAILABLE_MASK 0x01 +#define CPUID_EBX_BRANCH_MISPREDICT_RETIRED_EVENT_NOT_AVAILABLE(_) (((_) >> 6) & 0x01) + uint32_t reserved1 : 25; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 4:0] Number of fixed-function performance counters (if Version ID > 1). + */ + uint32_t number_of_fixed_function_performance_counters : 5; +#define CPUID_EDX_NUMBER_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS_BIT 0 +#define CPUID_EDX_NUMBER_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS_FLAG 0x1F +#define CPUID_EDX_NUMBER_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS_MASK 0x1F +#define CPUID_EDX_NUMBER_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS(_) (((_) >> 0) & 0x1F) + + /** + * [Bits 12:5] Bit width of fixed-function performance counters (if Version ID > 1). + */ + uint32_t bit_width_of_fixed_function_performance_counters : 8; +#define CPUID_EDX_BIT_WIDTH_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS_BIT 5 +#define CPUID_EDX_BIT_WIDTH_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS_FLAG 0x1FE0 +#define CPUID_EDX_BIT_WIDTH_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS_MASK 0xFF +#define CPUID_EDX_BIT_WIDTH_OF_FIXED_FUNCTION_PERFORMANCE_COUNTERS(_) (((_) >> 5) & 0xFF) + uint32_t reserved1 : 2; + + /** + * [Bit 15] AnyThread deprecation. + */ + uint32_t any_thread_deprecation : 1; +#define CPUID_EDX_ANY_THREAD_DEPRECATION_BIT 15 +#define CPUID_EDX_ANY_THREAD_DEPRECATION_FLAG 0x8000 +#define CPUID_EDX_ANY_THREAD_DEPRECATION_MASK 0x01 +#define CPUID_EDX_ANY_THREAD_DEPRECATION(_) (((_) >> 15) & 0x01) + uint32_t reserved2 : 16; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_0a; + + +/** + * @brief Extended Topology Enumeration Leaf + * + * When CPUID executes with EAX set to 0BH, the processor returns information about extended topology enumeration data. + * Software must detect the presence of CPUID leaf 0BH by verifying + * - the highest leaf index supported by CPUID is >= 0BH, and + * - CPUID.0BH:EBX[15:0] reports a non-zero value. + * + * @note Most of Leaf 0BH output depends on the initial value in ECX. The EDX output of leaf 0BH is always valid and does + * not vary with input value in ECX. Output value in ECX[7:0] always equals input value in ECX[7:0]. Sub-leaf index 0 + * enumerates SMT level. Each subsequent higher sub-leaf index enumerates a higherlevel topological entity in hierarchical + * order. For sub-leaves that return an invalid level-type of 0 in ECX[15:8]; EAX and EBX will return 0. If an input value + * n in ECX returns the invalid level-type of 0 in ECX[15:8], other input values with ECX > n also return 0 in ECX[15:8]. + */ +#define CPUID_EXTENDED_TOPOLOGY 0x0000000B +typedef struct +{ + union + { + struct + { + /** + * [Bits 4:0] Number of bits to shift right on x2APIC ID to get a unique topology ID of the next level type. All logical + * processors with the same next level ID share current level. + * + * @note Software should use this field (EAX[4:0]) to enumerate processor topology of the system. + */ + uint32_t x2apic_id_to_unique_topology_id_shift : 5; +#define CPUID_EAX_X2APIC_ID_TO_UNIQUE_TOPOLOGY_ID_SHIFT_BIT 0 +#define CPUID_EAX_X2APIC_ID_TO_UNIQUE_TOPOLOGY_ID_SHIFT_FLAG 0x1F +#define CPUID_EAX_X2APIC_ID_TO_UNIQUE_TOPOLOGY_ID_SHIFT_MASK 0x1F +#define CPUID_EAX_X2APIC_ID_TO_UNIQUE_TOPOLOGY_ID_SHIFT(_) (((_) >> 0) & 0x1F) + uint32_t reserved1 : 27; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 15:0] Number of logical processors at this level type. The number reflects configuration as shipped by Intel. + * + * @note Software must not use EBX[15:0] to enumerate processor topology of the system. This value in this field + * (EBX[15:0]) is only intended for display/diagnostic purposes. The actual number of logical processors available to + * BIOS/OS/Applications may be different from the value of EBX[15:0], depending on software and platform hardware + * configurations. + */ + uint32_t number_of_logical_processors_at_this_level_type : 16; +#define CPUID_EBX_NUMBER_OF_LOGICAL_PROCESSORS_AT_THIS_LEVEL_TYPE_BIT 0 +#define CPUID_EBX_NUMBER_OF_LOGICAL_PROCESSORS_AT_THIS_LEVEL_TYPE_FLAG 0xFFFF +#define CPUID_EBX_NUMBER_OF_LOGICAL_PROCESSORS_AT_THIS_LEVEL_TYPE_MASK 0xFFFF +#define CPUID_EBX_NUMBER_OF_LOGICAL_PROCESSORS_AT_THIS_LEVEL_TYPE(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 7:0] Level number. Same value in ECX input. + */ + uint32_t level_number : 8; +#define CPUID_ECX_LEVEL_NUMBER_BIT 0 +#define CPUID_ECX_LEVEL_NUMBER_FLAG 0xFF +#define CPUID_ECX_LEVEL_NUMBER_MASK 0xFF +#define CPUID_ECX_LEVEL_NUMBER(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 15:8] Level type. + * + * @note The value of the "level type" field is not related to level numbers in any way, higher "level type" values do not + * mean higher levels. Level type field has the following encoding: + * - 0: Invalid. + * - 1: SMT. + * - 2: Core. + * - 3-255: Reserved. + */ + uint32_t level_type : 8; +#define CPUID_ECX_LEVEL_TYPE_BIT 8 +#define CPUID_ECX_LEVEL_TYPE_FLAG 0xFF00 +#define CPUID_ECX_LEVEL_TYPE_MASK 0xFF +#define CPUID_ECX_LEVEL_TYPE(_) (((_) >> 8) & 0xFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] x2APIC ID the current logical processor. + */ + uint32_t x2apic_id : 32; +#define CPUID_EDX_X2APIC_ID_BIT 0 +#define CPUID_EDX_X2APIC_ID_FLAG 0xFFFFFFFF +#define CPUID_EDX_X2APIC_ID_MASK 0xFFFFFFFF +#define CPUID_EDX_X2APIC_ID(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_0b; + +/** + * @defgroup cpuid_eax_0d \ + * EAX = 0x0D + * + * When CPUID executes with EAX set to 0DH and ECX = 0, the processor returns information about the bit-vector + * representation of all processor state extensions that are supported in the processor and storage size requirements of + * the XSAVE/XRSTOR area. + * When CPUID executes with EAX set to 0DH and ECX = n (n > 1, and is a valid sub-leaf index), the processor returns + * information about the size and offset of each processor extended state save area within the XSAVE/XRSTOR area. Software + * can use the forward-extendable technique depicted below to query the valid sub-leaves and obtain size and offset + * information for each processor extended state save area: + *

 For i = 2 to 62 // sub-leaf 1 is reserved IF (CPUID.(EAX=0DH, ECX=0):VECTOR[i] = 1) // VECTOR is the 64-bit value
+ * of EDX:EAX Execute CPUID.(EAX=0DH, ECX = i) to examine size and offset for sub-leaf i; FI; 
+ * @{ + */ +#define CPUID_EXTENDED_STATE_INFORMATION 0x0000000D + /** + * @brief Processor Extended State Enumeration Main Leaf (EAX = 0DH, ECX = 0) + */ +typedef struct +{ + /** + * @brief Reports the supported bits of the lower 32 bits of XCR0. XCR0[n] can be set to 1 only if EAX[n] is 1 + */ + union + { + struct + { + /** + * [Bit 0] x87 state. + */ + uint32_t x87_state : 1; +#define CPUID_EAX_X87_STATE_BIT 0 +#define CPUID_EAX_X87_STATE_FLAG 0x01 +#define CPUID_EAX_X87_STATE_MASK 0x01 +#define CPUID_EAX_X87_STATE(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] SSE state. + */ + uint32_t sse_state : 1; +#define CPUID_EAX_SSE_STATE_BIT 1 +#define CPUID_EAX_SSE_STATE_FLAG 0x02 +#define CPUID_EAX_SSE_STATE_MASK 0x01 +#define CPUID_EAX_SSE_STATE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] AVX state. + */ + uint32_t avx_state : 1; +#define CPUID_EAX_AVX_STATE_BIT 2 +#define CPUID_EAX_AVX_STATE_FLAG 0x04 +#define CPUID_EAX_AVX_STATE_MASK 0x01 +#define CPUID_EAX_AVX_STATE(_) (((_) >> 2) & 0x01) + + /** + * [Bits 4:3] MPX state. + */ + uint32_t mpx_state : 2; +#define CPUID_EAX_MPX_STATE_BIT 3 +#define CPUID_EAX_MPX_STATE_FLAG 0x18 +#define CPUID_EAX_MPX_STATE_MASK 0x03 +#define CPUID_EAX_MPX_STATE(_) (((_) >> 3) & 0x03) + + /** + * [Bits 7:5] AVX-512 state. + */ + uint32_t avx_512_state : 3; +#define CPUID_EAX_AVX_512_STATE_BIT 5 +#define CPUID_EAX_AVX_512_STATE_FLAG 0xE0 +#define CPUID_EAX_AVX_512_STATE_MASK 0x07 +#define CPUID_EAX_AVX_512_STATE(_) (((_) >> 5) & 0x07) + + /** + * [Bit 8] Used for IA32_XSS. + */ + uint32_t used_for_ia32_xss_1 : 1; +#define CPUID_EAX_USED_FOR_IA32_XSS_1_BIT 8 +#define CPUID_EAX_USED_FOR_IA32_XSS_1_FLAG 0x100 +#define CPUID_EAX_USED_FOR_IA32_XSS_1_MASK 0x01 +#define CPUID_EAX_USED_FOR_IA32_XSS_1(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] PKRU state. + */ + uint32_t pkru_state : 1; +#define CPUID_EAX_PKRU_STATE_BIT 9 +#define CPUID_EAX_PKRU_STATE_FLAG 0x200 +#define CPUID_EAX_PKRU_STATE_MASK 0x01 +#define CPUID_EAX_PKRU_STATE(_) (((_) >> 9) & 0x01) + uint32_t reserved1 : 3; + + /** + * [Bit 13] Used for IA32_XSS. + */ + uint32_t used_for_ia32_xss_2 : 1; +#define CPUID_EAX_USED_FOR_IA32_XSS_2_BIT 13 +#define CPUID_EAX_USED_FOR_IA32_XSS_2_FLAG 0x2000 +#define CPUID_EAX_USED_FOR_IA32_XSS_2_MASK 0x01 +#define CPUID_EAX_USED_FOR_IA32_XSS_2(_) (((_) >> 13) & 0x01) + uint32_t reserved2 : 18; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Maximum size (bytes, from the beginning of the XSAVE/XRSTOR save area) required by enabled features in XCR0. + * May be different than ECX if some features at the end of the XSAVE save area are not enabled. + */ + uint32_t max_size_required_by_enabled_features_in_xcr0 : 32; +#define CPUID_EBX_MAX_SIZE_REQUIRED_BY_ENABLED_FEATURES_IN_XCR0_BIT 0 +#define CPUID_EBX_MAX_SIZE_REQUIRED_BY_ENABLED_FEATURES_IN_XCR0_FLAG 0xFFFFFFFF +#define CPUID_EBX_MAX_SIZE_REQUIRED_BY_ENABLED_FEATURES_IN_XCR0_MASK 0xFFFFFFFF +#define CPUID_EBX_MAX_SIZE_REQUIRED_BY_ENABLED_FEATURES_IN_XCR0(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Maximum size (bytes, from the beginning of the XSAVE/XRSTOR save area) of the XSAVE/XRSTOR save area + * required by all supported features in the processor, i.e., all the valid bit fields in XCR0. + */ + uint32_t max_size_of_xsave_xrstor_save_area : 32; +#define CPUID_ECX_MAX_SIZE_OF_XSAVE_XRSTOR_SAVE_AREA_BIT 0 +#define CPUID_ECX_MAX_SIZE_OF_XSAVE_XRSTOR_SAVE_AREA_FLAG 0xFFFFFFFF +#define CPUID_ECX_MAX_SIZE_OF_XSAVE_XRSTOR_SAVE_AREA_MASK 0xFFFFFFFF +#define CPUID_ECX_MAX_SIZE_OF_XSAVE_XRSTOR_SAVE_AREA(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] Reports the supported bits of the upper 32 bits of XCR0. XCR0[n+32] can be set to 1 only if EDX[n] is 1. + */ + uint32_t xcr0_supported_bits : 32; +#define CPUID_EDX_XCR0_SUPPORTED_BITS_BIT 0 +#define CPUID_EDX_XCR0_SUPPORTED_BITS_FLAG 0xFFFFFFFF +#define CPUID_EDX_XCR0_SUPPORTED_BITS_MASK 0xFFFFFFFF +#define CPUID_EDX_XCR0_SUPPORTED_BITS(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_0d_ecx_00; + +/** + * @brief Direct Cache Access Information Leaf + */ +typedef struct +{ + union + { + struct + { + uint32_t reserved1 : 1; + + /** + * [Bit 1] Supports XSAVEC and the compacted form of XRSTOR if set. + */ + uint32_t supports_xsavec_and_compacted_xrstor : 1; +#define CPUID_EAX_SUPPORTS_XSAVEC_AND_COMPACTED_XRSTOR_BIT 1 +#define CPUID_EAX_SUPPORTS_XSAVEC_AND_COMPACTED_XRSTOR_FLAG 0x02 +#define CPUID_EAX_SUPPORTS_XSAVEC_AND_COMPACTED_XRSTOR_MASK 0x01 +#define CPUID_EAX_SUPPORTS_XSAVEC_AND_COMPACTED_XRSTOR(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Supports XGETBV with ECX = 1 if set. + */ + uint32_t supports_xgetbv_with_ecx_1 : 1; +#define CPUID_EAX_SUPPORTS_XGETBV_WITH_ECX_1_BIT 2 +#define CPUID_EAX_SUPPORTS_XGETBV_WITH_ECX_1_FLAG 0x04 +#define CPUID_EAX_SUPPORTS_XGETBV_WITH_ECX_1_MASK 0x01 +#define CPUID_EAX_SUPPORTS_XGETBV_WITH_ECX_1(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Supports XSAVES/XRSTORS and IA32_XSS if set. + */ + uint32_t supports_xsave_xrstor_and_ia32_xss : 1; +#define CPUID_EAX_SUPPORTS_XSAVE_XRSTOR_AND_IA32_XSS_BIT 3 +#define CPUID_EAX_SUPPORTS_XSAVE_XRSTOR_AND_IA32_XSS_FLAG 0x08 +#define CPUID_EAX_SUPPORTS_XSAVE_XRSTOR_AND_IA32_XSS_MASK 0x01 +#define CPUID_EAX_SUPPORTS_XSAVE_XRSTOR_AND_IA32_XSS(_) (((_) >> 3) & 0x01) + uint32_t reserved2 : 28; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] The size in bytes of the XSAVE area containing all states enabled by XCRO | IA32_XSS. + */ + uint32_t size_of_xsave_aread : 32; +#define CPUID_EBX_SIZE_OF_XSAVE_AREAD_BIT 0 +#define CPUID_EBX_SIZE_OF_XSAVE_AREAD_FLAG 0xFFFFFFFF +#define CPUID_EBX_SIZE_OF_XSAVE_AREAD_MASK 0xFFFFFFFF +#define CPUID_EBX_SIZE_OF_XSAVE_AREAD(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 7:0] Used for XCR0. + */ + uint32_t used_for_xcr0_1 : 8; +#define CPUID_ECX_USED_FOR_XCR0_1_BIT 0 +#define CPUID_ECX_USED_FOR_XCR0_1_FLAG 0xFF +#define CPUID_ECX_USED_FOR_XCR0_1_MASK 0xFF +#define CPUID_ECX_USED_FOR_XCR0_1(_) (((_) >> 0) & 0xFF) + + /** + * [Bit 8] PT state. + */ + uint32_t pt_state : 1; +#define CPUID_ECX_PT_STATE_BIT 8 +#define CPUID_ECX_PT_STATE_FLAG 0x100 +#define CPUID_ECX_PT_STATE_MASK 0x01 +#define CPUID_ECX_PT_STATE(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] Used for XCR0. + */ + uint32_t used_for_xcr0_2 : 1; +#define CPUID_ECX_USED_FOR_XCR0_2_BIT 9 +#define CPUID_ECX_USED_FOR_XCR0_2_FLAG 0x200 +#define CPUID_ECX_USED_FOR_XCR0_2_MASK 0x01 +#define CPUID_ECX_USED_FOR_XCR0_2(_) (((_) >> 9) & 0x01) + uint32_t reserved1 : 3; + + /** + * [Bit 13] HWP state. + */ + uint32_t hwp_state : 1; +#define CPUID_ECX_HWP_STATE_BIT 13 +#define CPUID_ECX_HWP_STATE_FLAG 0x2000 +#define CPUID_ECX_HWP_STATE_MASK 0x01 +#define CPUID_ECX_HWP_STATE(_) (((_) >> 13) & 0x01) + uint32_t reserved2 : 18; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_0d_ecx_01; + +/** + * @brief Processor Extended State Enumeration Sub-leaves (EAX = 0DH, ECX = n, n > 1) + * + * @note Leaf 0DH output depends on the initial value in ECX. Each sub-leaf index (starting at position 2) is supported if + * it corresponds to a supported bit in either the XCR0 register or the IA32_XSS MSR. + * If ECX contains an invalid sub-leaf index, EAX/EBX/ECX/EDX return 0. Sub-leaf n (0 <= n <= 31) is invalid if sub-leaf 0 + * returns 0 in EAX[n] and sub-leaf 1 returns 0 in ECX[n]. Sub-leaf n (32 <= n <= 63) is invalid if sub-leaf 0 returns 0 in + * EDX[n-32] and sub-leaf 1 returns 0 in EDX[n-32]. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] The size in bytes (from the offset specified in EBX) of the save area for an extended state feature + * associated with a valid sub-leaf index, n. + */ + uint32_t ia32_platform_dca_cap : 32; +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_BIT 0 +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_FLAG 0xFFFFFFFF +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_MASK 0xFFFFFFFF +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] The offset in bytes of this extended state component's save area from the beginning of the XSAVE/XRSTOR + * area. + * This field reports 0 if the sub-leaf index, n, does not map to a valid bit in the XCR0 register. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bit 0] Is set if the bit n (corresponding to the sub-leaf index) is supported in the IA32_XSS MSR; it is clear if bit n + * is instead supported in XCR0. + */ + uint32_t ecx_2 : 1; +#define CPUID_ECX_ECX_2_BIT 0 +#define CPUID_ECX_ECX_2_FLAG 0x01 +#define CPUID_ECX_ECX_2_MASK 0x01 +#define CPUID_ECX_ECX_2(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Is set if, when the compacted format of an XSAVE area is used, this extended state component located on the next + * 64-byte boundary following the preceding state component (otherwise, it is located immediately following the preceding + * state component). + */ + uint32_t ecx_1 : 1; +#define CPUID_ECX_ECX_1_BIT 1 +#define CPUID_ECX_ECX_1_FLAG 0x02 +#define CPUID_ECX_ECX_1_MASK 0x01 +#define CPUID_ECX_ECX_1(_) (((_) >> 1) & 0x01) + uint32_t reserved1 : 30; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] This field reports 0 if the sub-leaf index, n, is invalid; otherwise it is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_0d_ecx_n; + +/** + * @} + */ + + /** + * @defgroup cpuid_eax_0f \ + * EAX = 0x0F + * + * When CPUID executes with EAX set to 0FH and ECX = 0, the processor returns information about the bit-vector + * representation of QoS monitoring resource types that are supported in the processor and maximum range of RMID values the + * processor can use to monitor of any supported resource types. Each bit, starting from bit 1, corresponds to a specific + * resource type if the bit is set. The bit position corresponds to the sub-leaf index (or ResID) that software must use to + * query QoS monitoring capability available for that type. See Table 3-8. + * When CPUID executes with EAX set to 0FH and ECX = n (n >= 1, and is a valid ResID), the processor returns information + * software can use to program IA32_PQR_ASSOC, IA32_QM_EVTSEL MSRs before reading QoS data from the IA32_QM_CTR MSR. + * @{ + */ +#define CPUID_INTEL_RESOURCE_DIRECTOR_TECHNOLOGY_MONITORING_INFORMATION 0x0000000F + /** + * @brief Intel Resource Director Technology (Intel RDT) Monitoring Enumeration Sub-leaf (EAX = 0FH, ECX = 0) + * + * @note Leaf 0FH output depends on the initial value in ECX. Sub-leaf index 0 reports valid resource type starting at bit + * position 1 of EDX. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] EAX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Maximum range (zero-based) of RMID within this physical processor of all types. + */ + uint32_t rmid_max_range : 32; +#define CPUID_EBX_RMID_MAX_RANGE_BIT 0 +#define CPUID_EBX_RMID_MAX_RANGE_FLAG 0xFFFFFFFF +#define CPUID_EBX_RMID_MAX_RANGE_MASK 0xFFFFFFFF +#define CPUID_EBX_RMID_MAX_RANGE(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + uint32_t reserved1 : 1; + + /** + * [Bit 1] Supports L3 Cache Intel RDT Monitoring if 1. + */ + uint32_t supports_l3_cache_intel_rdt_monitoring : 1; +#define CPUID_EDX_SUPPORTS_L3_CACHE_INTEL_RDT_MONITORING_BIT 1 +#define CPUID_EDX_SUPPORTS_L3_CACHE_INTEL_RDT_MONITORING_FLAG 0x02 +#define CPUID_EDX_SUPPORTS_L3_CACHE_INTEL_RDT_MONITORING_MASK 0x01 +#define CPUID_EDX_SUPPORTS_L3_CACHE_INTEL_RDT_MONITORING(_) (((_) >> 1) & 0x01) + uint32_t reserved2 : 30; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_0f_ecx_00; + +/** + * @brief L3 Cache Intel RDT Monitoring Capability Enumeration Sub-leaf (EAX = 0FH, ECX = 1) + * + * @note Leaf 0FH output depends on the initial value in ECX. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] EAX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Conversion factor from reported IA32_QM_CTR value to occupancy metric (bytes). + */ + uint32_t conversion_factor : 32; +#define CPUID_EBX_CONVERSION_FACTOR_BIT 0 +#define CPUID_EBX_CONVERSION_FACTOR_FLAG 0xFFFFFFFF +#define CPUID_EBX_CONVERSION_FACTOR_MASK 0xFFFFFFFF +#define CPUID_EBX_CONVERSION_FACTOR(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Maximum range (zero-based) of RMID within this physical processor of all types. + */ + uint32_t rmid_max_range : 32; +#define CPUID_ECX_RMID_MAX_RANGE_BIT 0 +#define CPUID_ECX_RMID_MAX_RANGE_FLAG 0xFFFFFFFF +#define CPUID_ECX_RMID_MAX_RANGE_MASK 0xFFFFFFFF +#define CPUID_ECX_RMID_MAX_RANGE(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bit 0] Supports L3 occupancy monitoring if 1. + */ + uint32_t supports_l3_occupancy_monitoring : 1; +#define CPUID_EDX_SUPPORTS_L3_OCCUPANCY_MONITORING_BIT 0 +#define CPUID_EDX_SUPPORTS_L3_OCCUPANCY_MONITORING_FLAG 0x01 +#define CPUID_EDX_SUPPORTS_L3_OCCUPANCY_MONITORING_MASK 0x01 +#define CPUID_EDX_SUPPORTS_L3_OCCUPANCY_MONITORING(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Supports L3 Total Bandwidth monitoring if 1. + */ + uint32_t supports_l3_total_bandwidth_monitoring : 1; +#define CPUID_EDX_SUPPORTS_L3_TOTAL_BANDWIDTH_MONITORING_BIT 1 +#define CPUID_EDX_SUPPORTS_L3_TOTAL_BANDWIDTH_MONITORING_FLAG 0x02 +#define CPUID_EDX_SUPPORTS_L3_TOTAL_BANDWIDTH_MONITORING_MASK 0x01 +#define CPUID_EDX_SUPPORTS_L3_TOTAL_BANDWIDTH_MONITORING(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Supports L3 Local Bandwidth monitoring if 1. + */ + uint32_t supports_l3_local_bandwidth_monitoring : 1; +#define CPUID_EDX_SUPPORTS_L3_LOCAL_BANDWIDTH_MONITORING_BIT 2 +#define CPUID_EDX_SUPPORTS_L3_LOCAL_BANDWIDTH_MONITORING_FLAG 0x04 +#define CPUID_EDX_SUPPORTS_L3_LOCAL_BANDWIDTH_MONITORING_MASK 0x01 +#define CPUID_EDX_SUPPORTS_L3_LOCAL_BANDWIDTH_MONITORING(_) (((_) >> 2) & 0x01) + uint32_t reserved1 : 29; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_0f_ecx_01; + +/** + * @} + */ + + /** + * @defgroup cpuid_eax_10 \ + * EAX = 0x10 + * + * When CPUID executes with EAX set to 10H and ECX = 0, the processor returns information about the bit-vector + * representation of QoS Enforcement resource types that are supported in the processor. Each bit, starting from bit 1, + * corresponds to a specific resource type if the bit is set. The bit position corresponds to the sub-leaf index (or ResID) + * that software must use to query QoS enforcement capability available for that type. + * When CPUID executes with EAX set to 10H and ECX = n (n >= 1, and is a valid ResID), the processor returns information + * about available classes of service and range of QoS mask MSRs that software can use to configure each class of services + * using capability bit masks in the QoS Mask registers, IA32_resourceType_Mask_n. + * @{ + */ +#define CPUID_INTEL_RESOURCE_DIRECTOR_TECHNOLOGY_ALLOCATION_INFORMATION 0x00000010 + /** + * @brief Intel Resource Director Technology (Intel RDT) Allocation Enumeration Sub-leaf (EAX = 10H, ECX = 0) + * + * @note Leaf 10H output depends on the initial value in ECX. Sub-leaf index 0 reports valid resource identification + * (ResID) starting at bit position 1 of EBX. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Value of bits [31:0] of IA32_PLATFORM_DCA_CAP MSR (address 1F8H). + */ + uint32_t ia32_platform_dca_cap : 32; +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_BIT 0 +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_FLAG 0xFFFFFFFF +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP_MASK 0xFFFFFFFF +#define CPUID_EAX_IA32_PLATFORM_DCA_CAP(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + uint32_t reserved1 : 1; + + /** + * [Bit 1] Supports L3 Cache Allocation Technology if 1. + */ + uint32_t supports_l3_cache_allocation_technology : 1; +#define CPUID_EBX_SUPPORTS_L3_CACHE_ALLOCATION_TECHNOLOGY_BIT 1 +#define CPUID_EBX_SUPPORTS_L3_CACHE_ALLOCATION_TECHNOLOGY_FLAG 0x02 +#define CPUID_EBX_SUPPORTS_L3_CACHE_ALLOCATION_TECHNOLOGY_MASK 0x01 +#define CPUID_EBX_SUPPORTS_L3_CACHE_ALLOCATION_TECHNOLOGY(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Supports L2 Cache Allocation Technology if 1. + */ + uint32_t supports_l2_cache_allocation_technology : 1; +#define CPUID_EBX_SUPPORTS_L2_CACHE_ALLOCATION_TECHNOLOGY_BIT 2 +#define CPUID_EBX_SUPPORTS_L2_CACHE_ALLOCATION_TECHNOLOGY_FLAG 0x04 +#define CPUID_EBX_SUPPORTS_L2_CACHE_ALLOCATION_TECHNOLOGY_MASK 0x01 +#define CPUID_EBX_SUPPORTS_L2_CACHE_ALLOCATION_TECHNOLOGY(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Supports Memory Bandwidth Allocation if 1. + */ + uint32_t supports_memory_bandwidth_allocation : 1; +#define CPUID_EBX_SUPPORTS_MEMORY_BANDWIDTH_ALLOCATION_BIT 3 +#define CPUID_EBX_SUPPORTS_MEMORY_BANDWIDTH_ALLOCATION_FLAG 0x08 +#define CPUID_EBX_SUPPORTS_MEMORY_BANDWIDTH_ALLOCATION_MASK 0x01 +#define CPUID_EBX_SUPPORTS_MEMORY_BANDWIDTH_ALLOCATION(_) (((_) >> 3) & 0x01) + uint32_t reserved2 : 28; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_10_ecx_00; + +/** + * @brief L3 Cache Allocation Technology Enumeration Sub-leaf (EAX = 10H, ECX = ResID = 1) + * + * @note Leaf 10H output depends on the initial value in ECX. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 4:0] Length of the capacity bit mask for the corresponding ResID using minus-one notation. + */ + uint32_t length_of_capacity_bit_mask : 5; +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK_BIT 0 +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK_FLAG 0x1F +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK_MASK 0x1F +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK(_) (((_) >> 0) & 0x1F) + uint32_t reserved1 : 27; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Bit-granular map of isolation/contention of allocation units. + */ + uint32_t ebx_0 : 32; +#define CPUID_EBX_EBX_0_BIT 0 +#define CPUID_EBX_EBX_0_FLAG 0xFFFFFFFF +#define CPUID_EBX_EBX_0_MASK 0xFFFFFFFF +#define CPUID_EBX_EBX_0(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + uint32_t reserved1 : 2; + + /** + * [Bit 2] Code and Data Prioritization Technology supported if 1. + */ + uint32_t code_and_data_priorization_technology_supported : 1; +#define CPUID_ECX_CODE_AND_DATA_PRIORIZATION_TECHNOLOGY_SUPPORTED_BIT 2 +#define CPUID_ECX_CODE_AND_DATA_PRIORIZATION_TECHNOLOGY_SUPPORTED_FLAG 0x04 +#define CPUID_ECX_CODE_AND_DATA_PRIORIZATION_TECHNOLOGY_SUPPORTED_MASK 0x01 +#define CPUID_ECX_CODE_AND_DATA_PRIORIZATION_TECHNOLOGY_SUPPORTED(_) (((_) >> 2) & 0x01) + uint32_t reserved2 : 29; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 15:0] Highest COS number supported for this ResID. + */ + uint32_t highest_cos_number_supported : 16; +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_BIT 0 +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_FLAG 0xFFFF +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_MASK 0xFFFF +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_10_ecx_01; + +/** + * @brief L2 Cache Allocation Technology Enumeration Sub-leaf (EAX = 10H, ECX = ResID = 2) + * + * @note Leaf 10H output depends on the initial value in ECX. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 4:0] Length of the capacity bit mask for the corresponding ResID using minus-one notation. + */ + uint32_t length_of_capacity_bit_mask : 5; +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK_BIT 0 +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK_FLAG 0x1F +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK_MASK 0x1F +#define CPUID_EAX_LENGTH_OF_CAPACITY_BIT_MASK(_) (((_) >> 0) & 0x1F) + uint32_t reserved1 : 27; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Bit-granular map of isolation/contention of allocation units. + */ + uint32_t ebx_0 : 32; +#define CPUID_EBX_EBX_0_BIT 0 +#define CPUID_EBX_EBX_0_FLAG 0xFFFFFFFF +#define CPUID_EBX_EBX_0_MASK 0xFFFFFFFF +#define CPUID_EBX_EBX_0(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 15:0] Highest COS number supported for this ResID. + */ + uint32_t highest_cos_number_supported : 16; +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_BIT 0 +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_FLAG 0xFFFF +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_MASK 0xFFFF +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_10_ecx_02; + +/** + * @brief Memory Bandwidth Allocation Enumeration Sub-leaf (EAX = 10H, ECX = ResID = 3) + * + * @note Leaf 10H output depends on the initial value in ECX. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 11:0] Reports the maximum MBA throttling value supported for the corresponding ResID using minus-one notation. + */ + uint32_t max_mba_throttling_value : 12; +#define CPUID_EAX_MAX_MBA_THROTTLING_VALUE_BIT 0 +#define CPUID_EAX_MAX_MBA_THROTTLING_VALUE_FLAG 0xFFF +#define CPUID_EAX_MAX_MBA_THROTTLING_VALUE_MASK 0xFFF +#define CPUID_EAX_MAX_MBA_THROTTLING_VALUE(_) (((_) >> 0) & 0xFFF) + uint32_t reserved1 : 20; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + uint32_t reserved1 : 2; + + /** + * [Bit 2] Reports whether the response of the delay values is linear. + */ + uint32_t response_of_delay_is_linear : 1; +#define CPUID_ECX_RESPONSE_OF_DELAY_IS_LINEAR_BIT 2 +#define CPUID_ECX_RESPONSE_OF_DELAY_IS_LINEAR_FLAG 0x04 +#define CPUID_ECX_RESPONSE_OF_DELAY_IS_LINEAR_MASK 0x01 +#define CPUID_ECX_RESPONSE_OF_DELAY_IS_LINEAR(_) (((_) >> 2) & 0x01) + uint32_t reserved2 : 29; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 15:0] Highest COS number supported for this ResID. + */ + uint32_t highest_cos_number_supported : 16; +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_BIT 0 +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_FLAG 0xFFFF +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED_MASK 0xFFFF +#define CPUID_EDX_HIGHEST_COS_NUMBER_SUPPORTED(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_10_ecx_03; + +/** + * @} + */ + + /** + * @defgroup cpuid_eax_12 \ + * EAX = 0x12 + * + * When CPUID executes with EAX set to 12H and ECX = 0H, the processor returns information about Intel SGX capabilities. + * When CPUID executes with EAX set to 12H and ECX = 1H, the processor returns information about Intel SGX attributes. + * When CPUID executes with EAX set to 12H and ECX = n (n > 1), the processor returns information about Intel SGX Enclave + * Page Cache. + * @{ + */ +#define CPUID_INTEL_SGX 0x00000012 + /** + * @brief Intel SGX Capability Enumeration Leaf, sub-leaf 0 (EAX = 12H, ECX = 0) + * + * @note Leaf 12H sub-leaf 0 (ECX = 0) is supported if CPUID.(EAX=07H, ECX=0H):EBX[SGX] = 1. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bit 0] If 1, Indicates Intel SGX supports the collection of SGX1 leaf functions. + */ + uint32_t sgx1 : 1; +#define CPUID_EAX_SGX1_BIT 0 +#define CPUID_EAX_SGX1_FLAG 0x01 +#define CPUID_EAX_SGX1_MASK 0x01 +#define CPUID_EAX_SGX1(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] If 1, Indicates Intel SGX supports the collection of SGX2 leaf functions. + */ + uint32_t sgx2 : 1; +#define CPUID_EAX_SGX2_BIT 1 +#define CPUID_EAX_SGX2_FLAG 0x02 +#define CPUID_EAX_SGX2_MASK 0x01 +#define CPUID_EAX_SGX2(_) (((_) >> 1) & 0x01) + uint32_t reserved1 : 3; + + /** + * [Bit 5] If 1, indicates Intel SGX supports ENCLV instruction leaves EINCVIRTCHILD, EDECVIRTCHILD, and ESETCONTEXT. + */ + uint32_t sgx_enclv_advanced : 1; +#define CPUID_EAX_SGX_ENCLV_ADVANCED_BIT 5 +#define CPUID_EAX_SGX_ENCLV_ADVANCED_FLAG 0x20 +#define CPUID_EAX_SGX_ENCLV_ADVANCED_MASK 0x01 +#define CPUID_EAX_SGX_ENCLV_ADVANCED(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] If 1, indicates Intel SGX supports ENCLS instruction leaves ETRACKC, ERDINFO, ELDBC, and ELDUC. + */ + uint32_t sgx_encls_advanced : 1; +#define CPUID_EAX_SGX_ENCLS_ADVANCED_BIT 6 +#define CPUID_EAX_SGX_ENCLS_ADVANCED_FLAG 0x40 +#define CPUID_EAX_SGX_ENCLS_ADVANCED_MASK 0x01 +#define CPUID_EAX_SGX_ENCLS_ADVANCED(_) (((_) >> 6) & 0x01) + uint32_t reserved2 : 25; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Bit vector of supported extended SGX features. + */ + uint32_t miscselect : 32; +#define CPUID_EBX_MISCSELECT_BIT 0 +#define CPUID_EBX_MISCSELECT_FLAG 0xFFFFFFFF +#define CPUID_EBX_MISCSELECT_MASK 0xFFFFFFFF +#define CPUID_EBX_MISCSELECT(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 7:0] The maximum supported enclave size in non-64-bit mode is 2^(EDX[7:0]). + */ + uint32_t max_enclave_size_not64 : 8; +#define CPUID_EDX_MAX_ENCLAVE_SIZE_NOT64_BIT 0 +#define CPUID_EDX_MAX_ENCLAVE_SIZE_NOT64_FLAG 0xFF +#define CPUID_EDX_MAX_ENCLAVE_SIZE_NOT64_MASK 0xFF +#define CPUID_EDX_MAX_ENCLAVE_SIZE_NOT64(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 15:8] The maximum supported enclave size in 64-bit mode is 2^(EDX[15:8]). + */ + uint32_t max_enclave_size_64 : 8; +#define CPUID_EDX_MAX_ENCLAVE_SIZE_64_BIT 8 +#define CPUID_EDX_MAX_ENCLAVE_SIZE_64_FLAG 0xFF00 +#define CPUID_EDX_MAX_ENCLAVE_SIZE_64_MASK 0xFF +#define CPUID_EDX_MAX_ENCLAVE_SIZE_64(_) (((_) >> 8) & 0xFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_12_ecx_00; + +/** + * @brief Intel SGX Attributes Enumeration Leaf, sub-leaf 1 (EAX = 12H, ECX = 1) + * + * @note Leaf 12H sub-leaf 1 (ECX = 1) is supported if CPUID.(EAX=07H, ECX=0H):EBX[SGX] = 1. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Reports the valid bits of SECS.ATTRIBUTES[31:0] that software can set with ECREATE. + */ + uint32_t valid_secs_attributes_0 : 32; +#define CPUID_EAX_VALID_SECS_ATTRIBUTES_0_BIT 0 +#define CPUID_EAX_VALID_SECS_ATTRIBUTES_0_FLAG 0xFFFFFFFF +#define CPUID_EAX_VALID_SECS_ATTRIBUTES_0_MASK 0xFFFFFFFF +#define CPUID_EAX_VALID_SECS_ATTRIBUTES_0(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Reports the valid bits of SECS.ATTRIBUTES[63:32] that software can set with ECREATE. + */ + uint32_t valid_secs_attributes_1 : 32; +#define CPUID_EBX_VALID_SECS_ATTRIBUTES_1_BIT 0 +#define CPUID_EBX_VALID_SECS_ATTRIBUTES_1_FLAG 0xFFFFFFFF +#define CPUID_EBX_VALID_SECS_ATTRIBUTES_1_MASK 0xFFFFFFFF +#define CPUID_EBX_VALID_SECS_ATTRIBUTES_1(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Reports the valid bits of SECS.ATTRIBUTES[95:64] that software can set with ECREATE. + */ + uint32_t valid_secs_attributes_2 : 32; +#define CPUID_ECX_VALID_SECS_ATTRIBUTES_2_BIT 0 +#define CPUID_ECX_VALID_SECS_ATTRIBUTES_2_FLAG 0xFFFFFFFF +#define CPUID_ECX_VALID_SECS_ATTRIBUTES_2_MASK 0xFFFFFFFF +#define CPUID_ECX_VALID_SECS_ATTRIBUTES_2(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] Reports the valid bits of SECS.ATTRIBUTES[127:96] that software can set with ECREATE. + */ + uint32_t valid_secs_attributes_3 : 32; +#define CPUID_EDX_VALID_SECS_ATTRIBUTES_3_BIT 0 +#define CPUID_EDX_VALID_SECS_ATTRIBUTES_3_FLAG 0xFFFFFFFF +#define CPUID_EDX_VALID_SECS_ATTRIBUTES_3_MASK 0xFFFFFFFF +#define CPUID_EDX_VALID_SECS_ATTRIBUTES_3(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_12_ecx_01; + +/** + * @brief Intel SGX EPC Enumeration Leaf, sub-leaves (EAX = 12H, ECX = 2 or higher) + * + * @note Leaf 12H sub-leaf 2 or higher (ECX >= 2) is supported if CPUID.(EAX=07H, ECX=0H):EBX[SGX] = 1. + * This structure describes sub-leaf type 0. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 3:0] Sub-leaf Type 0. Indicates this sub-leaf is invalid. + */ + uint32_t sub_leaf_type : 4; +#define CPUID_EAX_SUB_LEAF_TYPE_BIT 0 +#define CPUID_EAX_SUB_LEAF_TYPE_FLAG 0x0F +#define CPUID_EAX_SUB_LEAF_TYPE_MASK 0x0F +#define CPUID_EAX_SUB_LEAF_TYPE(_) (((_) >> 0) & 0x0F) + uint32_t reserved1 : 28; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is zero. + */ + uint32_t zero : 32; +#define CPUID_EBX_ZERO_BIT 0 +#define CPUID_EBX_ZERO_FLAG 0xFFFFFFFF +#define CPUID_EBX_ZERO_MASK 0xFFFFFFFF +#define CPUID_EBX_ZERO(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is zero. + */ + uint32_t zero : 32; +#define CPUID_ECX_ZERO_BIT 0 +#define CPUID_ECX_ZERO_FLAG 0xFFFFFFFF +#define CPUID_ECX_ZERO_MASK 0xFFFFFFFF +#define CPUID_ECX_ZERO(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is zero. + */ + uint32_t zero : 32; +#define CPUID_EDX_ZERO_BIT 0 +#define CPUID_EDX_ZERO_FLAG 0xFFFFFFFF +#define CPUID_EDX_ZERO_MASK 0xFFFFFFFF +#define CPUID_EDX_ZERO(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_12_ecx_02p_slt_0; + +/** + * @brief Intel SGX EPC Enumeration Leaf, sub-leaves (EAX = 12H, ECX = 2 or higher) + * + * @note Leaf 12H sub-leaf 2 or higher (ECX >= 2) is supported if CPUID.(EAX=07H, ECX=0H):EBX[SGX] = 1. + * This structure describes sub-leaf type 1. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 3:0] Sub-leaf Type 1. This sub-leaf enumerates an EPC section. EBX:EAX and EDX:ECX provide information on the + * Enclave Page Cache (EPC) section. + */ + uint32_t sub_leaf_type : 4; +#define CPUID_EAX_SUB_LEAF_TYPE_BIT 0 +#define CPUID_EAX_SUB_LEAF_TYPE_FLAG 0x0F +#define CPUID_EAX_SUB_LEAF_TYPE_MASK 0x0F +#define CPUID_EAX_SUB_LEAF_TYPE(_) (((_) >> 0) & 0x0F) + uint32_t reserved1 : 8; + + /** + * [Bits 31:12] Bits 31:12 of the physical address of the base of the EPC section. + */ + uint32_t epc_base_physical_address_1 : 20; +#define CPUID_EAX_EPC_BASE_PHYSICAL_ADDRESS_1_BIT 12 +#define CPUID_EAX_EPC_BASE_PHYSICAL_ADDRESS_1_FLAG 0xFFFFF000 +#define CPUID_EAX_EPC_BASE_PHYSICAL_ADDRESS_1_MASK 0xFFFFF +#define CPUID_EAX_EPC_BASE_PHYSICAL_ADDRESS_1(_) (((_) >> 12) & 0xFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 19:0] Bits 51:32 of the physical address of the base of the EPC section. + */ + uint32_t epc_base_physical_address_2 : 20; +#define CPUID_EBX_EPC_BASE_PHYSICAL_ADDRESS_2_BIT 0 +#define CPUID_EBX_EPC_BASE_PHYSICAL_ADDRESS_2_FLAG 0xFFFFF +#define CPUID_EBX_EPC_BASE_PHYSICAL_ADDRESS_2_MASK 0xFFFFF +#define CPUID_EBX_EPC_BASE_PHYSICAL_ADDRESS_2(_) (((_) >> 0) & 0xFFFFF) + uint32_t reserved1 : 12; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 3:0] EPC section property encoding defined as follows: + * - If EAX[3:0] 0000b, then all bits of the EDX:ECX pair are enumerated as 0. + * - If EAX[3:0] 0001b, then this section has confidentiality and integrity protection. + * All other encodings are reserved. + */ + uint32_t epc_section_property : 4; +#define CPUID_ECX_EPC_SECTION_PROPERTY_BIT 0 +#define CPUID_ECX_EPC_SECTION_PROPERTY_FLAG 0x0F +#define CPUID_ECX_EPC_SECTION_PROPERTY_MASK 0x0F +#define CPUID_ECX_EPC_SECTION_PROPERTY(_) (((_) >> 0) & 0x0F) + uint32_t reserved1 : 8; + + /** + * [Bits 31:12] Bits 31:12 of the size of the corresponding EPC section within the Processor Reserved Memory. + */ + uint32_t epc_size_1 : 20; +#define CPUID_ECX_EPC_SIZE_1_BIT 12 +#define CPUID_ECX_EPC_SIZE_1_FLAG 0xFFFFF000 +#define CPUID_ECX_EPC_SIZE_1_MASK 0xFFFFF +#define CPUID_ECX_EPC_SIZE_1(_) (((_) >> 12) & 0xFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 19:0] Bits 51:32 of the size of the corresponding EPC section within the Processor Reserved Memory. + */ + uint32_t epc_size_2 : 20; +#define CPUID_EDX_EPC_SIZE_2_BIT 0 +#define CPUID_EDX_EPC_SIZE_2_FLAG 0xFFFFF +#define CPUID_EDX_EPC_SIZE_2_MASK 0xFFFFF +#define CPUID_EDX_EPC_SIZE_2(_) (((_) >> 0) & 0xFFFFF) + uint32_t reserved1 : 12; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_12_ecx_02p_slt_1; + +/** + * @} + */ + + /** + * @defgroup cpuid_eax_14 \ + * EAX = 0x14 + * + * When CPUID executes with EAX set to 14H and ECX = 0H, the processor returns information about Intel Processor Trace + * extensions. + * When CPUID executes with EAX set to 14H and ECX = n (n > 0 and less than the number of non-zero bits in CPUID.(EAX=14H, + * ECX= 0H).EAX), the processor returns information about packet generation in Intel Processor Trace. + * @{ + */ +#define CPUID_INTEL_PROCESSOR_TRACE_INFORMATION 0x00000014 + /** + * @brief Intel Processor Trace Enumeration Main Leaf (EAX = 14H, ECX = 0) + * + * @note Leaf 14H main leaf (ECX = 0). + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Reports the maximum sub-leaf supported in leaf 14H. + */ + uint32_t max_sub_leaf : 32; +#define CPUID_EAX_MAX_SUB_LEAF_BIT 0 +#define CPUID_EAX_MAX_SUB_LEAF_FLAG 0xFFFFFFFF +#define CPUID_EAX_MAX_SUB_LEAF_MASK 0xFFFFFFFF +#define CPUID_EAX_MAX_SUB_LEAF(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bit 0] If 1, indicates that IA32_RTIT_CTL.CR3Filter can be set to 1, and that IA32_RTIT_CR3_MATCH MSR can be accessed. + */ + uint32_t flag0 : 1; +#define CPUID_EBX_FLAG0_BIT 0 +#define CPUID_EBX_FLAG0_FLAG 0x01 +#define CPUID_EBX_FLAG0_MASK 0x01 +#define CPUID_EBX_FLAG0(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] If 1, indicates support of Configurable PSB and Cycle-Accurate Mode. + */ + uint32_t flag1 : 1; +#define CPUID_EBX_FLAG1_BIT 1 +#define CPUID_EBX_FLAG1_FLAG 0x02 +#define CPUID_EBX_FLAG1_MASK 0x01 +#define CPUID_EBX_FLAG1(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If 1, indicates support of IP Filtering, TraceStop filtering, and preservation of Intel PT MSRs across warm + * reset. + */ + uint32_t flag2 : 1; +#define CPUID_EBX_FLAG2_BIT 2 +#define CPUID_EBX_FLAG2_FLAG 0x04 +#define CPUID_EBX_FLAG2_MASK 0x01 +#define CPUID_EBX_FLAG2(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] If 1, indicates support of MTC timing packet and suppression of COFI-based packets. + */ + uint32_t flag3 : 1; +#define CPUID_EBX_FLAG3_BIT 3 +#define CPUID_EBX_FLAG3_FLAG 0x08 +#define CPUID_EBX_FLAG3_MASK 0x01 +#define CPUID_EBX_FLAG3(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] If 1, indicates support of PTWRITE. Writes can set IA32_RTIT_CTL[12] (PTWEn) and IA32_RTIT_CTL[5] (FUPonPTW), + * and PTWRITE can generate packets. + */ + uint32_t flag4 : 1; +#define CPUID_EBX_FLAG4_BIT 4 +#define CPUID_EBX_FLAG4_FLAG 0x10 +#define CPUID_EBX_FLAG4_MASK 0x01 +#define CPUID_EBX_FLAG4(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] If 1, indicates support of Power Event Trace. Writes can set IA32_RTIT_CTL[4] (PwrEvtEn), enabling Power Event + * Trace packet generation. + */ + uint32_t flag5 : 1; +#define CPUID_EBX_FLAG5_BIT 5 +#define CPUID_EBX_FLAG5_FLAG 0x20 +#define CPUID_EBX_FLAG5_MASK 0x01 +#define CPUID_EBX_FLAG5(_) (((_) >> 5) & 0x01) + uint32_t reserved1 : 26; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bit 0] If 1, Tracing can be enabled with IA32_RTIT_CTL.ToPA = 1, hence utilizing the ToPA output scheme; + * IA32_RTIT_OUTPUT_BASE and IA32_RTIT_OUTPUT_MASK_PTRS MSRs can be accessed. + */ + uint32_t flag0 : 1; +#define CPUID_ECX_FLAG0_BIT 0 +#define CPUID_ECX_FLAG0_FLAG 0x01 +#define CPUID_ECX_FLAG0_MASK 0x01 +#define CPUID_ECX_FLAG0(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] If 1, ToPA tables can hold any number of output entries, up to the maximum allowed by the MaskOrTableOffset + * field of IA32_RTIT_OUTPUT_MASK_PTRS. + */ + uint32_t flag1 : 1; +#define CPUID_ECX_FLAG1_BIT 1 +#define CPUID_ECX_FLAG1_FLAG 0x02 +#define CPUID_ECX_FLAG1_MASK 0x01 +#define CPUID_ECX_FLAG1(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If 1, indicates support of Single-Range Output scheme. + */ + uint32_t flag2 : 1; +#define CPUID_ECX_FLAG2_BIT 2 +#define CPUID_ECX_FLAG2_FLAG 0x04 +#define CPUID_ECX_FLAG2_MASK 0x01 +#define CPUID_ECX_FLAG2(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] If 1, indicates support of output to Trace Transport subsystem. + */ + uint32_t flag3 : 1; +#define CPUID_ECX_FLAG3_BIT 3 +#define CPUID_ECX_FLAG3_FLAG 0x08 +#define CPUID_ECX_FLAG3_MASK 0x01 +#define CPUID_ECX_FLAG3(_) (((_) >> 3) & 0x01) + uint32_t reserved1 : 27; + + /** + * [Bit 31] If 1, generated packets which contain IP payloads have LIP values, which include the CS base component. + */ + uint32_t flag31 : 1; +#define CPUID_ECX_FLAG31_BIT 31 +#define CPUID_ECX_FLAG31_FLAG 0x80000000 +#define CPUID_ECX_FLAG31_MASK 0x01 +#define CPUID_ECX_FLAG31(_) (((_) >> 31) & 0x01) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_14_ecx_00; + +/** + * @brief Intel Processor Trace Enumeration Sub-leaf (EAX = 14H, ECX = 1) + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 2:0] Number of configurable Address Ranges for filtering. + */ + uint32_t number_of_configurable_address_ranges_for_filtering : 3; +#define CPUID_EAX_NUMBER_OF_CONFIGURABLE_ADDRESS_RANGES_FOR_FILTERING_BIT 0 +#define CPUID_EAX_NUMBER_OF_CONFIGURABLE_ADDRESS_RANGES_FOR_FILTERING_FLAG 0x07 +#define CPUID_EAX_NUMBER_OF_CONFIGURABLE_ADDRESS_RANGES_FOR_FILTERING_MASK 0x07 +#define CPUID_EAX_NUMBER_OF_CONFIGURABLE_ADDRESS_RANGES_FOR_FILTERING(_) (((_) >> 0) & 0x07) + uint32_t reserved1 : 13; + + /** + * [Bits 31:16] Bitmap of supported MTC period encodings. + */ + uint32_t bitmap_of_supported_mtc_period_encodings : 16; +#define CPUID_EAX_BITMAP_OF_SUPPORTED_MTC_PERIOD_ENCODINGS_BIT 16 +#define CPUID_EAX_BITMAP_OF_SUPPORTED_MTC_PERIOD_ENCODINGS_FLAG 0xFFFF0000 +#define CPUID_EAX_BITMAP_OF_SUPPORTED_MTC_PERIOD_ENCODINGS_MASK 0xFFFF +#define CPUID_EAX_BITMAP_OF_SUPPORTED_MTC_PERIOD_ENCODINGS(_) (((_) >> 16) & 0xFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 15:0] Bitmap of supported Cycle Threshold value encodings. + */ + uint32_t bitmap_of_supported_cycle_threshold_value_encodings : 16; +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CYCLE_THRESHOLD_VALUE_ENCODINGS_BIT 0 +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CYCLE_THRESHOLD_VALUE_ENCODINGS_FLAG 0xFFFF +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CYCLE_THRESHOLD_VALUE_ENCODINGS_MASK 0xFFFF +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CYCLE_THRESHOLD_VALUE_ENCODINGS(_) (((_) >> 0) & 0xFFFF) + + /** + * [Bits 31:16] Bitmap of supported Configurable PSB frequency encodings. + */ + uint32_t bitmap_of_supported_configurable_psb_frequency_encodings : 16; +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CONFIGURABLE_PSB_FREQUENCY_ENCODINGS_BIT 16 +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CONFIGURABLE_PSB_FREQUENCY_ENCODINGS_FLAG 0xFFFF0000 +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CONFIGURABLE_PSB_FREQUENCY_ENCODINGS_MASK 0xFFFF +#define CPUID_EBX_BITMAP_OF_SUPPORTED_CONFIGURABLE_PSB_FREQUENCY_ENCODINGS(_) (((_) >> 16) & 0xFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_14_ecx_01; + +/** + * @} + */ + + + /** + * @brief Stamp Counter and Nominal Core Crystal Clock Information Leaf + * + * When CPUID executes with EAX set to 15H and ECX = 0H, the processor returns information about Time Stamp Counter and + * Core Crystal Clock. + * + * @note If EBX[31:0] is 0, the TSC/"core crystal clock" ratio is not enumerated. EBX[31:0]/EAX[31:0] indicates the ratio + * of the TSC frequency and the core crystal clock frequency. + * If ECX is 0, the nominal core crystal clock frequency is not enumerated. "TSC frequency" = "core crystal clock + * frequency" * EBX/EAX. + */ +#define CPUID_TIME_STAMP_COUNTER_INFORMATION 0x00000015 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] An unsigned integer which is the denominator of the TSC/"core crystal clock" ratio. + */ + uint32_t denominator : 32; +#define CPUID_EAX_DENOMINATOR_BIT 0 +#define CPUID_EAX_DENOMINATOR_FLAG 0xFFFFFFFF +#define CPUID_EAX_DENOMINATOR_MASK 0xFFFFFFFF +#define CPUID_EAX_DENOMINATOR(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] An unsigned integer which is the numerator of the TSC/"core crystal clock" ratio. + */ + uint32_t numerator : 32; +#define CPUID_EBX_NUMERATOR_BIT 0 +#define CPUID_EBX_NUMERATOR_FLAG 0xFFFFFFFF +#define CPUID_EBX_NUMERATOR_MASK 0xFFFFFFFF +#define CPUID_EBX_NUMERATOR(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] An unsigned integer which is the nominal frequency of the core crystal clock in Hz. + */ + uint32_t nominal_frequency : 32; +#define CPUID_ECX_NOMINAL_FREQUENCY_BIT 0 +#define CPUID_ECX_NOMINAL_FREQUENCY_FLAG 0xFFFFFFFF +#define CPUID_ECX_NOMINAL_FREQUENCY_MASK 0xFFFFFFFF +#define CPUID_ECX_NOMINAL_FREQUENCY(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_15; + + +/** + * @brief Processor Frequency Information Leaf + * + * When CPUID executes with EAX set to 16H, the processor returns information about Processor Frequency Information. + * + * @note Data is returned from this interface in accordance with the processor's specification and does not reflect actual + * values. Suitable use of this data includes the display of processor information in like manner to the processor brand + * string and for determining the appropriate range to use when displaying processor information e.g. frequency history + * graphs. The returned information should not be used for any other purpose as the returned information does not + * accurately correlate to information / counters returned by other processor interfaces. + * While a processor may support the Processor Frequency Information leaf, fields that return a value of zero are not + * supported. + */ +#define CPUID_PROCESSOR_FREQUENCY_INFORMATION 0x00000016 +typedef struct +{ + union + { + struct + { + /** + * [Bits 15:0] Processor Base Frequency (in MHz). + */ + uint32_t procesor_base_frequency_mhz : 16; +#define CPUID_EAX_PROCESOR_BASE_FREQUENCY_MHZ_BIT 0 +#define CPUID_EAX_PROCESOR_BASE_FREQUENCY_MHZ_FLAG 0xFFFF +#define CPUID_EAX_PROCESOR_BASE_FREQUENCY_MHZ_MASK 0xFFFF +#define CPUID_EAX_PROCESOR_BASE_FREQUENCY_MHZ(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 15:0] Maximum Frequency (in MHz). + */ + uint32_t processor_maximum_frequency_mhz : 16; +#define CPUID_EBX_PROCESSOR_MAXIMUM_FREQUENCY_MHZ_BIT 0 +#define CPUID_EBX_PROCESSOR_MAXIMUM_FREQUENCY_MHZ_FLAG 0xFFFF +#define CPUID_EBX_PROCESSOR_MAXIMUM_FREQUENCY_MHZ_MASK 0xFFFF +#define CPUID_EBX_PROCESSOR_MAXIMUM_FREQUENCY_MHZ(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 15:0] Bus (Reference) Frequency (in MHz). + */ + uint32_t bus_frequency_mhz : 16; +#define CPUID_ECX_BUS_FREQUENCY_MHZ_BIT 0 +#define CPUID_ECX_BUS_FREQUENCY_MHZ_FLAG 0xFFFF +#define CPUID_ECX_BUS_FREQUENCY_MHZ_MASK 0xFFFF +#define CPUID_ECX_BUS_FREQUENCY_MHZ(_) (((_) >> 0) & 0xFFFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_16; + +/** + * @defgroup cpuid_eax_17 \ + * EAX = 0x17 + * + * When CPUID executes with EAX set to 17H, the processor returns information about the System-On-Chip Vendor Attribute + * Enumeration. + * @{ + */ +#define CPUID_SOC_VENDOR_INFORMATION 0x00000017 + /** + * @brief System-On-Chip Vendor Attribute Enumeration Main Leaf (EAX = 17H, ECX = 0) + * + * @note Leaf 17H main leaf (ECX = 0). Leaf 17H output depends on the initial value in ECX. Leaf 17H sub-leaves 1 through 3 + * reports SOC Vendor Brand String. Leaf 17H is valid if MaxSOCID_Index >= 3. Leaf 17H sub-leaves 4 and above are reserved. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Reports the maximum input value of supported sub-leaf in leaf 17H. + */ + uint32_t max_soc_id_index : 32; +#define CPUID_EAX_MAX_SOC_ID_INDEX_BIT 0 +#define CPUID_EAX_MAX_SOC_ID_INDEX_FLAG 0xFFFFFFFF +#define CPUID_EAX_MAX_SOC_ID_INDEX_MASK 0xFFFFFFFF +#define CPUID_EAX_MAX_SOC_ID_INDEX(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 15:0] SOC Vendor ID. + */ + uint32_t soc_vendor_id : 16; +#define CPUID_EBX_SOC_VENDOR_ID_BIT 0 +#define CPUID_EBX_SOC_VENDOR_ID_FLAG 0xFFFF +#define CPUID_EBX_SOC_VENDOR_ID_MASK 0xFFFF +#define CPUID_EBX_SOC_VENDOR_ID(_) (((_) >> 0) & 0xFFFF) + + /** + * [Bit 16] If 1, the SOC Vendor ID field is assigned via an industry standard enumeration scheme. Otherwise, the SOC + * Vendor ID field is assigned by Intel. + */ + uint32_t is_vendor_scheme : 1; +#define CPUID_EBX_IS_VENDOR_SCHEME_BIT 16 +#define CPUID_EBX_IS_VENDOR_SCHEME_FLAG 0x10000 +#define CPUID_EBX_IS_VENDOR_SCHEME_MASK 0x01 +#define CPUID_EBX_IS_VENDOR_SCHEME(_) (((_) >> 16) & 0x01) + uint32_t reserved1 : 15; + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] A unique number an SOC vendor assigns to its SOC projects. + */ + uint32_t project_id : 32; +#define CPUID_ECX_PROJECT_ID_BIT 0 +#define CPUID_ECX_PROJECT_ID_FLAG 0xFFFFFFFF +#define CPUID_ECX_PROJECT_ID_MASK 0xFFFFFFFF +#define CPUID_ECX_PROJECT_ID(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] A unique number within an SOC project that an SOC vendor assigns. + */ + uint32_t stepping_id : 32; +#define CPUID_EDX_STEPPING_ID_BIT 0 +#define CPUID_EDX_STEPPING_ID_FLAG 0xFFFFFFFF +#define CPUID_EDX_STEPPING_ID_MASK 0xFFFFFFFF +#define CPUID_EDX_STEPPING_ID(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_17_ecx_00; + +/** + * @brief System-On-Chip Vendor Attribute Enumeration Sub-leaf (EAX = 17H, ECX = 1..3) + * + * @note Leaf 17H output depends on the initial value in ECX. SOC Vendor Brand String is a UTF-8 encoded string padded with + * trailing bytes of 00H. The complete SOC Vendor Brand String is constructed by concatenating in ascending order of + * EAX:EBX:ECX:EDX and from the sub-leaf 1 fragment towards sub-leaf 3. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] SOC Vendor Brand String. UTF-8 encoded string. + */ + uint32_t soc_vendor_brand_string : 32; +#define CPUID_EAX_SOC_VENDOR_BRAND_STRING_BIT 0 +#define CPUID_EAX_SOC_VENDOR_BRAND_STRING_FLAG 0xFFFFFFFF +#define CPUID_EAX_SOC_VENDOR_BRAND_STRING_MASK 0xFFFFFFFF +#define CPUID_EAX_SOC_VENDOR_BRAND_STRING(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] SOC Vendor Brand String. UTF-8 encoded string. + */ + uint32_t soc_vendor_brand_string : 32; +#define CPUID_EBX_SOC_VENDOR_BRAND_STRING_BIT 0 +#define CPUID_EBX_SOC_VENDOR_BRAND_STRING_FLAG 0xFFFFFFFF +#define CPUID_EBX_SOC_VENDOR_BRAND_STRING_MASK 0xFFFFFFFF +#define CPUID_EBX_SOC_VENDOR_BRAND_STRING(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] SOC Vendor Brand String. UTF-8 encoded string. + */ + uint32_t soc_vendor_brand_string : 32; +#define CPUID_ECX_SOC_VENDOR_BRAND_STRING_BIT 0 +#define CPUID_ECX_SOC_VENDOR_BRAND_STRING_FLAG 0xFFFFFFFF +#define CPUID_ECX_SOC_VENDOR_BRAND_STRING_MASK 0xFFFFFFFF +#define CPUID_ECX_SOC_VENDOR_BRAND_STRING(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] SOC Vendor Brand String. UTF-8 encoded string. + */ + uint32_t soc_vendor_brand_string : 32; +#define CPUID_EDX_SOC_VENDOR_BRAND_STRING_BIT 0 +#define CPUID_EDX_SOC_VENDOR_BRAND_STRING_FLAG 0xFFFFFFFF +#define CPUID_EDX_SOC_VENDOR_BRAND_STRING_MASK 0xFFFFFFFF +#define CPUID_EDX_SOC_VENDOR_BRAND_STRING(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_17_ecx_01_03; + +/** + * @brief System-On-Chip Vendor Attribute Enumeration Sub-leaves (EAX = 17H, ECX > MaxSOCID_Index) + * + * @note Leaf 17H output depends on the initial value in ECX. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Reserved = 0. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Reserved = 0. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Reserved = 0. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] Reserved = 0. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_17_ecx_n; + +/** + * @} + */ + + /** + * @defgroup cpuid_eax_18 \ + * EAX = 0x18 + * + * When CPUID executes with EAX set to 18H, the processor returns information about the Deterministic Address Translation + * Parameters. + * @{ + */ +#define CPUID_DETERMINISTIC_ADDRESS_TRANSLATION_PARAMETERS 0x00000018 + /** + * @brief Deterministic Address Translation Parameters Main Leaf (EAX = 18H, ECX = 0) + * + * @note Each sub-leaf enumerates a different address translation structure. + * If ECX contains an invalid sub-leaf index, EAX/EBX/ECX/EDX return 0. Sub-leaf index n is invalid if n exceeds the value + * that sub-leaf 0 returns in EAX. A sub-leaf index is also invalid if EDX[4:0] returns 0. Valid sub-leaves do not need to + * be contiguous or in any particular order. A valid sub-leaf may be in a higher input ECX value than an invalid sub-leaf + * or than a valid sub-leaf of a higher or lower-level structure. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Reports the maximum input value of supported sub-leaf in leaf 18H. + */ + uint32_t max_sub_leaf : 32; +#define CPUID_EAX_MAX_SUB_LEAF_BIT 0 +#define CPUID_EAX_MAX_SUB_LEAF_FLAG 0xFFFFFFFF +#define CPUID_EAX_MAX_SUB_LEAF_MASK 0xFFFFFFFF +#define CPUID_EAX_MAX_SUB_LEAF(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bit 0] 4K page size entries supported by this structure. + */ + uint32_t page_entries_4kb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED_BIT 0 +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED_FLAG 0x01 +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] 2MB page size entries supported by this structure. + */ + uint32_t page_entries_2mb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED_BIT 1 +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED_FLAG 0x02 +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] 4MB page size entries supported by this structure. + */ + uint32_t page_entries_4mb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED_BIT 2 +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED_FLAG 0x04 +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] 1 GB page size entries supported by this structure. + */ + uint32_t page_entries_1gb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED_BIT 3 +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED_FLAG 0x08 +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED(_) (((_) >> 3) & 0x01) + uint32_t reserved1 : 4; + + /** + * [Bits 10:8] Partitioning (0: Soft partitioning between the logical processors sharing this structure). + */ + uint32_t partitioning : 3; +#define CPUID_EBX_PARTITIONING_BIT 8 +#define CPUID_EBX_PARTITIONING_FLAG 0x700 +#define CPUID_EBX_PARTITIONING_MASK 0x07 +#define CPUID_EBX_PARTITIONING(_) (((_) >> 8) & 0x07) + uint32_t reserved2 : 5; + + /** + * [Bits 31:16] W = Ways of associativity. + */ + uint32_t ways_of_associativity_00 : 16; +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_00_BIT 16 +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_00_FLAG 0xFFFF0000 +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_00_MASK 0xFFFF +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_00(_) (((_) >> 16) & 0xFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Number of Sets. + */ + uint32_t number_of_sets : 32; +#define CPUID_ECX_NUMBER_OF_SETS_BIT 0 +#define CPUID_ECX_NUMBER_OF_SETS_FLAG 0xFFFFFFFF +#define CPUID_ECX_NUMBER_OF_SETS_MASK 0xFFFFFFFF +#define CPUID_ECX_NUMBER_OF_SETS(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 4:0] Translation cache type field. + * - 00000b: Null (indicates this sub-leaf is not valid). + * - 00001b: Data TLB. + * - 00010b: Instruction TLB. + * - 00011b: Unified TLB. + * All other encodings are reserved. + * + * @note Some unified TLBs will allow a single TLB entry to satisfy data read/write and instruction fetches. Others will + * require separate entries (e.g., one loaded on data read/write and another loaded on an instruction fetch) . Please see + * the Intel(R) 64 and IA-32 Architectures Optimization Reference Manual for details of a particular product. + */ + uint32_t translation_cache_type_field : 5; +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD_BIT 0 +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD_FLAG 0x1F +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD_MASK 0x1F +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD(_) (((_) >> 0) & 0x1F) + + /** + * [Bits 7:5] Translation cache level (starts at 1). + */ + uint32_t translation_cache_level : 3; +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL_BIT 5 +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL_FLAG 0xE0 +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL_MASK 0x07 +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL(_) (((_) >> 5) & 0x07) + + /** + * [Bit 8] Fully associative structure. + */ + uint32_t fully_associative_structure : 1; +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE_BIT 8 +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE_FLAG 0x100 +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE_MASK 0x01 +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE(_) (((_) >> 8) & 0x01) + uint32_t reserved1 : 5; + + /** + * [Bits 25:14] Maximum number of addressable IDs for logical processors sharing this translation cache. + * + * @note Add one to the return value to get the result. + */ + uint32_t max_addressable_ids_for_logical_processors : 12; +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_BIT 14 +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_FLAG 0x3FFC000 +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_MASK 0xFFF +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS(_) (((_) >> 14) & 0xFFF) + uint32_t reserved2 : 6; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_18_ecx_00; + +/** + * @brief Deterministic Address Translation Parameters Sub-leaf (EAX = 18H, ECX >= 1) + * + * @note Each sub-leaf enumerates a different address translation structure. + * If ECX contains an invalid sub-leaf index, EAX/EBX/ECX/EDX return 0. Sub-leaf index n is invalid if n exceeds the value + * that sub-leaf 0 returns in EAX. A sub-leaf index is also invalid if EDX[4:0] returns 0. Valid sub-leaves do not need to + * be contiguous or in any particular order. A valid sub-leaf may be in a higher input ECX value than an invalid sub-leaf + * or than a valid sub-leaf of a higher or lower-level structure. + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] EAX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bit 0] 4K page size entries supported by this structure. + */ + uint32_t page_entries_4kb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED_BIT 0 +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED_FLAG 0x01 +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_4KB_SUPPORTED(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] 2MB page size entries supported by this structure. + */ + uint32_t page_entries_2mb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED_BIT 1 +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED_FLAG 0x02 +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_2MB_SUPPORTED(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] 4MB page size entries supported by this structure. + */ + uint32_t page_entries_4mb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED_BIT 2 +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED_FLAG 0x04 +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_4MB_SUPPORTED(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] 1 GB page size entries supported by this structure. + */ + uint32_t page_entries_1gb_supported : 1; +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED_BIT 3 +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED_FLAG 0x08 +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED_MASK 0x01 +#define CPUID_EBX_PAGE_ENTRIES_1GB_SUPPORTED(_) (((_) >> 3) & 0x01) + uint32_t reserved1 : 4; + + /** + * [Bits 10:8] Partitioning (0: Soft partitioning between the logical processors sharing this structure). + */ + uint32_t partitioning : 3; +#define CPUID_EBX_PARTITIONING_BIT 8 +#define CPUID_EBX_PARTITIONING_FLAG 0x700 +#define CPUID_EBX_PARTITIONING_MASK 0x07 +#define CPUID_EBX_PARTITIONING(_) (((_) >> 8) & 0x07) + uint32_t reserved2 : 5; + + /** + * [Bits 31:16] W = Ways of associativity. + */ + uint32_t ways_of_associativity_01 : 16; +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_01_BIT 16 +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_01_FLAG 0xFFFF0000 +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_01_MASK 0xFFFF +#define CPUID_EBX_WAYS_OF_ASSOCIATIVITY_01(_) (((_) >> 16) & 0xFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Number of Sets. + */ + uint32_t number_of_sets : 32; +#define CPUID_ECX_NUMBER_OF_SETS_BIT 0 +#define CPUID_ECX_NUMBER_OF_SETS_FLAG 0xFFFFFFFF +#define CPUID_ECX_NUMBER_OF_SETS_MASK 0xFFFFFFFF +#define CPUID_ECX_NUMBER_OF_SETS(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 4:0] Translation cache type field. + * - 00000b: Null (indicates this sub-leaf is not valid). + * - 00001b: Data TLB. + * - 00010b: Instruction TLB. + * - 00011b: Unified TLB. + * All other encodings are reserved. + * + * @note Some unified TLBs will allow a single TLB entry to satisfy data read/write and instruction fetches. Others will + * require separate entries (e.g., one loaded on data read/write and another loaded on an instruction fetch) . Please see + * the Intel(R) 64 and IA-32 Architectures Optimization Reference Manual for details of a particular product. + */ + uint32_t translation_cache_type_field : 5; +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD_BIT 0 +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD_FLAG 0x1F +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD_MASK 0x1F +#define CPUID_EDX_TRANSLATION_CACHE_TYPE_FIELD(_) (((_) >> 0) & 0x1F) + + /** + * [Bits 7:5] Translation cache level (starts at 1). + */ + uint32_t translation_cache_level : 3; +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL_BIT 5 +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL_FLAG 0xE0 +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL_MASK 0x07 +#define CPUID_EDX_TRANSLATION_CACHE_LEVEL(_) (((_) >> 5) & 0x07) + + /** + * [Bit 8] Fully associative structure. + */ + uint32_t fully_associative_structure : 1; +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE_BIT 8 +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE_FLAG 0x100 +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE_MASK 0x01 +#define CPUID_EDX_FULLY_ASSOCIATIVE_STRUCTURE(_) (((_) >> 8) & 0x01) + uint32_t reserved1 : 5; + + /** + * [Bits 25:14] Maximum number of addressable IDs for logical processors sharing this translation cache. + * + * @note Add one to the return value to get the result. + */ + uint32_t max_addressable_ids_for_logical_processors : 12; +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_BIT 14 +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_FLAG 0x3FFC000 +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS_MASK 0xFFF +#define CPUID_EDX_MAX_ADDRESSABLE_IDS_FOR_LOGICAL_PROCESSORS(_) (((_) >> 14) & 0xFFF) + uint32_t reserved2 : 6; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_18_ecx_01p; + +/** + * @} + */ + + + /** + * @brief Extended Function CPUID Information + * + * When CPUID executes with EAX set to 80000000H, the processor returns the highest value the processor recognizes for + * returning extended processor information. The value is returned in the EAX register and is processor specific. + */ +#define CPUID_EXTENDED_FUNCTION_INFORMATION 0x80000000 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Maximum Input Value for Extended Function CPUID Information. + */ + uint32_t max_extended_functions : 32; +#define CPUID_EAX_MAX_EXTENDED_FUNCTIONS_BIT 0 +#define CPUID_EAX_MAX_EXTENDED_FUNCTIONS_FLAG 0xFFFFFFFF +#define CPUID_EAX_MAX_EXTENDED_FUNCTIONS_MASK 0xFFFFFFFF +#define CPUID_EAX_MAX_EXTENDED_FUNCTIONS(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000000; + + +/** + * Extended Function CPUID Information. + */ +#define CPUID_EXTENDED_CPU_SIGNATURE 0x80000001 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] EAX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bit 0] LAHF/SAHF available in 64-bit mode. + */ + uint32_t lahf_sahf_available_in_64_bit_mode : 1; +#define CPUID_ECX_LAHF_SAHF_AVAILABLE_IN_64_BIT_MODE_BIT 0 +#define CPUID_ECX_LAHF_SAHF_AVAILABLE_IN_64_BIT_MODE_FLAG 0x01 +#define CPUID_ECX_LAHF_SAHF_AVAILABLE_IN_64_BIT_MODE_MASK 0x01 +#define CPUID_ECX_LAHF_SAHF_AVAILABLE_IN_64_BIT_MODE(_) (((_) >> 0) & 0x01) + uint32_t reserved1 : 4; + + /** + * [Bit 5] LZCNT. + */ + uint32_t lzcnt : 1; +#define CPUID_ECX_LZCNT_BIT 5 +#define CPUID_ECX_LZCNT_FLAG 0x20 +#define CPUID_ECX_LZCNT_MASK 0x01 +#define CPUID_ECX_LZCNT(_) (((_) >> 5) & 0x01) + uint32_t reserved2 : 2; + + /** + * [Bit 8] PREFETCHW. + */ + uint32_t prefetchw : 1; +#define CPUID_ECX_PREFETCHW_BIT 8 +#define CPUID_ECX_PREFETCHW_FLAG 0x100 +#define CPUID_ECX_PREFETCHW_MASK 0x01 +#define CPUID_ECX_PREFETCHW(_) (((_) >> 8) & 0x01) + uint32_t reserved3 : 23; + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + uint32_t reserved1 : 11; + + /** + * [Bit 11] SYSCALL/SYSRET available in 64-bit mode. + */ + uint32_t syscall_sysret_available_in_64_bit_mode : 1; +#define CPUID_EDX_SYSCALL_SYSRET_AVAILABLE_IN_64_BIT_MODE_BIT 11 +#define CPUID_EDX_SYSCALL_SYSRET_AVAILABLE_IN_64_BIT_MODE_FLAG 0x800 +#define CPUID_EDX_SYSCALL_SYSRET_AVAILABLE_IN_64_BIT_MODE_MASK 0x01 +#define CPUID_EDX_SYSCALL_SYSRET_AVAILABLE_IN_64_BIT_MODE(_) (((_) >> 11) & 0x01) + uint32_t reserved2 : 8; + + /** + * [Bit 20] Execute Disable Bit available. + */ + uint32_t execute_disable_bit_available : 1; +#define CPUID_EDX_EXECUTE_DISABLE_BIT_AVAILABLE_BIT 20 +#define CPUID_EDX_EXECUTE_DISABLE_BIT_AVAILABLE_FLAG 0x100000 +#define CPUID_EDX_EXECUTE_DISABLE_BIT_AVAILABLE_MASK 0x01 +#define CPUID_EDX_EXECUTE_DISABLE_BIT_AVAILABLE(_) (((_) >> 20) & 0x01) + uint32_t reserved3 : 5; + + /** + * [Bit 26] 1-GByte pages are available if 1. + */ + uint32_t pages_1gb_available : 1; +#define CPUID_EDX_PAGES_1GB_AVAILABLE_BIT 26 +#define CPUID_EDX_PAGES_1GB_AVAILABLE_FLAG 0x4000000 +#define CPUID_EDX_PAGES_1GB_AVAILABLE_MASK 0x01 +#define CPUID_EDX_PAGES_1GB_AVAILABLE(_) (((_) >> 26) & 0x01) + + /** + * [Bit 27] RDTSCP and IA32_TSC_AUX are available if 1. + */ + uint32_t rdtscp_available : 1; +#define CPUID_EDX_RDTSCP_AVAILABLE_BIT 27 +#define CPUID_EDX_RDTSCP_AVAILABLE_FLAG 0x8000000 +#define CPUID_EDX_RDTSCP_AVAILABLE_MASK 0x01 +#define CPUID_EDX_RDTSCP_AVAILABLE(_) (((_) >> 27) & 0x01) + uint32_t reserved4 : 1; + + /** + * [Bit 29] Intel(R) 64 Architecture available if 1. + */ + uint32_t ia64_available : 1; +#define CPUID_EDX_IA64_AVAILABLE_BIT 29 +#define CPUID_EDX_IA64_AVAILABLE_FLAG 0x20000000 +#define CPUID_EDX_IA64_AVAILABLE_MASK 0x01 +#define CPUID_EDX_IA64_AVAILABLE(_) (((_) >> 29) & 0x01) + uint32_t reserved5 : 2; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000001; + + +/** + * Extended Function CPUID Information. + */ +#define CPUID_BRAND_STRING1 0x80000002 + + /** + * Extended Function CPUID Information. + */ +#define CPUID_BRAND_STRING2 0x80000003 + + /** + * Extended Function CPUID Information. + */ +#define CPUID_BRAND_STRING3 0x80000004 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String. + */ + uint32_t processor_brand_string_1 : 32; +#define CPUID_EAX_PROCESSOR_BRAND_STRING_1_BIT 0 +#define CPUID_EAX_PROCESSOR_BRAND_STRING_1_FLAG 0xFFFFFFFF +#define CPUID_EAX_PROCESSOR_BRAND_STRING_1_MASK 0xFFFFFFFF +#define CPUID_EAX_PROCESSOR_BRAND_STRING_1(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_2 : 32; +#define CPUID_EBX_PROCESSOR_BRAND_STRING_2_BIT 0 +#define CPUID_EBX_PROCESSOR_BRAND_STRING_2_FLAG 0xFFFFFFFF +#define CPUID_EBX_PROCESSOR_BRAND_STRING_2_MASK 0xFFFFFFFF +#define CPUID_EBX_PROCESSOR_BRAND_STRING_2(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_3 : 32; +#define CPUID_ECX_PROCESSOR_BRAND_STRING_3_BIT 0 +#define CPUID_ECX_PROCESSOR_BRAND_STRING_3_FLAG 0xFFFFFFFF +#define CPUID_ECX_PROCESSOR_BRAND_STRING_3_MASK 0xFFFFFFFF +#define CPUID_ECX_PROCESSOR_BRAND_STRING_3(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_4 : 32; +#define CPUID_EDX_PROCESSOR_BRAND_STRING_4_BIT 0 +#define CPUID_EDX_PROCESSOR_BRAND_STRING_4_FLAG 0xFFFFFFFF +#define CPUID_EDX_PROCESSOR_BRAND_STRING_4_MASK 0xFFFFFFFF +#define CPUID_EDX_PROCESSOR_BRAND_STRING_4(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000002; + +/** + * @brief Extended Function CPUID Information + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_5 : 32; +#define CPUID_EAX_PROCESSOR_BRAND_STRING_5_BIT 0 +#define CPUID_EAX_PROCESSOR_BRAND_STRING_5_FLAG 0xFFFFFFFF +#define CPUID_EAX_PROCESSOR_BRAND_STRING_5_MASK 0xFFFFFFFF +#define CPUID_EAX_PROCESSOR_BRAND_STRING_5(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_6 : 32; +#define CPUID_EBX_PROCESSOR_BRAND_STRING_6_BIT 0 +#define CPUID_EBX_PROCESSOR_BRAND_STRING_6_FLAG 0xFFFFFFFF +#define CPUID_EBX_PROCESSOR_BRAND_STRING_6_MASK 0xFFFFFFFF +#define CPUID_EBX_PROCESSOR_BRAND_STRING_6(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_7 : 32; +#define CPUID_ECX_PROCESSOR_BRAND_STRING_7_BIT 0 +#define CPUID_ECX_PROCESSOR_BRAND_STRING_7_FLAG 0xFFFFFFFF +#define CPUID_ECX_PROCESSOR_BRAND_STRING_7_MASK 0xFFFFFFFF +#define CPUID_ECX_PROCESSOR_BRAND_STRING_7(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_8 : 32; +#define CPUID_EDX_PROCESSOR_BRAND_STRING_8_BIT 0 +#define CPUID_EDX_PROCESSOR_BRAND_STRING_8_FLAG 0xFFFFFFFF +#define CPUID_EDX_PROCESSOR_BRAND_STRING_8_MASK 0xFFFFFFFF +#define CPUID_EDX_PROCESSOR_BRAND_STRING_8(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000003; + +/** + * @brief Extended Function CPUID Information + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_9 : 32; +#define CPUID_EAX_PROCESSOR_BRAND_STRING_9_BIT 0 +#define CPUID_EAX_PROCESSOR_BRAND_STRING_9_FLAG 0xFFFFFFFF +#define CPUID_EAX_PROCESSOR_BRAND_STRING_9_MASK 0xFFFFFFFF +#define CPUID_EAX_PROCESSOR_BRAND_STRING_9(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_10 : 32; +#define CPUID_EBX_PROCESSOR_BRAND_STRING_10_BIT 0 +#define CPUID_EBX_PROCESSOR_BRAND_STRING_10_FLAG 0xFFFFFFFF +#define CPUID_EBX_PROCESSOR_BRAND_STRING_10_MASK 0xFFFFFFFF +#define CPUID_EBX_PROCESSOR_BRAND_STRING_10(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_11 : 32; +#define CPUID_ECX_PROCESSOR_BRAND_STRING_11_BIT 0 +#define CPUID_ECX_PROCESSOR_BRAND_STRING_11_FLAG 0xFFFFFFFF +#define CPUID_ECX_PROCESSOR_BRAND_STRING_11_MASK 0xFFFFFFFF +#define CPUID_ECX_PROCESSOR_BRAND_STRING_11(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] Processor Brand String Continued. + */ + uint32_t processor_brand_string_12 : 32; +#define CPUID_EDX_PROCESSOR_BRAND_STRING_12_BIT 0 +#define CPUID_EDX_PROCESSOR_BRAND_STRING_12_FLAG 0xFFFFFFFF +#define CPUID_EDX_PROCESSOR_BRAND_STRING_12_MASK 0xFFFFFFFF +#define CPUID_EDX_PROCESSOR_BRAND_STRING_12(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000004; + +/** + * @brief Extended Function CPUID Information + */ +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] EAX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000005; + + +/** + * Extended Function CPUID Information. + */ +#define CPUID_EXTENDED_CACHE_INFO 0x80000006 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] EAX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 7:0] Cache Line size in bytes. + */ + uint32_t cache_line_size_in_bytes : 8; +#define CPUID_ECX_CACHE_LINE_SIZE_IN_BYTES_BIT 0 +#define CPUID_ECX_CACHE_LINE_SIZE_IN_BYTES_FLAG 0xFF +#define CPUID_ECX_CACHE_LINE_SIZE_IN_BYTES_MASK 0xFF +#define CPUID_ECX_CACHE_LINE_SIZE_IN_BYTES(_) (((_) >> 0) & 0xFF) + uint32_t reserved1 : 4; + + /** + * [Bits 15:12] L2 Associativity field. + * L2 associativity field encodings: + * - 00H - Disabled. + * - 01H - Direct mapped. + * - 02H - 2-way. + * - 04H - 4-way. + * - 06H - 8-way. + * - 08H - 16-way. + * - 0FH - Fully associative. + */ + uint32_t l2_associativity_field : 4; +#define CPUID_ECX_L2_ASSOCIATIVITY_FIELD_BIT 12 +#define CPUID_ECX_L2_ASSOCIATIVITY_FIELD_FLAG 0xF000 +#define CPUID_ECX_L2_ASSOCIATIVITY_FIELD_MASK 0x0F +#define CPUID_ECX_L2_ASSOCIATIVITY_FIELD(_) (((_) >> 12) & 0x0F) + + /** + * [Bits 31:16] Cache size in 1K units. + */ + uint32_t cache_size_in_1k_units : 16; +#define CPUID_ECX_CACHE_SIZE_IN_1K_UNITS_BIT 16 +#define CPUID_ECX_CACHE_SIZE_IN_1K_UNITS_FLAG 0xFFFF0000 +#define CPUID_ECX_CACHE_SIZE_IN_1K_UNITS_MASK 0xFFFF +#define CPUID_ECX_CACHE_SIZE_IN_1K_UNITS(_) (((_) >> 16) & 0xFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + /** + * [Bits 31:0] EDX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EDX_RESERVED_BIT 0 +#define CPUID_EDX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EDX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EDX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000006; + + +/** + * Extended Function CPUID Information. + */ +#define CPUID_EXTENDED_TIME_STAMP_COUNTER 0x80000007 +typedef struct +{ + union + { + struct + { + /** + * [Bits 31:0] EAX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EAX_RESERVED_BIT 0 +#define CPUID_EAX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EAX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EAX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } eax; + + union + { + struct + { + /** + * [Bits 31:0] EBX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_EBX_RESERVED_BIT 0 +#define CPUID_EBX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_EBX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_EBX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ebx; + + union + { + struct + { + /** + * [Bits 31:0] ECX is reserved. + */ + uint32_t reserved : 32; +#define CPUID_ECX_RESERVED_BIT 0 +#define CPUID_ECX_RESERVED_FLAG 0xFFFFFFFF +#define CPUID_ECX_RESERVED_MASK 0xFFFFFFFF +#define CPUID_ECX_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + }; + + uint32_t flags; + } ecx; + + union + { + struct + { + uint32_t reserved1 : 8; + + /** + * [Bit 8] Invariant TSC available if 1. + */ + uint32_t invariant_tsc_available : 1; +#define CPUID_EDX_INVARIANT_TSC_AVAILABLE_BIT 8 +#define CPUID_EDX_INVARIANT_TSC_AVAILABLE_FLAG 0x100 +#define CPUID_EDX_INVARIANT_TSC_AVAILABLE_MASK 0x01 +#define CPUID_EDX_INVARIANT_TSC_AVAILABLE(_) (((_) >> 8) & 0x01) + uint32_t reserved2 : 23; + }; + + uint32_t flags; + } edx; + +} cpuid_eax_80000007; + +/** + * @} + */ + + /** + * @defgroup model_specific_registers \ + * Model Specific Registers + * + * @see Vol2A[3.2(CPUID)] (reference) + * @{ + */ + /** + * @defgroup ia32_p5_mc \ + * IA32_P5_MC_(x) + * + * When machine-check exceptions are enabled for the Pentium processor (MCE flag is set in control register CR4), the + * machine-check exception handler uses the RDMSR instruction to read the error type from the P5_MC_TYPE register and the + * machine check address from the P5_MC_ADDR register. The handler then normally reports these register values to the + * system console before aborting execution. + * + * @see Vol3B[15.10.2(Pentium Processor Machine-Check Exception Handling)] (reference) + * @{ + */ + /** + * Machine-check exception address. + * + * @remarks 05_01H + * @see Vol4[2.22(MSRS IN PENTIUM PROCESSORS)] + */ +#define IA32_P5_MC_ADDR 0x00000000 + + /** + * Machine-check exception type. + * + * @remarks 05_01H + * @see Vol4[2.22(MSRS IN PENTIUM PROCESSORS)] + */ +#define IA32_P5_MC_TYPE 0x00000001 + /** + * @} + */ + + /** + * System coherence line size. + * + * @remarks 0F_03H + * @see Vol3A[8.10.5(Monitor/Mwait Address Range Determination)] + * @see Vol3A[8.10.5(Monitor/Mwait Address Range Determination)] (reference) + */ +#define IA32_MONITOR_FILTER_LINE_SIZE 0x00000006 + + /** + * Value as returned by instruction RDTSC. + * + * @remarks 05_01H + * @see Vol3B[17.17(TIME-STAMP COUNTER)] + */ +#define IA32_TIME_STAMP_COUNTER 0x00000010 + + /** + * The operating system can use this MSR to determine "slot" information for the processor and the proper microcode update + * to load. + * + * @remarks 06_01H + */ +#define IA32_PLATFORM_ID 0x00000017 +typedef union +{ + struct + { + uint64_t reserved1 : 50; + + /** + * @brief Platform Id (RO) + * + * [Bits 52:50] Contains information concerning the intended platform for the processor. + * + * + * 52 | 51 | 50 | _ + * --:|:--:|:---|----------------- + * 0 | 0 | 0 | Processor Flag 0 + * 0 | 0 | 1 | Processor Flag 1 + * 0 | 1 | 0 | Processor Flag 2 + * 0 | 1 | 1 | Processor Flag 3 + * 1 | 0 | 0 | Processor Flag 4 + * 1 | 0 | 1 | Processor Flag 5 + * 1 | 1 | 0 | Processor Flag 6 + * 1 | 1 | 1 | Processor Flag 7 + */ + uint64_t platform_id : 3; +#define IA32_PLATFORM_ID_PLATFORM_ID_BIT 50 +#define IA32_PLATFORM_ID_PLATFORM_ID_FLAG 0x1C000000000000 +#define IA32_PLATFORM_ID_PLATFORM_ID_MASK 0x07 +#define IA32_PLATFORM_ID_PLATFORM_ID(_) (((_) >> 50) & 0x07) + uint64_t reserved2 : 11; + }; + + uint64_t flags; +} ia32_platform_id_register; + + +/** + * This register holds the APIC base address, permitting the relocation of the APIC memory map. + * + * @remarks 06_01H + * @see Vol3A[10.4.4(Local APIC Status and Location)] + * @see Vol3A[10.4.5(Relocating the Local APIC Registers)] + */ +#define IA32_APIC_BASE 0x0000001B +typedef union +{ + struct + { + uint64_t reserved1 : 8; + + /** + * [Bit 8] BSP flag. + */ + uint64_t bsp_flag : 1; +#define IA32_APIC_BASE_BSP_FLAG_BIT 8 +#define IA32_APIC_BASE_BSP_FLAG_FLAG 0x100 +#define IA32_APIC_BASE_BSP_FLAG_MASK 0x01 +#define IA32_APIC_BASE_BSP_FLAG(_) (((_) >> 8) & 0x01) + uint64_t reserved2 : 1; + + /** + * [Bit 10] Enable x2APIC mode. + */ + uint64_t enable_x2apic_mode : 1; +#define IA32_APIC_BASE_ENABLE_X2APIC_MODE_BIT 10 +#define IA32_APIC_BASE_ENABLE_X2APIC_MODE_FLAG 0x400 +#define IA32_APIC_BASE_ENABLE_X2APIC_MODE_MASK 0x01 +#define IA32_APIC_BASE_ENABLE_X2APIC_MODE(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] APIC Global Enable. + */ + uint64_t apic_global_enable : 1; +#define IA32_APIC_BASE_APIC_GLOBAL_ENABLE_BIT 11 +#define IA32_APIC_BASE_APIC_GLOBAL_ENABLE_FLAG 0x800 +#define IA32_APIC_BASE_APIC_GLOBAL_ENABLE_MASK 0x01 +#define IA32_APIC_BASE_APIC_GLOBAL_ENABLE(_) (((_) >> 11) & 0x01) + + /** + * [Bits 47:12] APIC Base. + */ + uint64_t apic_base : 36; +#define IA32_APIC_BASE_APIC_BASE_BIT 12 +#define IA32_APIC_BASE_APIC_BASE_FLAG 0xFFFFFFFFF000 +#define IA32_APIC_BASE_APIC_BASE_MASK 0xFFFFFFFFF +#define IA32_APIC_BASE_APIC_BASE(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved3 : 16; + }; + + uint64_t flags; +} ia32_apic_base_register; + + +/** + * Control Features in Intel 64 Processor. + * + * @remarks If any one enumeration condition for defined bit field holds. + */ +#define IA32_FEATURE_CONTROL 0x0000003A +typedef union +{ + struct + { + /** + * @brief Lock bit (R/WO) + * + * [Bit 0] When set, locks this MSR from being written; writes to this bit will result in GP(0). + * + * @note Once the Lock bit is set, the contents of this register cannot be modified. Therefore the lock bit must be set + * after configuring support for Intel Virtualization Technology and prior to transferring control to an option ROM or the + * OS. Hence, once the Lock bit is set, the entire IA32_FEATURE_CONTROL contents are preserved across RESET when PWRGOOD is + * not deasserted. + * @remarks If any one enumeration condition for defined bit field position greater than bit 0 holds. + */ + uint64_t lock_bit : 1; +#define IA32_FEATURE_CONTROL_LOCK_BIT_BIT 0 +#define IA32_FEATURE_CONTROL_LOCK_BIT_FLAG 0x01 +#define IA32_FEATURE_CONTROL_LOCK_BIT_MASK 0x01 +#define IA32_FEATURE_CONTROL_LOCK_BIT(_) (((_) >> 0) & 0x01) + + /** + * @brief Enable VMX inside SMX operation (R/WL) + * + * [Bit 1] This bit enables a system executive to use VMX in conjunction with SMX to support Intel(R) Trusted Execution + * Technology. BIOS must set this bit only when the CPUID function 1 returns VMX feature flag and SMX feature flag set (ECX + * bits 5 and 6 respectively). + * + * @remarks If CPUID.01H:ECX[5] = 1 && CPUID.01H:ECX[6] = 1 + */ + uint64_t enable_vmx_inside_smx : 1; +#define IA32_FEATURE_CONTROL_ENABLE_VMX_INSIDE_SMX_BIT 1 +#define IA32_FEATURE_CONTROL_ENABLE_VMX_INSIDE_SMX_FLAG 0x02 +#define IA32_FEATURE_CONTROL_ENABLE_VMX_INSIDE_SMX_MASK 0x01 +#define IA32_FEATURE_CONTROL_ENABLE_VMX_INSIDE_SMX(_) (((_) >> 1) & 0x01) + + /** + * @brief Enable VMX outside SMX operation (R/WL) + * + * [Bit 2] This bit enables VMX for a system executive that does not require SMX. BIOS must set this bit only when the + * CPUID function 1 returns the VMX feature flag set (ECX bit 5). + * + * @remarks If CPUID.01H:ECX[5] = 1 + */ + uint64_t enable_vmx_outside_smx : 1; +#define IA32_FEATURE_CONTROL_ENABLE_VMX_OUTSIDE_SMX_BIT 2 +#define IA32_FEATURE_CONTROL_ENABLE_VMX_OUTSIDE_SMX_FLAG 0x04 +#define IA32_FEATURE_CONTROL_ENABLE_VMX_OUTSIDE_SMX_MASK 0x01 +#define IA32_FEATURE_CONTROL_ENABLE_VMX_OUTSIDE_SMX(_) (((_) >> 2) & 0x01) + uint64_t reserved1 : 5; + + /** + * @brief SENTER Local Function Enable (R/WL) + * + * [Bits 14:8] When set, each bit in the field represents an enable control for a corresponding SENTER function. This field + * is supported only if CPUID.1:ECX.[bit 6] is set. + * + * @remarks If CPUID.01H:ECX[6] = 1 + */ + uint64_t senter_local_function_enables : 7; +#define IA32_FEATURE_CONTROL_SENTER_LOCAL_FUNCTION_ENABLES_BIT 8 +#define IA32_FEATURE_CONTROL_SENTER_LOCAL_FUNCTION_ENABLES_FLAG 0x7F00 +#define IA32_FEATURE_CONTROL_SENTER_LOCAL_FUNCTION_ENABLES_MASK 0x7F +#define IA32_FEATURE_CONTROL_SENTER_LOCAL_FUNCTION_ENABLES(_) (((_) >> 8) & 0x7F) + + /** + * @brief SENTER Global Enable (R/WL) + * + * [Bit 15] This bit must be set to enable SENTER leaf functions. This bit is supported only if CPUID.1:ECX.[bit 6] is set. + * + * @remarks If CPUID.01H:ECX[6] = 1 + */ + uint64_t senter_global_enable : 1; +#define IA32_FEATURE_CONTROL_SENTER_GLOBAL_ENABLE_BIT 15 +#define IA32_FEATURE_CONTROL_SENTER_GLOBAL_ENABLE_FLAG 0x8000 +#define IA32_FEATURE_CONTROL_SENTER_GLOBAL_ENABLE_MASK 0x01 +#define IA32_FEATURE_CONTROL_SENTER_GLOBAL_ENABLE(_) (((_) >> 15) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief SGX Launch Control Enable (R/WL) + * + * [Bit 17] This bit must be set to enable runtime reconfiguration of SGX Launch Control via the IA32_SGXLEPUBKEYHASHn MSR. + * + * @remarks If CPUID.(EAX=07H, ECX=0H): ECX[30] = 1 + */ + uint64_t sgx_launch_control_enable : 1; +#define IA32_FEATURE_CONTROL_SGX_LAUNCH_CONTROL_ENABLE_BIT 17 +#define IA32_FEATURE_CONTROL_SGX_LAUNCH_CONTROL_ENABLE_FLAG 0x20000 +#define IA32_FEATURE_CONTROL_SGX_LAUNCH_CONTROL_ENABLE_MASK 0x01 +#define IA32_FEATURE_CONTROL_SGX_LAUNCH_CONTROL_ENABLE(_) (((_) >> 17) & 0x01) + + /** + * @brief SGX Global Enable (R/WL) + * + * [Bit 18] This bit must be set to enable SGX leaf functions. + * + * @remarks If CPUID.(EAX=07H, ECX=0H): EBX[2] = 1 + */ + uint64_t sgx_global_enable : 1; +#define IA32_FEATURE_CONTROL_SGX_GLOBAL_ENABLE_BIT 18 +#define IA32_FEATURE_CONTROL_SGX_GLOBAL_ENABLE_FLAG 0x40000 +#define IA32_FEATURE_CONTROL_SGX_GLOBAL_ENABLE_MASK 0x01 +#define IA32_FEATURE_CONTROL_SGX_GLOBAL_ENABLE(_) (((_) >> 18) & 0x01) + uint64_t reserved3 : 1; + + /** + * @brief LMCE On (R/WL) + * + * [Bit 20] When set, system software can program the MSRs associated with LMCE to configure delivery of some machine check + * exceptions to a single logical processor. + * + * @remarks If IA32_MCG_CAP[27] = 1 + */ + uint64_t lmce_on : 1; +#define IA32_FEATURE_CONTROL_LMCE_ON_BIT 20 +#define IA32_FEATURE_CONTROL_LMCE_ON_FLAG 0x100000 +#define IA32_FEATURE_CONTROL_LMCE_ON_MASK 0x01 +#define IA32_FEATURE_CONTROL_LMCE_ON(_) (((_) >> 20) & 0x01) + uint64_t reserved4 : 43; + }; + + uint64_t flags; +} ia32_feature_control_register; + + +/** + * Per Logical Processor TSC Adjust. + * + * @remarks If CPUID.(EAX=07H, ECX=0H): EBX[1] = 1 + */ +#define IA32_TSC_ADJUST 0x0000003B +typedef struct +{ + /** + * Local offset value of the IA32_TSC for a logical processor. Reset value is zero. A write to IA32_TSC will modify the + * local offset in IA32_TSC_ADJUST and the content of IA32_TSC, but does not affect the internal invariant TSC hardware. + */ + uint64_t thread_adjust; +} ia32_tsc_adjust_register; + + +/** + * @brief BIOS Update Trigger (W) + * + * Executing a WRMSR instruction to this MSR causes a microcode update to be loaded into the processor. A processor may + * prevent writing to this MSR when loading guest states on VM entries or saving guest states on VM exits. + * + * @remarks 06_01H + * @see Vol3A[9.11.6(Microcode Update Loader)] + */ +#define IA32_BIOS_UPDATE_TRIGGER 0x00000079 + + /** + * @brief BIOS Update Signature (RO) + * + * Returns the microcode update signature following the execution of CPUID.01H. A processor may prevent writing to this MSR + * when loading guest states on VM entries or saving guest states on VM exits. + * + * @remarks 06_01H + */ +#define IA32_BIOS_UPDATE_SIGNATURE 0x0000008B +typedef union +{ + struct + { + /** + * [Bits 31:0] Reserved. + */ + uint64_t reserved : 32; +#define IA32_BIOS_UPDATE_SIGNATURE_RESERVED_BIT 0 +#define IA32_BIOS_UPDATE_SIGNATURE_RESERVED_FLAG 0xFFFFFFFF +#define IA32_BIOS_UPDATE_SIGNATURE_RESERVED_MASK 0xFFFFFFFF +#define IA32_BIOS_UPDATE_SIGNATURE_RESERVED(_) (((_) >> 0) & 0xFFFFFFFF) + + /** + * @brief Microcode update signature + * + * [Bits 63:32] This field contains the signature of the currently loaded microcode update when read following the + * execution of the CPUID instruction, function 1. It is required that this register field be pre-loaded with zero prior to + * executing the CPUID, function 1. If the field remains equal to zero, then there is no microcode update loaded. Another + * nonzero value will be the signature. + * + * @see Vol3A[9.11.7.1(Determining the Signature)] (reference) + */ + uint64_t microcode_update_signature : 32; +#define IA32_BIOS_UPDATE_SIGNATURE_MICROCODE_UPDATE_SIGNATURE_BIT 32 +#define IA32_BIOS_UPDATE_SIGNATURE_MICROCODE_UPDATE_SIGNATURE_FLAG 0xFFFFFFFF00000000 +#define IA32_BIOS_UPDATE_SIGNATURE_MICROCODE_UPDATE_SIGNATURE_MASK 0xFFFFFFFF +#define IA32_BIOS_UPDATE_SIGNATURE_MICROCODE_UPDATE_SIGNATURE(_) (((_) >> 32) & 0xFFFFFFFF) + }; + + uint64_t flags; +} ia32_bios_update_signature_register; + +/** + * @defgroup ia32_sgxlepubkeyhash \ + * IA32_SGXLEPUBKEYHASH[(64*n+63):(64*n)] + * + * Bits (64*n+63):(64*n) of the SHA256 digest of the SIGSTRUCT.MODULUS for SGX Launch Enclave. On reset, the default value + * is the digest of Intel's signing key. + * + * @remarks Read permitted If CPUID.(EAX=12H,ECX=0H): EAX[0]=1 && CPUID.(EAX=07H,ECX=0H):ECX[30]=1. Write permitted if + * CPUID.(EAX=12H,ECX=0H): EAX[0]=1 && IA32_FEATURE_CONTROL[17] = 1 && IA32_FEATURE_CONTROL[0] = 1. + * @{ + */ +#define IA32_SGXLEPUBKEYHASH0 0x0000008C +#define IA32_SGXLEPUBKEYHASH1 0x0000008D +#define IA32_SGXLEPUBKEYHASH2 0x0000008E +#define IA32_SGXLEPUBKEYHASH3 0x0000008F + /** + * @} + */ + + + /** + * SMM Monitor Configuration. + * + * @remarks If CPUID.01H: ECX[5]=1 || CPUID.01H: ECX[6] = 1 + */ +#define IA32_SMM_MONITOR_CTL 0x0000009B +typedef union +{ + struct + { + /** + * @brief Valid (R/W) + * + * [Bit 0] The STM may be invoked using VMCALL only if this bit is 1. Because VMCALL is used to activate the dual-monitor + * treatment, the dual-monitor treatment cannot be activated if the bit is 0. This bit is cleared when the logical + * processor is reset. + * + * @see Vol3C[34.15.6(Activating the Dual-Monitor Treatment)] + * @see Vol3C[34.15.5(Enabling the Dual-Monitor Treatment)] (reference) + */ + uint64_t valid : 1; +#define IA32_SMM_MONITOR_CTL_VALID_BIT 0 +#define IA32_SMM_MONITOR_CTL_VALID_FLAG 0x01 +#define IA32_SMM_MONITOR_CTL_VALID_MASK 0x01 +#define IA32_SMM_MONITOR_CTL_VALID(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 1; + + /** + * @brief Controls SMI unblocking by VMXOFF + * + * [Bit 2] Determines whether executions of VMXOFF unblock SMIs under the default treatment of SMIs and SMM. Executions of + * VMXOFF unblock SMIs unless bit 2 is 1 (the value of bit 0 is irrelevant). + * + * @remarks If IA32_VMX_MISC[28] + * @see Vol3C[34.14.4(VMXOFF and SMI Unblocking)] + * @see Vol3C[34.15.5(Enabling the Dual-Monitor Treatment)] (reference) + */ + uint64_t smi_unblocking_by_vmxoff : 1; +#define IA32_SMM_MONITOR_CTL_SMI_UNBLOCKING_BY_VMXOFF_BIT 2 +#define IA32_SMM_MONITOR_CTL_SMI_UNBLOCKING_BY_VMXOFF_FLAG 0x04 +#define IA32_SMM_MONITOR_CTL_SMI_UNBLOCKING_BY_VMXOFF_MASK 0x01 +#define IA32_SMM_MONITOR_CTL_SMI_UNBLOCKING_BY_VMXOFF(_) (((_) >> 2) & 0x01) + uint64_t reserved2 : 9; + + /** + * @brief MSEG Base (R/W) + * + * [Bits 31:12] Value that, when shifted left 12 bits, is the physical address of MSEG (the MSEG base address). + * + * @see Vol3C[34.15.5(Enabling the Dual-Monitor Treatment)] (reference) + */ + uint64_t mseg_base : 20; +#define IA32_SMM_MONITOR_CTL_MSEG_BASE_BIT 12 +#define IA32_SMM_MONITOR_CTL_MSEG_BASE_FLAG 0xFFFFF000 +#define IA32_SMM_MONITOR_CTL_MSEG_BASE_MASK 0xFFFFF +#define IA32_SMM_MONITOR_CTL_MSEG_BASE(_) (((_) >> 12) & 0xFFFFF) + uint64_t reserved3 : 32; + }; + + uint64_t flags; +} ia32_smm_monitor_ctl_register; + +typedef struct +{ + /** + * @brief MSEG revision identifier + * + * Different processors may use different MSEG revision identifiers. These identifiers enable software to avoid using an + * MSEG header formatted for one processor on a processor that uses a different format. Software can discover the MSEG + * revision identifier that a processor uses by reading the VMX capability MSR IA32_VMX_MISC. + * + * @see Vol3D[A.6(MISCELLANEOUS DATA)] + */ + uint32_t mseg_header_revision; + + /** + * @brief SMM-transfer monitor features field + * + * Bits 31:1 of this field are reserved and must be zero. Bit 0 of the field is the IA-32e mode SMM feature bit. It + * indicates whether the logical processor will be in IA-32e mode after the STM is activated. + * + * @see Vol3C[34.15.6(Activating the Dual-Monitor Treatment)] + */ + uint32_t monitor_features; + + /** + * Define values for the MonitorFeatures field of MSEG_HEADER. + */ +#define IA32_STM_FEATURES_IA32E 0x00000001 + + /** + * Fields that determine how processor state is loaded when the STM is activated. SMM code should establish these fields so + * that activating of the STM invokes the STM's initialization code. + * + * @see Vol3C[34.15.6.5(Loading Host State)] + */ + uint32_t gdtr_limit; + uint32_t gdtr_base_offset; + uint32_t cs_selector; + uint32_t eip_offset; + uint32_t esp_offset; + uint32_t cr3_offset; +} ia32_mseg_header; + + +/** + * Base address of the logical processor's SMRAM image. + * + * @remarks If IA32_VMX_MISC[15] + */ +#define IA32_SMBASE 0x0000009E + /** + * @defgroup ia32_pmc \ + * IA32_PMC(n) + * + * General Performance Counters. + * + * @remarks If CPUID.0AH: EAX[15:8] > n + * @{ + */ +#define IA32_PMC0 0x000000C1 +#define IA32_PMC1 0x000000C2 +#define IA32_PMC2 0x000000C3 +#define IA32_PMC3 0x000000C4 +#define IA32_PMC4 0x000000C5 +#define IA32_PMC5 0x000000C6 +#define IA32_PMC6 0x000000C7 +#define IA32_PMC7 0x000000C8 + /** + * @} + */ + + + /** + * TSC Frequency Clock Counter. + * + * @remarks If CPUID.06H: ECX[0] = 1 + */ +#define IA32_MPERF 0x000000E7 +typedef struct +{ + /** + * @brief C0 TSC Frequency Clock Count + * + * Increments at fixed interval (relative to TSC freq.) when the logical processor is in C0. Cleared upon overflow / + * wrap-around of IA32_APERF. + */ + uint64_t c0_mcnt; +} ia32_mperf_register; + + +/** + * Actual Performance Clock Counter + * + * @remarks If CPUID.06H: ECX[0] = 1 + */ +#define IA32_APERF 0x000000E8 +typedef struct +{ + /** + * @brief C0 Actual Frequency Clock Count + * + * Accumulates core clock counts at the coordinated clock frequency, when the logical processor is in C0. Cleared upon + * overflow / wrap-around of IA32_MPERF. + */ + uint64_t c0_acnt; +} ia32_aperf_register; + + +/** + * MTRR Capability. + * + * @see Vol3A[11.11.2.1(IA32_MTRR_DEF_TYPE MSR)] + * @see Vol3A[11.11.1(MTRR Feature Identification)] (reference) + */ +#define IA32_MTRR_CAPABILITIES 0x000000FE +typedef union +{ + struct + { + /** + * @brief VCNT (variable range registers count) field + * + * [Bits 7:0] Indicates the number of variable ranges implemented on the processor. + */ + uint64_t variable_range_count : 8; +#define IA32_MTRR_CAPABILITIES_VARIABLE_RANGE_COUNT_BIT 0 +#define IA32_MTRR_CAPABILITIES_VARIABLE_RANGE_COUNT_FLAG 0xFF +#define IA32_MTRR_CAPABILITIES_VARIABLE_RANGE_COUNT_MASK 0xFF +#define IA32_MTRR_CAPABILITIES_VARIABLE_RANGE_COUNT(_) (((_) >> 0) & 0xFF) + + /** + * @brief FIX (fixed range registers supported) flag + * + * [Bit 8] Fixed range MTRRs (IA32_MTRR_FIX64K_00000 through IA32_MTRR_FIX4K_0F8000) are supported when set; no fixed range + * registers are supported when clear. + */ + uint64_t fixed_range_supported : 1; +#define IA32_MTRR_CAPABILITIES_FIXED_RANGE_SUPPORTED_BIT 8 +#define IA32_MTRR_CAPABILITIES_FIXED_RANGE_SUPPORTED_FLAG 0x100 +#define IA32_MTRR_CAPABILITIES_FIXED_RANGE_SUPPORTED_MASK 0x01 +#define IA32_MTRR_CAPABILITIES_FIXED_RANGE_SUPPORTED(_) (((_) >> 8) & 0x01) + uint64_t reserved1 : 1; + + /** + * @brief WC (write combining) flag + * + * [Bit 10] The write-combining (WC) memory type is supported when set; the WC type is not supported when clear. + */ + uint64_t wc_supported : 1; +#define IA32_MTRR_CAPABILITIES_WC_SUPPORTED_BIT 10 +#define IA32_MTRR_CAPABILITIES_WC_SUPPORTED_FLAG 0x400 +#define IA32_MTRR_CAPABILITIES_WC_SUPPORTED_MASK 0x01 +#define IA32_MTRR_CAPABILITIES_WC_SUPPORTED(_) (((_) >> 10) & 0x01) + + /** + * @brief SMRR (System-Management Range Register) flag + * + * [Bit 11] The system-management range register (SMRR) interface is supported when bit 11 is set; the SMRR interface is + * not supported when clear. + */ + uint64_t smrr_supported : 1; +#define IA32_MTRR_CAPABILITIES_SMRR_SUPPORTED_BIT 11 +#define IA32_MTRR_CAPABILITIES_SMRR_SUPPORTED_FLAG 0x800 +#define IA32_MTRR_CAPABILITIES_SMRR_SUPPORTED_MASK 0x01 +#define IA32_MTRR_CAPABILITIES_SMRR_SUPPORTED(_) (((_) >> 11) & 0x01) + uint64_t reserved2 : 52; + }; + + uint64_t flags; +} ia32_mtrr_capabilities_register; + + +/** + * @brief SYSENTER_CS_MSR (R/W) + * + * The lower 16 bits of this MSR are the segment selector for the privilege level 0 code segment. This value is also used + * to determine the segment selector of the privilege level 0 stack segment. This value cannot indicate a null selector. + * + * @remarks 06_01H + * @see Vol2B[4.3(Instructions (M-U) | SYSCALL - Fast System Call)] (reference) + */ +#define IA32_SYSENTER_CS 0x00000174 +typedef union +{ + struct + { + /** + * [Bits 15:0] CS Selector. + */ + uint64_t cs_selector : 16; +#define IA32_SYSENTER_CS_CS_SELECTOR_BIT 0 +#define IA32_SYSENTER_CS_CS_SELECTOR_FLAG 0xFFFF +#define IA32_SYSENTER_CS_CS_SELECTOR_MASK 0xFFFF +#define IA32_SYSENTER_CS_CS_SELECTOR(_) (((_) >> 0) & 0xFFFF) + + /** + * [Bits 31:16] Not used. + * + * @remarks Can be read and written. + */ + uint64_t not_used_1 : 16; +#define IA32_SYSENTER_CS_NOT_USED_1_BIT 16 +#define IA32_SYSENTER_CS_NOT_USED_1_FLAG 0xFFFF0000 +#define IA32_SYSENTER_CS_NOT_USED_1_MASK 0xFFFF +#define IA32_SYSENTER_CS_NOT_USED_1(_) (((_) >> 16) & 0xFFFF) + + /** + * [Bits 63:32] Not used. + * + * @remarks Writes ignored; reads return zero. + */ + uint64_t not_used_2 : 32; +#define IA32_SYSENTER_CS_NOT_USED_2_BIT 32 +#define IA32_SYSENTER_CS_NOT_USED_2_FLAG 0xFFFFFFFF00000000 +#define IA32_SYSENTER_CS_NOT_USED_2_MASK 0xFFFFFFFF +#define IA32_SYSENTER_CS_NOT_USED_2(_) (((_) >> 32) & 0xFFFFFFFF) + }; + + uint64_t flags; +} ia32_sysenter_cs_register; + + +/** + * @brief SYSENTER_ESP_MSR (R/W) + * + * The value of this MSR is loaded into RSP (thus, this value contains the stack pointer for the privilege level 0 stack). + * This value cannot represent a non-canonical address. In protected mode, only bits 31:0 are loaded. + * + * @remarks 06_01H + * @see Vol2B[4.3(Instructions (M-U) | SYSCALL - Fast System Call)] (reference) + */ +#define IA32_SYSENTER_ESP 0x00000175 + + /** + * @brief SYSENTER_EIP_MSR (R/W) + * + * The value of this MSR is loaded into RIP (thus, this value references the first instruction of the selected operating + * procedure or routine). In protected mode, only bits 31:0 are loaded. + * + * @remarks 06_01H + * @see Vol2B[4.3(Instructions (M-U) | SYSCALL - Fast System Call)] (reference) + */ +#define IA32_SYSENTER_EIP 0x00000176 + + /** + * Global Machine Check Capability. + * + * @remarks 06_01H + */ +#define IA32_MCG_CAP 0x00000179 +typedef union +{ + struct + { + /** + * [Bits 7:0] Number of reporting banks. + */ + uint64_t count : 8; +#define IA32_MCG_CAP_COUNT_BIT 0 +#define IA32_MCG_CAP_COUNT_FLAG 0xFF +#define IA32_MCG_CAP_COUNT_MASK 0xFF +#define IA32_MCG_CAP_COUNT(_) (((_) >> 0) & 0xFF) + + /** + * [Bit 8] IA32_MCG_CTL is present if this bit is set. + */ + uint64_t mcg_ctl_p : 1; +#define IA32_MCG_CAP_MCG_CTL_P_BIT 8 +#define IA32_MCG_CAP_MCG_CTL_P_FLAG 0x100 +#define IA32_MCG_CAP_MCG_CTL_P_MASK 0x01 +#define IA32_MCG_CAP_MCG_CTL_P(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] Extended machine check state registers are present if this bit is set. + */ + uint64_t mcg_ext_p : 1; +#define IA32_MCG_CAP_MCG_EXT_P_BIT 9 +#define IA32_MCG_CAP_MCG_EXT_P_FLAG 0x200 +#define IA32_MCG_CAP_MCG_EXT_P_MASK 0x01 +#define IA32_MCG_CAP_MCG_EXT_P(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] Support for corrected MC error event is present. + * + * @remarks 06_01H + */ + uint64_t mcp_cmci_p : 1; +#define IA32_MCG_CAP_MCP_CMCI_P_BIT 10 +#define IA32_MCG_CAP_MCP_CMCI_P_FLAG 0x400 +#define IA32_MCG_CAP_MCP_CMCI_P_MASK 0x01 +#define IA32_MCG_CAP_MCP_CMCI_P(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] Threshold-based error status register are present if this bit is set. + */ + uint64_t mcg_tes_p : 1; +#define IA32_MCG_CAP_MCG_TES_P_BIT 11 +#define IA32_MCG_CAP_MCG_TES_P_FLAG 0x800 +#define IA32_MCG_CAP_MCG_TES_P_MASK 0x01 +#define IA32_MCG_CAP_MCG_TES_P(_) (((_) >> 11) & 0x01) + uint64_t reserved1 : 4; + + /** + * [Bits 23:16] Number of extended machine check state registers present. + */ + uint64_t mcg_ext_cnt : 8; +#define IA32_MCG_CAP_MCG_EXT_CNT_BIT 16 +#define IA32_MCG_CAP_MCG_EXT_CNT_FLAG 0xFF0000 +#define IA32_MCG_CAP_MCG_EXT_CNT_MASK 0xFF +#define IA32_MCG_CAP_MCG_EXT_CNT(_) (((_) >> 16) & 0xFF) + + /** + * [Bit 24] The processor supports software error recovery if this bit is set. + */ + uint64_t mcg_ser_p : 1; +#define IA32_MCG_CAP_MCG_SER_P_BIT 24 +#define IA32_MCG_CAP_MCG_SER_P_FLAG 0x1000000 +#define IA32_MCG_CAP_MCG_SER_P_MASK 0x01 +#define IA32_MCG_CAP_MCG_SER_P(_) (((_) >> 24) & 0x01) + uint64_t reserved2 : 1; + + /** + * [Bit 26] Indicates that the processor allows platform firmware to be invoked when an error is detected so that it may + * provide additional platform specific information in an ACPI format "Generic Error Data Entry" that augments the data + * included in machine check bank registers. + * + * @remarks 06_3EH + */ + uint64_t mcg_elog_p : 1; +#define IA32_MCG_CAP_MCG_ELOG_P_BIT 26 +#define IA32_MCG_CAP_MCG_ELOG_P_FLAG 0x4000000 +#define IA32_MCG_CAP_MCG_ELOG_P_MASK 0x01 +#define IA32_MCG_CAP_MCG_ELOG_P(_) (((_) >> 26) & 0x01) + + /** + * [Bit 27] Indicates that the processor supports extended state in IA32_MCG_STATUS and associated MSR necessary to + * configure Local Machine Check Exception (LMCE). + * + * @remarks 06_3EH + */ + uint64_t mcg_lmce_p : 1; +#define IA32_MCG_CAP_MCG_LMCE_P_BIT 27 +#define IA32_MCG_CAP_MCG_LMCE_P_FLAG 0x8000000 +#define IA32_MCG_CAP_MCG_LMCE_P_MASK 0x01 +#define IA32_MCG_CAP_MCG_LMCE_P(_) (((_) >> 27) & 0x01) + uint64_t reserved3 : 36; + }; + + uint64_t flags; +} ia32_mcg_cap_register; + + +/** + * Global Machine Check Status. + * + * @remarks 06_01H + */ +#define IA32_MCG_STATUS 0x0000017A +typedef union +{ + struct + { + /** + * [Bit 0] Restart IP valid. + * + * @remarks 06_01H + */ + uint64_t ripv : 1; +#define IA32_MCG_STATUS_RIPV_BIT 0 +#define IA32_MCG_STATUS_RIPV_FLAG 0x01 +#define IA32_MCG_STATUS_RIPV_MASK 0x01 +#define IA32_MCG_STATUS_RIPV(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Error IP valid. + * + * @remarks 06_01H + */ + uint64_t eipv : 1; +#define IA32_MCG_STATUS_EIPV_BIT 1 +#define IA32_MCG_STATUS_EIPV_FLAG 0x02 +#define IA32_MCG_STATUS_EIPV_MASK 0x01 +#define IA32_MCG_STATUS_EIPV(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Machine check in progress. + * + * @remarks 06_01H + */ + uint64_t mcip : 1; +#define IA32_MCG_STATUS_MCIP_BIT 2 +#define IA32_MCG_STATUS_MCIP_FLAG 0x04 +#define IA32_MCG_STATUS_MCIP_MASK 0x01 +#define IA32_MCG_STATUS_MCIP(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] If IA32_MCG_CAP.LMCE_P[27] = 1. + */ + uint64_t lmce_s : 1; +#define IA32_MCG_STATUS_LMCE_S_BIT 3 +#define IA32_MCG_STATUS_LMCE_S_FLAG 0x08 +#define IA32_MCG_STATUS_LMCE_S_MASK 0x01 +#define IA32_MCG_STATUS_LMCE_S(_) (((_) >> 3) & 0x01) + uint64_t reserved1 : 60; + }; + + uint64_t flags; +} ia32_mcg_status_register; + + +/** + * Global Machine Check Control. + * + * @remarks If IA32_MCG_CAP.CTL_P[8] = 1 + */ +#define IA32_MCG_CTL 0x0000017B + /** + * @defgroup ia32_perfevtsel \ + * IA32_PERFEVTSEL(n) + * + * Performance Event Select Register n. + * + * @remarks If CPUID.0AH: EAX[15:8] > n + * @{ + */ +#define IA32_PERFEVTSEL0 0x00000186 +#define IA32_PERFEVTSEL1 0x00000187 +#define IA32_PERFEVTSEL2 0x00000188 +#define IA32_PERFEVTSEL3 0x00000189 +typedef union +{ + struct + { + /** + * [Bits 7:0] Selects a performance event logic unit. + */ + uint64_t event_select : 8; +#define IA32_PERFEVTSEL_EVENT_SELECT_BIT 0 +#define IA32_PERFEVTSEL_EVENT_SELECT_FLAG 0xFF +#define IA32_PERFEVTSEL_EVENT_SELECT_MASK 0xFF +#define IA32_PERFEVTSEL_EVENT_SELECT(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 15:8] Qualifies the microarchitectural condition to detect on the selected event logic. + */ + uint64_t u_mask : 8; +#define IA32_PERFEVTSEL_U_MASK_BIT 8 +#define IA32_PERFEVTSEL_U_MASK_FLAG 0xFF00 +#define IA32_PERFEVTSEL_U_MASK_MASK 0xFF +#define IA32_PERFEVTSEL_U_MASK(_) (((_) >> 8) & 0xFF) + + /** + * [Bit 16] Counts while in privilege level is not ring 0. + */ + uint64_t usr : 1; +#define IA32_PERFEVTSEL_USR_BIT 16 +#define IA32_PERFEVTSEL_USR_FLAG 0x10000 +#define IA32_PERFEVTSEL_USR_MASK 0x01 +#define IA32_PERFEVTSEL_USR(_) (((_) >> 16) & 0x01) + + /** + * [Bit 17] Counts while in privilege level is ring 0. + */ + uint64_t os : 1; +#define IA32_PERFEVTSEL_OS_BIT 17 +#define IA32_PERFEVTSEL_OS_FLAG 0x20000 +#define IA32_PERFEVTSEL_OS_MASK 0x01 +#define IA32_PERFEVTSEL_OS(_) (((_) >> 17) & 0x01) + + /** + * [Bit 18] Enables edge detection if set. + */ + uint64_t edge : 1; +#define IA32_PERFEVTSEL_EDGE_BIT 18 +#define IA32_PERFEVTSEL_EDGE_FLAG 0x40000 +#define IA32_PERFEVTSEL_EDGE_MASK 0x01 +#define IA32_PERFEVTSEL_EDGE(_) (((_) >> 18) & 0x01) + + /** + * [Bit 19] Enables pin control. + */ + uint64_t pc : 1; +#define IA32_PERFEVTSEL_PC_BIT 19 +#define IA32_PERFEVTSEL_PC_FLAG 0x80000 +#define IA32_PERFEVTSEL_PC_MASK 0x01 +#define IA32_PERFEVTSEL_PC(_) (((_) >> 19) & 0x01) + + /** + * [Bit 20] Enables interrupt on counter overflow. + */ + uint64_t intr : 1; +#define IA32_PERFEVTSEL_INTR_BIT 20 +#define IA32_PERFEVTSEL_INTR_FLAG 0x100000 +#define IA32_PERFEVTSEL_INTR_MASK 0x01 +#define IA32_PERFEVTSEL_INTR(_) (((_) >> 20) & 0x01) + + /** + * [Bit 21] When set to 1, it enables counting the associated event conditions occurring across all logical processors + * sharing a processor core. When set to 0, the counter only increments the associated event conditions occurring in the + * logical processor which programmed the MSR. + */ + uint64_t any_thread : 1; +#define IA32_PERFEVTSEL_ANY_THREAD_BIT 21 +#define IA32_PERFEVTSEL_ANY_THREAD_FLAG 0x200000 +#define IA32_PERFEVTSEL_ANY_THREAD_MASK 0x01 +#define IA32_PERFEVTSEL_ANY_THREAD(_) (((_) >> 21) & 0x01) + + /** + * [Bit 22] Enables the corresponding performance counter to commence counting when this bit is set. + */ + uint64_t en : 1; +#define IA32_PERFEVTSEL_EN_BIT 22 +#define IA32_PERFEVTSEL_EN_FLAG 0x400000 +#define IA32_PERFEVTSEL_EN_MASK 0x01 +#define IA32_PERFEVTSEL_EN(_) (((_) >> 22) & 0x01) + + /** + * [Bit 23] Invert the CMASK. + */ + uint64_t inv : 1; +#define IA32_PERFEVTSEL_INV_BIT 23 +#define IA32_PERFEVTSEL_INV_FLAG 0x800000 +#define IA32_PERFEVTSEL_INV_MASK 0x01 +#define IA32_PERFEVTSEL_INV(_) (((_) >> 23) & 0x01) + + /** + * [Bits 31:24] When CMASK is not zero, the corresponding performance counter increments each cycle if the event count is + * greater than or equal to the CMASK. + */ + uint64_t cmask : 8; +#define IA32_PERFEVTSEL_CMASK_BIT 24 +#define IA32_PERFEVTSEL_CMASK_FLAG 0xFF000000 +#define IA32_PERFEVTSEL_CMASK_MASK 0xFF +#define IA32_PERFEVTSEL_CMASK(_) (((_) >> 24) & 0xFF) + uint64_t reserved1 : 32; + }; + + uint64_t flags; +} ia32_perfevtsel_register; + +/** + * @} + */ + + + /** + * Current Performance Status. + * + * @remarks 0F_03H + * @see Vol3B[14.1.1(Software Interface For Initiating Performance State Transitions)] + */ +#define IA32_PERF_STATUS 0x00000198 +typedef union +{ + struct + { + /** + * [Bits 15:0] Current performance State Value. + */ + uint64_t state_value : 16; +#define IA32_PERF_STATUS_STATE_VALUE_BIT 0 +#define IA32_PERF_STATUS_STATE_VALUE_FLAG 0xFFFF +#define IA32_PERF_STATUS_STATE_VALUE_MASK 0xFFFF +#define IA32_PERF_STATUS_STATE_VALUE(_) (((_) >> 0) & 0xFFFF) + uint64_t reserved1 : 48; + }; + + uint64_t flags; +} ia32_perf_status_register; + + +/** + * @brief Performance Control (R/W) + * + * Performance Control. Software makes a request for a new Performance state (P-State) by writing this MSR. + * + * @remarks 0F_03H + * @see Vol3B[14.1.1(Software Interface For Initiating Performance State Transitions)] + */ +#define IA32_PERF_CTL 0x00000199 +typedef union +{ + struct + { + /** + * [Bits 15:0] Target performance State Value. + */ + uint64_t target_state_value : 16; +#define IA32_PERF_CTL_TARGET_STATE_VALUE_BIT 0 +#define IA32_PERF_CTL_TARGET_STATE_VALUE_FLAG 0xFFFF +#define IA32_PERF_CTL_TARGET_STATE_VALUE_MASK 0xFFFF +#define IA32_PERF_CTL_TARGET_STATE_VALUE(_) (((_) >> 0) & 0xFFFF) + uint64_t reserved1 : 16; + + /** + * [Bit 32] IDA Engage. + * + * @remarks 06_0FH (Mobile only) + */ + uint64_t ida_engage : 1; +#define IA32_PERF_CTL_IDA_ENGAGE_BIT 32 +#define IA32_PERF_CTL_IDA_ENGAGE_FLAG 0x100000000 +#define IA32_PERF_CTL_IDA_ENGAGE_MASK 0x01 +#define IA32_PERF_CTL_IDA_ENGAGE(_) (((_) >> 32) & 0x01) + uint64_t reserved2 : 31; + }; + + uint64_t flags; +} ia32_perf_ctl_register; + + +/** + * Clock Modulation Control. + * + * @remarks If CPUID.01H:EDX[22] = 1 + * @see Vol3B[14.7.3(Software Controlled Clock Modulation)] + */ +#define IA32_CLOCK_MODULATION 0x0000019A +typedef union +{ + struct + { + /** + * [Bit 0] Extended On-Demand Clock Modulation Duty Cycle. + * + * @remarks If CPUID.06H:EAX[5] = 1 + */ + uint64_t extended_on_demand_clock_modulation_duty_cycle : 1; +#define IA32_CLOCK_MODULATION_EXTENDED_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE_BIT 0 +#define IA32_CLOCK_MODULATION_EXTENDED_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE_FLAG 0x01 +#define IA32_CLOCK_MODULATION_EXTENDED_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE_MASK 0x01 +#define IA32_CLOCK_MODULATION_EXTENDED_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE(_) (((_) >> 0) & 0x01) + + /** + * @brief On-Demand Clock Modulation Duty Cycle + * + * [Bits 3:1] On-Demand Clock Modulation Duty Cycle: Specific encoded values for target duty cycle modulation. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t on_demand_clock_modulation_duty_cycle : 3; +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE_BIT 1 +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE_FLAG 0x0E +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE_MASK 0x07 +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_DUTY_CYCLE(_) (((_) >> 1) & 0x07) + + /** + * @brief On-Demand Clock Modulation Enable + * + * [Bit 4] On-Demand Clock Modulation Enable: Set 1 to enable modulation. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t on_demand_clock_modulation_enable : 1; +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_ENABLE_BIT 4 +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_ENABLE_FLAG 0x10 +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_ENABLE_MASK 0x01 +#define IA32_CLOCK_MODULATION_ON_DEMAND_CLOCK_MODULATION_ENABLE(_) (((_) >> 4) & 0x01) + uint64_t reserved1 : 59; + }; + + uint64_t flags; +} ia32_clock_modulation_register; + + +/** + * @brief Thermal Interrupt Control (R/W) + * + * Thermal Interrupt Control. Enables and disables the generation of an interrupt on temperature transitions detected with + * the processor's thermal sensors and thermal monitor. + * + * @remarks If CPUID.01H:EDX[22] = 1 + * @see Vol3B[14.7.2(Thermal Monitor)] + */ +#define IA32_THERM_INTERRUPT 0x0000019B +typedef union +{ + struct + { + /** + * [Bit 0] High-Temperature Interrupt Enable. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t high_temperature_interrupt_enable : 1; +#define IA32_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE_BIT 0 +#define IA32_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE_FLAG 0x01 +#define IA32_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Low-Temperature Interrupt Enable. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t low_temperature_interrupt_enable : 1; +#define IA32_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE_BIT 1 +#define IA32_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE_FLAG 0x02 +#define IA32_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] PROCHOT\# Interrupt Enable. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t prochot_interrupt_enable : 1; +#define IA32_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE_BIT 2 +#define IA32_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE_FLAG 0x04 +#define IA32_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] FORCEPR\# Interrupt Enable. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t forcepr_interrupt_enable : 1; +#define IA32_THERM_INTERRUPT_FORCEPR_INTERRUPT_ENABLE_BIT 3 +#define IA32_THERM_INTERRUPT_FORCEPR_INTERRUPT_ENABLE_FLAG 0x08 +#define IA32_THERM_INTERRUPT_FORCEPR_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_FORCEPR_INTERRUPT_ENABLE(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Critical Temperature Interrupt Enable. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t critical_temperature_interrupt_enable : 1; +#define IA32_THERM_INTERRUPT_CRITICAL_TEMPERATURE_INTERRUPT_ENABLE_BIT 4 +#define IA32_THERM_INTERRUPT_CRITICAL_TEMPERATURE_INTERRUPT_ENABLE_FLAG 0x10 +#define IA32_THERM_INTERRUPT_CRITICAL_TEMPERATURE_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_CRITICAL_TEMPERATURE_INTERRUPT_ENABLE(_) (((_) >> 4) & 0x01) + uint64_t reserved1 : 3; + + /** + * [Bits 14:8] Threshold \#1 Value + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t threshold1_value : 7; +#define IA32_THERM_INTERRUPT_THRESHOLD1_VALUE_BIT 8 +#define IA32_THERM_INTERRUPT_THRESHOLD1_VALUE_FLAG 0x7F00 +#define IA32_THERM_INTERRUPT_THRESHOLD1_VALUE_MASK 0x7F +#define IA32_THERM_INTERRUPT_THRESHOLD1_VALUE(_) (((_) >> 8) & 0x7F) + + /** + * [Bit 15] Threshold \#1 Interrupt Enable. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t threshold1_interrupt_enable : 1; +#define IA32_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE_BIT 15 +#define IA32_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE_FLAG 0x8000 +#define IA32_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE(_) (((_) >> 15) & 0x01) + + /** + * [Bits 22:16] Threshold \#2 Value. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t threshold2_value : 7; +#define IA32_THERM_INTERRUPT_THRESHOLD2_VALUE_BIT 16 +#define IA32_THERM_INTERRUPT_THRESHOLD2_VALUE_FLAG 0x7F0000 +#define IA32_THERM_INTERRUPT_THRESHOLD2_VALUE_MASK 0x7F +#define IA32_THERM_INTERRUPT_THRESHOLD2_VALUE(_) (((_) >> 16) & 0x7F) + + /** + * [Bit 23] Threshold \#2 Interrupt Enable. + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t threshold2_interrupt_enable : 1; +#define IA32_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE_BIT 23 +#define IA32_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE_FLAG 0x800000 +#define IA32_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE(_) (((_) >> 23) & 0x01) + + /** + * [Bit 24] Power Limit Notification Enable. + * + * @remarks If CPUID.06H:EAX[4] = 1 + */ + uint64_t power_limit_notification_enable : 1; +#define IA32_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE_BIT 24 +#define IA32_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE_FLAG 0x1000000 +#define IA32_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE_MASK 0x01 +#define IA32_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE(_) (((_) >> 24) & 0x01) + uint64_t reserved2 : 39; + }; + + uint64_t flags; +} ia32_therm_interrupt_register; + + +/** + * @brief Thermal Status Information (RO) + * + * Thermal Status Information. Contains status information about the processor's thermal sensor and automatic thermal + * monitoring facilities. + * + * @remarks If CPUID.01H:EDX[22] = 1 + * @see Vol3B[14.7.2(Thermal Monitor)] + */ +#define IA32_THERM_STATUS 0x0000019C +typedef union +{ + struct + { + /** + * [Bit 0] Thermal Status + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t thermal_status : 1; +#define IA32_THERM_STATUS_THERMAL_STATUS_BIT 0 +#define IA32_THERM_STATUS_THERMAL_STATUS_FLAG 0x01 +#define IA32_THERM_STATUS_THERMAL_STATUS_MASK 0x01 +#define IA32_THERM_STATUS_THERMAL_STATUS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Thermal Status Log + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t thermal_status_log : 1; +#define IA32_THERM_STATUS_THERMAL_STATUS_LOG_BIT 1 +#define IA32_THERM_STATUS_THERMAL_STATUS_LOG_FLAG 0x02 +#define IA32_THERM_STATUS_THERMAL_STATUS_LOG_MASK 0x01 +#define IA32_THERM_STATUS_THERMAL_STATUS_LOG(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] PROCHOT \# or FORCEPR\# event + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t prochot_forcepr_event : 1; +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_EVENT_BIT 2 +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_EVENT_FLAG 0x04 +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_EVENT_MASK 0x01 +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_EVENT(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] PROCHOT \# or FORCEPR\# log + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t prochot_forcepr_log : 1; +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_LOG_BIT 3 +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_LOG_FLAG 0x08 +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_LOG_MASK 0x01 +#define IA32_THERM_STATUS_PROCHOT_FORCEPR_LOG(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Critical Temperature Status + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t critical_temperature_status : 1; +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_BIT 4 +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_FLAG 0x10 +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_MASK 0x01 +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Critical Temperature Status log + * + * @remarks If CPUID.01H:EDX[22] = 1 + */ + uint64_t critical_temperature_status_log : 1; +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG_BIT 5 +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG_FLAG 0x20 +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG_MASK 0x01 +#define IA32_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Thermal Threshold \#1 Status + * + * @remarks If CPUID.01H:ECX[8] = 1 + */ + uint64_t thermal_threshold1_status : 1; +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_STATUS_BIT 6 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_STATUS_FLAG 0x40 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_STATUS_MASK 0x01 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_STATUS(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Thermal Threshold \#1 log + * + * @remarks If CPUID.01H:ECX[8] = 1 + */ + uint64_t thermal_threshold1_log : 1; +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_LOG_BIT 7 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_LOG_FLAG 0x80 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_LOG_MASK 0x01 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD1_LOG(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] Thermal Threshold \#2 Status + * + * @remarks If CPUID.01H:ECX[8] = 1 + */ + uint64_t thermal_threshold2_status : 1; +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_STATUS_BIT 8 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_STATUS_FLAG 0x100 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_STATUS_MASK 0x01 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_STATUS(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] Thermal Threshold \#2 log + * + * @remarks If CPUID.01H:ECX[8] = 1 + */ + uint64_t thermal_threshold2_log : 1; +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_LOG_BIT 9 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_LOG_FLAG 0x200 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_LOG_MASK 0x01 +#define IA32_THERM_STATUS_THERMAL_THRESHOLD2_LOG(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] Power Limitation Status + * + * @remarks If CPUID.06H:EAX[4] = 1 + */ + uint64_t power_limitation_status : 1; +#define IA32_THERM_STATUS_POWER_LIMITATION_STATUS_BIT 10 +#define IA32_THERM_STATUS_POWER_LIMITATION_STATUS_FLAG 0x400 +#define IA32_THERM_STATUS_POWER_LIMITATION_STATUS_MASK 0x01 +#define IA32_THERM_STATUS_POWER_LIMITATION_STATUS(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] Power Limitation log + * + * @remarks If CPUID.06H:EAX[4] = 1 + */ + uint64_t power_limitation_log : 1; +#define IA32_THERM_STATUS_POWER_LIMITATION_LOG_BIT 11 +#define IA32_THERM_STATUS_POWER_LIMITATION_LOG_FLAG 0x800 +#define IA32_THERM_STATUS_POWER_LIMITATION_LOG_MASK 0x01 +#define IA32_THERM_STATUS_POWER_LIMITATION_LOG(_) (((_) >> 11) & 0x01) + + /** + * [Bit 12] Current Limit Status + * + * @remarks If CPUID.06H:EAX[7] = 1 + */ + uint64_t current_limit_status : 1; +#define IA32_THERM_STATUS_CURRENT_LIMIT_STATUS_BIT 12 +#define IA32_THERM_STATUS_CURRENT_LIMIT_STATUS_FLAG 0x1000 +#define IA32_THERM_STATUS_CURRENT_LIMIT_STATUS_MASK 0x01 +#define IA32_THERM_STATUS_CURRENT_LIMIT_STATUS(_) (((_) >> 12) & 0x01) + + /** + * [Bit 13] Current Limit log + * + * @remarks If CPUID.06H:EAX[7] = 1 + */ + uint64_t current_limit_log : 1; +#define IA32_THERM_STATUS_CURRENT_LIMIT_LOG_BIT 13 +#define IA32_THERM_STATUS_CURRENT_LIMIT_LOG_FLAG 0x2000 +#define IA32_THERM_STATUS_CURRENT_LIMIT_LOG_MASK 0x01 +#define IA32_THERM_STATUS_CURRENT_LIMIT_LOG(_) (((_) >> 13) & 0x01) + + /** + * [Bit 14] Cross Domain Limit Status + * + * @remarks If CPUID.06H:EAX[7] = 1 + */ + uint64_t cross_domain_limit_status : 1; +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_STATUS_BIT 14 +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_STATUS_FLAG 0x4000 +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_STATUS_MASK 0x01 +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_STATUS(_) (((_) >> 14) & 0x01) + + /** + * [Bit 15] Cross Domain Limit log + * + * @remarks If CPUID.06H:EAX[7] = 1 + */ + uint64_t cross_domain_limit_log : 1; +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_LOG_BIT 15 +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_LOG_FLAG 0x8000 +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_LOG_MASK 0x01 +#define IA32_THERM_STATUS_CROSS_DOMAIN_LIMIT_LOG(_) (((_) >> 15) & 0x01) + + /** + * [Bits 22:16] Digital Readout + * + * @remarks If CPUID.06H:EAX[0] = 1 + */ + uint64_t digital_readout : 7; +#define IA32_THERM_STATUS_DIGITAL_READOUT_BIT 16 +#define IA32_THERM_STATUS_DIGITAL_READOUT_FLAG 0x7F0000 +#define IA32_THERM_STATUS_DIGITAL_READOUT_MASK 0x7F +#define IA32_THERM_STATUS_DIGITAL_READOUT(_) (((_) >> 16) & 0x7F) + uint64_t reserved1 : 4; + + /** + * [Bits 30:27] Resolution in Degrees Celsius + * + * @remarks If CPUID.06H:EAX[0] = 1 + */ + uint64_t resolution_in_degrees_celsius : 4; +#define IA32_THERM_STATUS_RESOLUTION_IN_DEGREES_CELSIUS_BIT 27 +#define IA32_THERM_STATUS_RESOLUTION_IN_DEGREES_CELSIUS_FLAG 0x78000000 +#define IA32_THERM_STATUS_RESOLUTION_IN_DEGREES_CELSIUS_MASK 0x0F +#define IA32_THERM_STATUS_RESOLUTION_IN_DEGREES_CELSIUS(_) (((_) >> 27) & 0x0F) + + /** + * [Bit 31] Reading Valid + * + * @remarks If CPUID.06H:EAX[0] = 1 + */ + uint64_t reading_valid : 1; +#define IA32_THERM_STATUS_READING_VALID_BIT 31 +#define IA32_THERM_STATUS_READING_VALID_FLAG 0x80000000 +#define IA32_THERM_STATUS_READING_VALID_MASK 0x01 +#define IA32_THERM_STATUS_READING_VALID(_) (((_) >> 31) & 0x01) + uint64_t reserved2 : 32; + }; + + uint64_t flags; +} ia32_therm_status_register; + + +/** + * @brief Enable Misc. Processor Features (R/W) + * + * Allows a variety of processor functions to be enabled and disabled. + */ +#define IA32_MISC_ENABLE 0x000001A0 +typedef union +{ + struct + { + /** + * @brief Fast-Strings Enable + * + * [Bit 0] When set, the fast-strings feature (for REP MOVS and REP STORS) is enabled (default). When clear, fast-strings + * are disabled. + * + * @remarks 0F_0H + */ + uint64_t fast_strings_enable : 1; +#define IA32_MISC_ENABLE_FAST_STRINGS_ENABLE_BIT 0 +#define IA32_MISC_ENABLE_FAST_STRINGS_ENABLE_FLAG 0x01 +#define IA32_MISC_ENABLE_FAST_STRINGS_ENABLE_MASK 0x01 +#define IA32_MISC_ENABLE_FAST_STRINGS_ENABLE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 2; + + /** + * @brief Automatic Thermal Control Circuit Enable (R/W) + * + * [Bit 3] - 1 = Setting this bit enables the thermal control circuit (TCC) portion of the Intel Thermal Monitor feature. + * This allows the processor to automatically reduce power consumption in response to TCC activation. + * - 0 = Disabled. + * + * @note In some products clearing this bit might be ignored in critical thermal conditions, and TM1, TM2 and adaptive + * thermal throttling will still be activated. The default value of this field varies with product. + * @remarks 0F_0H + */ + uint64_t automatic_thermal_control_circuit_enable : 1; +#define IA32_MISC_ENABLE_AUTOMATIC_THERMAL_CONTROL_CIRCUIT_ENABLE_BIT 3 +#define IA32_MISC_ENABLE_AUTOMATIC_THERMAL_CONTROL_CIRCUIT_ENABLE_FLAG 0x08 +#define IA32_MISC_ENABLE_AUTOMATIC_THERMAL_CONTROL_CIRCUIT_ENABLE_MASK 0x01 +#define IA32_MISC_ENABLE_AUTOMATIC_THERMAL_CONTROL_CIRCUIT_ENABLE(_) (((_) >> 3) & 0x01) + uint64_t reserved2 : 3; + + /** + * @brief Performance Monitoring Available (R) + * + * [Bit 7] - 1 = Performance monitoring enabled. + * - 0 = Performance monitoring disabled. + * + * @remarks 0F_0H + */ + uint64_t performance_monitoring_available : 1; +#define IA32_MISC_ENABLE_PERFORMANCE_MONITORING_AVAILABLE_BIT 7 +#define IA32_MISC_ENABLE_PERFORMANCE_MONITORING_AVAILABLE_FLAG 0x80 +#define IA32_MISC_ENABLE_PERFORMANCE_MONITORING_AVAILABLE_MASK 0x01 +#define IA32_MISC_ENABLE_PERFORMANCE_MONITORING_AVAILABLE(_) (((_) >> 7) & 0x01) + uint64_t reserved3 : 3; + + /** + * @brief Branch Trace Storage Unavailable (RO) + * + * [Bit 11] - 1 = Processor doesn't support branch trace storage (BTS). + * - 0 = BTS is supported. + * + * @remarks 0F_0H + */ + uint64_t branch_trace_storage_unavailable : 1; +#define IA32_MISC_ENABLE_BRANCH_TRACE_STORAGE_UNAVAILABLE_BIT 11 +#define IA32_MISC_ENABLE_BRANCH_TRACE_STORAGE_UNAVAILABLE_FLAG 0x800 +#define IA32_MISC_ENABLE_BRANCH_TRACE_STORAGE_UNAVAILABLE_MASK 0x01 +#define IA32_MISC_ENABLE_BRANCH_TRACE_STORAGE_UNAVAILABLE(_) (((_) >> 11) & 0x01) + + /** + * @brief Processor Event Based Sampling (PEBS) Unavailable (RO) + * + * [Bit 12] - 1 = PEBS is not supported. + * - 0 = PEBS is supported. + * + * @remarks 06_0FH + */ + uint64_t processor_event_based_sampling_unavailable : 1; +#define IA32_MISC_ENABLE_PROCESSOR_EVENT_BASED_SAMPLING_UNAVAILABLE_BIT 12 +#define IA32_MISC_ENABLE_PROCESSOR_EVENT_BASED_SAMPLING_UNAVAILABLE_FLAG 0x1000 +#define IA32_MISC_ENABLE_PROCESSOR_EVENT_BASED_SAMPLING_UNAVAILABLE_MASK 0x01 +#define IA32_MISC_ENABLE_PROCESSOR_EVENT_BASED_SAMPLING_UNAVAILABLE(_) (((_) >> 12) & 0x01) + uint64_t reserved4 : 3; + + /** + * @brief Enhanced Intel SpeedStep Technology Enable (R/W) + * + * [Bit 16] - 0 = Enhanced Intel SpeedStep Technology disabled. + * - 1 = Enhanced Intel SpeedStep Technology enabled. + * + * @remarks If CPUID.01H: ECX[7] = 1 + */ + uint64_t enhanced_intel_speedstep_technology_enable : 1; +#define IA32_MISC_ENABLE_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY_ENABLE_BIT 16 +#define IA32_MISC_ENABLE_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY_ENABLE_FLAG 0x10000 +#define IA32_MISC_ENABLE_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY_ENABLE_MASK 0x01 +#define IA32_MISC_ENABLE_ENHANCED_INTEL_SPEEDSTEP_TECHNOLOGY_ENABLE(_) (((_) >> 16) & 0x01) + uint64_t reserved5 : 1; + + /** + * @brief ENABLE MONITOR FSM (R/W) + * + * [Bit 18] When this bit is set to 0, the MONITOR feature flag is not set (CPUID.01H:ECX[bit3] = 0). This indicates that + * MONITOR/MWAIT are not supported. Software attempts to execute MONITOR/MWAIT will cause \#UD when this bit is 0. + * When this bit is set to 1 (default), MONITOR/MWAIT are supported (CPUID.01H:ECX[bit 3] = 1). If the SSE3 feature flag + * ECX[0] is not set (CPUID.01H:ECX[bit 0] = 0), the OS must not attempt to alter this bit. BIOS must leave it in the + * default state. Writing this bit when the SSE3 feature flag is set to 0 may generate a \#GP exception. + * + * @remarks 0F_03H + */ + uint64_t enable_monitor_fsm : 1; +#define IA32_MISC_ENABLE_ENABLE_MONITOR_FSM_BIT 18 +#define IA32_MISC_ENABLE_ENABLE_MONITOR_FSM_FLAG 0x40000 +#define IA32_MISC_ENABLE_ENABLE_MONITOR_FSM_MASK 0x01 +#define IA32_MISC_ENABLE_ENABLE_MONITOR_FSM(_) (((_) >> 18) & 0x01) + uint64_t reserved6 : 3; + + /** + * @brief Limit CPUID Maxval (R/W) + * + * [Bit 22] When this bit is set to 1, CPUID.00H returns a maximum value in EAX[7:0] of 2. BIOS should contain a setup + * question that allows users to specify when the installed OS does not support CPUID functions greater than 2. + * Before setting this bit, BIOS must execute the CPUID.0H and examine the maximum value returned in EAX[7:0]. If the + * maximum value is greater than 2, this bit is supported. + * Otherwise, this bit is not supported. Setting this bit when the maximum value is not greater than 2 may generate a \#GP + * exception. Setting this bit may cause unexpected behavior in software that depends on the availability of CPUID leaves + * greater than 2. + * + * @remarks 0F_03H + */ + uint64_t limit_cpuid_maxval : 1; +#define IA32_MISC_ENABLE_LIMIT_CPUID_MAXVAL_BIT 22 +#define IA32_MISC_ENABLE_LIMIT_CPUID_MAXVAL_FLAG 0x400000 +#define IA32_MISC_ENABLE_LIMIT_CPUID_MAXVAL_MASK 0x01 +#define IA32_MISC_ENABLE_LIMIT_CPUID_MAXVAL(_) (((_) >> 22) & 0x01) + + /** + * @brief xTPR Message Disable (R/W) + * + * [Bit 23] When set to 1, xTPR messages are disabled. xTPR messages are optional messages that allow the processor to + * inform the chipset of its priority. + * + * @remarks If CPUID.01H:ECX[14] = 1 + */ + uint64_t xtpr_message_disable : 1; +#define IA32_MISC_ENABLE_XTPR_MESSAGE_DISABLE_BIT 23 +#define IA32_MISC_ENABLE_XTPR_MESSAGE_DISABLE_FLAG 0x800000 +#define IA32_MISC_ENABLE_XTPR_MESSAGE_DISABLE_MASK 0x01 +#define IA32_MISC_ENABLE_XTPR_MESSAGE_DISABLE(_) (((_) >> 23) & 0x01) + uint64_t reserved7 : 10; + + /** + * @brief XD Bit Disable (R/W) + * + * [Bit 34] When set to 1, the Execute Disable Bit feature (XD Bit) is disabled and the XD Bit extended feature flag will + * be clear (CPUID.80000001H: EDX[20]=0). + * When set to a 0 (default), the Execute Disable Bit feature (if available) allows the OS to enable PAE paging and take + * advantage of data only pages. + * BIOS must not alter the contents of this bit location, if XD bit is not supported. Writing this bit to 1 when the XD Bit + * extended feature flag is set to 0 may generate a \#GP exception. + * + * @remarks If CPUID.80000001H:EDX[20] = 1 + */ + uint64_t xd_bit_disable : 1; +#define IA32_MISC_ENABLE_XD_BIT_DISABLE_BIT 34 +#define IA32_MISC_ENABLE_XD_BIT_DISABLE_FLAG 0x400000000 +#define IA32_MISC_ENABLE_XD_BIT_DISABLE_MASK 0x01 +#define IA32_MISC_ENABLE_XD_BIT_DISABLE(_) (((_) >> 34) & 0x01) + uint64_t reserved8 : 29; + }; + + uint64_t flags; +} ia32_misc_enable_register; + + +/** + * Performance Energy Bias Hint. + * + * @remarks If CPUID.6H:ECX[3] = 1 + */ +#define IA32_ENERGY_PERF_BIAS 0x000001B0 +typedef union +{ + struct + { + /** + * @brief Power Policy Preference + * + * [Bits 3:0] - 0 indicates preference to highest performance. + * - 15 indicates preference to maximize energy saving. + */ + uint64_t power_policy_preference : 4; +#define IA32_ENERGY_PERF_BIAS_POWER_POLICY_PREFERENCE_BIT 0 +#define IA32_ENERGY_PERF_BIAS_POWER_POLICY_PREFERENCE_FLAG 0x0F +#define IA32_ENERGY_PERF_BIAS_POWER_POLICY_PREFERENCE_MASK 0x0F +#define IA32_ENERGY_PERF_BIAS_POWER_POLICY_PREFERENCE(_) (((_) >> 0) & 0x0F) + uint64_t reserved1 : 60; + }; + + uint64_t flags; +} ia32_energy_perf_bias_register; + + +/** + * @brief Package Thermal Status Information (RO) + * + * Package Thermal Status Information. Contains status information about the package's thermal sensor. + * + * @remarks If CPUID.06H: EAX[6] = 1 + * @see Vol3B[14.8(PACKAGE LEVEL THERMAL MANAGEMENT)] + */ +#define IA32_PACKAGE_THERM_STATUS 0x000001B1 +typedef union +{ + struct + { + /** + * [Bit 0] Pkg Thermal Status + */ + uint64_t thermal_status : 1; +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS_BIT 0 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS_FLAG 0x01 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Pkg Thermal Status Log + */ + uint64_t thermal_status_log : 1; +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS_LOG_BIT 1 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS_LOG_FLAG 0x02 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS_LOG_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_STATUS_LOG(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Pkg PROCHOT \# event + */ + uint64_t prochot_event : 1; +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_EVENT_BIT 2 +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_EVENT_FLAG 0x04 +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_EVENT_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_EVENT(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Pkg PROCHOT \# log + */ + uint64_t prochot_log : 1; +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_LOG_BIT 3 +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_LOG_FLAG 0x08 +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_LOG_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_PROCHOT_LOG(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Pkg Critical Temperature Status + */ + uint64_t critical_temperature_status : 1; +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_BIT 4 +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_FLAG 0x10 +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Pkg Critical Temperature Status Log + */ + uint64_t critical_temperature_status_log : 1; +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG_BIT 5 +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG_FLAG 0x20 +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_CRITICAL_TEMPERATURE_STATUS_LOG(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Pkg Thermal Threshold \#1 Status + */ + uint64_t thermal_threshold1_status : 1; +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_STATUS_BIT 6 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_STATUS_FLAG 0x40 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_STATUS_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_STATUS(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Pkg Thermal Threshold \#1 log + */ + uint64_t thermal_threshold1_log : 1; +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_LOG_BIT 7 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_LOG_FLAG 0x80 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_LOG_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD1_LOG(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] Pkg Thermal Threshold \#2 Status + */ + uint64_t thermal_threshold2_status : 1; +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_STATUS_BIT 8 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_STATUS_FLAG 0x100 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_STATUS_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_STATUS(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] Pkg Thermal Threshold \#2 log + */ + uint64_t thermal_threshold2_log : 1; +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_LOG_BIT 9 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_LOG_FLAG 0x200 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_LOG_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_THERMAL_THRESHOLD2_LOG(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] Pkg Power Limitation Status + */ + uint64_t power_limitation_status : 1; +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_STATUS_BIT 10 +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_STATUS_FLAG 0x400 +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_STATUS_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_STATUS(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] Pkg Power Limitation log + */ + uint64_t power_limitation_log : 1; +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_LOG_BIT 11 +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_LOG_FLAG 0x800 +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_LOG_MASK 0x01 +#define IA32_PACKAGE_THERM_STATUS_POWER_LIMITATION_LOG(_) (((_) >> 11) & 0x01) + uint64_t reserved1 : 4; + + /** + * [Bits 22:16] Pkg Digital Readout + */ + uint64_t digital_readout : 7; +#define IA32_PACKAGE_THERM_STATUS_DIGITAL_READOUT_BIT 16 +#define IA32_PACKAGE_THERM_STATUS_DIGITAL_READOUT_FLAG 0x7F0000 +#define IA32_PACKAGE_THERM_STATUS_DIGITAL_READOUT_MASK 0x7F +#define IA32_PACKAGE_THERM_STATUS_DIGITAL_READOUT(_) (((_) >> 16) & 0x7F) + uint64_t reserved2 : 41; + }; + + uint64_t flags; +} ia32_package_therm_status_register; + + +/** + * @brief Package Thermal Interrupt Control (RO) + * + * Enables and disables the generation of an interrupt on temperature transitions detected with the package's thermal + * sensor. + * + * @remarks If CPUID.06H: EAX[6] = 1 + * @see Vol3B[14.8(PACKAGE LEVEL THERMAL MANAGEMENT)] + */ +#define IA32_PACKAGE_THERM_INTERRUPT 0x000001B2 +typedef union +{ + struct + { + /** + * [Bit 0] Pkg High-Temperature Interrupt Enable. + */ + uint64_t high_temperature_interrupt_enable : 1; +#define IA32_PACKAGE_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE_BIT 0 +#define IA32_PACKAGE_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE_FLAG 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_HIGH_TEMPERATURE_INTERRUPT_ENABLE(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Pkg Low-Temperature Interrupt Enable. + */ + uint64_t low_temperature_interrupt_enable : 1; +#define IA32_PACKAGE_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE_BIT 1 +#define IA32_PACKAGE_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE_FLAG 0x02 +#define IA32_PACKAGE_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_LOW_TEMPERATURE_INTERRUPT_ENABLE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Pkg PROCHOT\# Interrupt Enable. + */ + uint64_t prochot_interrupt_enable : 1; +#define IA32_PACKAGE_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE_BIT 2 +#define IA32_PACKAGE_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE_FLAG 0x04 +#define IA32_PACKAGE_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_PROCHOT_INTERRUPT_ENABLE(_) (((_) >> 2) & 0x01) + uint64_t reserved1 : 1; + + /** + * [Bit 4] Pkg Overheat Interrupt Enable. + */ + uint64_t overheat_interrupt_enable : 1; +#define IA32_PACKAGE_THERM_INTERRUPT_OVERHEAT_INTERRUPT_ENABLE_BIT 4 +#define IA32_PACKAGE_THERM_INTERRUPT_OVERHEAT_INTERRUPT_ENABLE_FLAG 0x10 +#define IA32_PACKAGE_THERM_INTERRUPT_OVERHEAT_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_OVERHEAT_INTERRUPT_ENABLE(_) (((_) >> 4) & 0x01) + uint64_t reserved2 : 3; + + /** + * [Bits 14:8] Pkg Threshold \#1 Value + */ + uint64_t threshold1_value : 7; +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_VALUE_BIT 8 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_VALUE_FLAG 0x7F00 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_VALUE_MASK 0x7F +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_VALUE(_) (((_) >> 8) & 0x7F) + + /** + * [Bit 15] Pkg Threshold \#1 Interrupt Enable. + */ + uint64_t threshold1_interrupt_enable : 1; +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE_BIT 15 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE_FLAG 0x8000 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD1_INTERRUPT_ENABLE(_) (((_) >> 15) & 0x01) + + /** + * [Bits 22:16] Pkg Threshold \#2 Value. + */ + uint64_t threshold2_value : 7; +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_VALUE_BIT 16 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_VALUE_FLAG 0x7F0000 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_VALUE_MASK 0x7F +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_VALUE(_) (((_) >> 16) & 0x7F) + + /** + * [Bit 23] Pkg Threshold \#2 Interrupt Enable. + */ + uint64_t threshold2_interrupt_enable : 1; +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE_BIT 23 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE_FLAG 0x800000 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE_MASK 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_THRESHOLD2_INTERRUPT_ENABLE(_) (((_) >> 23) & 0x01) + + /** + * [Bit 24] Pkg Power Limit Notification Enable. + */ + uint64_t power_limit_notification_enable : 1; +#define IA32_PACKAGE_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE_BIT 24 +#define IA32_PACKAGE_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE_FLAG 0x1000000 +#define IA32_PACKAGE_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE_MASK 0x01 +#define IA32_PACKAGE_THERM_INTERRUPT_POWER_LIMIT_NOTIFICATION_ENABLE(_) (((_) >> 24) & 0x01) + uint64_t reserved3 : 39; + }; + + uint64_t flags; +} ia32_package_therm_interrupt_register; + + +/** + * Trace/Profile Resource Control. + * + * @remarks 06_0EH + */ +#define IA32_DEBUGCTL 0x000001D9 +typedef union +{ + struct + { + /** + * [Bit 0] Setting this bit to 1 enables the processor to record a running trace of the most recent branches taken by the + * processor in the LBR stack. + * + * @remarks 06_01H + */ + uint64_t lbr : 1; +#define IA32_DEBUGCTL_LBR_BIT 0 +#define IA32_DEBUGCTL_LBR_FLAG 0x01 +#define IA32_DEBUGCTL_LBR_MASK 0x01 +#define IA32_DEBUGCTL_LBR(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Setting this bit to 1 enables the processor to treat EFLAGS.TF as single-step on branches instead of single-step + * on instructions. + * + * @remarks 06_01H + */ + uint64_t btf : 1; +#define IA32_DEBUGCTL_BTF_BIT 1 +#define IA32_DEBUGCTL_BTF_FLAG 0x02 +#define IA32_DEBUGCTL_BTF_MASK 0x01 +#define IA32_DEBUGCTL_BTF(_) (((_) >> 1) & 0x01) + uint64_t reserved1 : 4; + + /** + * [Bit 6] Setting this bit to 1 enables branch trace messages to be sent. + * + * @remarks 06_0EH + */ + uint64_t tr : 1; +#define IA32_DEBUGCTL_TR_BIT 6 +#define IA32_DEBUGCTL_TR_FLAG 0x40 +#define IA32_DEBUGCTL_TR_MASK 0x01 +#define IA32_DEBUGCTL_TR(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Setting this bit enables branch trace messages (BTMs) to be logged in a BTS buffer. + * + * @remarks 06_0EH + */ + uint64_t bts : 1; +#define IA32_DEBUGCTL_BTS_BIT 7 +#define IA32_DEBUGCTL_BTS_FLAG 0x80 +#define IA32_DEBUGCTL_BTS_MASK 0x01 +#define IA32_DEBUGCTL_BTS(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] When clear, BTMs are logged in a BTS buffer in circular fashion. When this bit is set, an interrupt is generated + * by the BTS facility when the BTS buffer is full. + * + * @remarks 06_0EH + */ + uint64_t btint : 1; +#define IA32_DEBUGCTL_BTINT_BIT 8 +#define IA32_DEBUGCTL_BTINT_FLAG 0x100 +#define IA32_DEBUGCTL_BTINT_MASK 0x01 +#define IA32_DEBUGCTL_BTINT(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] When set, BTS or BTM is skipped if CPL = 0. + * + * @remarks 06_0FH + */ + uint64_t bts_off_os : 1; +#define IA32_DEBUGCTL_BTS_OFF_OS_BIT 9 +#define IA32_DEBUGCTL_BTS_OFF_OS_FLAG 0x200 +#define IA32_DEBUGCTL_BTS_OFF_OS_MASK 0x01 +#define IA32_DEBUGCTL_BTS_OFF_OS(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] When set, BTS or BTM is skipped if CPL > 0. + * + * @remarks 06_0FH + */ + uint64_t bts_off_usr : 1; +#define IA32_DEBUGCTL_BTS_OFF_USR_BIT 10 +#define IA32_DEBUGCTL_BTS_OFF_USR_FLAG 0x400 +#define IA32_DEBUGCTL_BTS_OFF_USR_MASK 0x01 +#define IA32_DEBUGCTL_BTS_OFF_USR(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] When set, the LBR stack is frozen on a PMI request. + * + * @remarks If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1 + */ + uint64_t freeze_lbrs_on_pmi : 1; +#define IA32_DEBUGCTL_FREEZE_LBRS_ON_PMI_BIT 11 +#define IA32_DEBUGCTL_FREEZE_LBRS_ON_PMI_FLAG 0x800 +#define IA32_DEBUGCTL_FREEZE_LBRS_ON_PMI_MASK 0x01 +#define IA32_DEBUGCTL_FREEZE_LBRS_ON_PMI(_) (((_) >> 11) & 0x01) + + /** + * [Bit 12] When set, each ENABLE bit of the global counter control MSR are frozen (address 38FH) on a PMI request. + * + * @remarks If CPUID.01H: ECX[15] = 1 && CPUID.0AH: EAX[7:0] > 1 + */ + uint64_t freeze_perfmon_on_pmi : 1; +#define IA32_DEBUGCTL_FREEZE_PERFMON_ON_PMI_BIT 12 +#define IA32_DEBUGCTL_FREEZE_PERFMON_ON_PMI_FLAG 0x1000 +#define IA32_DEBUGCTL_FREEZE_PERFMON_ON_PMI_MASK 0x01 +#define IA32_DEBUGCTL_FREEZE_PERFMON_ON_PMI(_) (((_) >> 12) & 0x01) + + /** + * [Bit 13] When set, enables the logical processor to receive and generate PMI on behalf of the uncore. + * + * @remarks 06_1AH + */ + uint64_t enable_uncore_pmi : 1; +#define IA32_DEBUGCTL_ENABLE_UNCORE_PMI_BIT 13 +#define IA32_DEBUGCTL_ENABLE_UNCORE_PMI_FLAG 0x2000 +#define IA32_DEBUGCTL_ENABLE_UNCORE_PMI_MASK 0x01 +#define IA32_DEBUGCTL_ENABLE_UNCORE_PMI(_) (((_) >> 13) & 0x01) + + /** + * [Bit 14] When set, freezes perfmon and trace messages while in SMM. + * + * @remarks If IA32_PERF_CAPABILITIES[12] = 1 + */ + uint64_t freeze_while_smm : 1; +#define IA32_DEBUGCTL_FREEZE_WHILE_SMM_BIT 14 +#define IA32_DEBUGCTL_FREEZE_WHILE_SMM_FLAG 0x4000 +#define IA32_DEBUGCTL_FREEZE_WHILE_SMM_MASK 0x01 +#define IA32_DEBUGCTL_FREEZE_WHILE_SMM(_) (((_) >> 14) & 0x01) + + /** + * [Bit 15] When set, enables DR7 debug bit on XBEGIN. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[11] = 1) + */ + uint64_t rtm_debug : 1; +#define IA32_DEBUGCTL_RTM_DEBUG_BIT 15 +#define IA32_DEBUGCTL_RTM_DEBUG_FLAG 0x8000 +#define IA32_DEBUGCTL_RTM_DEBUG_MASK 0x01 +#define IA32_DEBUGCTL_RTM_DEBUG(_) (((_) >> 15) & 0x01) + uint64_t reserved2 : 48; + }; + + uint64_t flags; +} ia32_debugctl_register; + + +/** + * @brief SMRR Base Address (Writeable only in SMM) + * + * SMRR Base Address. Base address of SMM memory range. + * + * @remarks If IA32_MTRRCAP.SMRR[11] = 1 + */ +#define IA32_SMRR_PHYSBASE 0x000001F2 +typedef union +{ + struct + { + /** + * @brief Type + * + * [Bits 7:0] Type. Specifies memory type of the range. + */ + uint64_t exec_type : 8; +#define IA32_SMRR_PHYSBASE_TYPE_BIT 0 +#define IA32_SMRR_PHYSBASE_TYPE_FLAG 0xFF +#define IA32_SMRR_PHYSBASE_TYPE_MASK 0xFF +#define IA32_SMRR_PHYSBASE_TYPE(_) (((_) >> 0) & 0xFF) + uint64_t reserved1 : 4; + + /** + * [Bits 31:12] SMRR physical Base Address. + */ + uint64_t smrr_physical_base_address : 20; +#define IA32_SMRR_PHYSBASE_SMRR_PHYSICAL_BASE_ADDRESS_BIT 12 +#define IA32_SMRR_PHYSBASE_SMRR_PHYSICAL_BASE_ADDRESS_FLAG 0xFFFFF000 +#define IA32_SMRR_PHYSBASE_SMRR_PHYSICAL_BASE_ADDRESS_MASK 0xFFFFF +#define IA32_SMRR_PHYSBASE_SMRR_PHYSICAL_BASE_ADDRESS(_) (((_) >> 12) & 0xFFFFF) + uint64_t reserved2 : 32; + }; + + uint64_t flags; +} ia32_smrr_physbase_register; + + +/** + * @brief SMRR Range Mask (Writeable only in SMM) + * + * Range Mask of SMM memory range. + * + * @remarks If IA32_MTRRCAP[SMRR] = 1 + */ +#define IA32_SMRR_PHYSMASK 0x000001F3 +typedef union +{ + struct + { + uint64_t reserved1 : 11; + + /** + * [Bit 11] Enable range mask. + */ + uint64_t enable_range_mask : 1; +#define IA32_SMRR_PHYSMASK_ENABLE_RANGE_MASK_BIT 11 +#define IA32_SMRR_PHYSMASK_ENABLE_RANGE_MASK_FLAG 0x800 +#define IA32_SMRR_PHYSMASK_ENABLE_RANGE_MASK_MASK 0x01 +#define IA32_SMRR_PHYSMASK_ENABLE_RANGE_MASK(_) (((_) >> 11) & 0x01) + + /** + * [Bits 31:12] SMRR address range mask. + */ + uint64_t smrr_address_range_mask : 20; +#define IA32_SMRR_PHYSMASK_SMRR_ADDRESS_RANGE_MASK_BIT 12 +#define IA32_SMRR_PHYSMASK_SMRR_ADDRESS_RANGE_MASK_FLAG 0xFFFFF000 +#define IA32_SMRR_PHYSMASK_SMRR_ADDRESS_RANGE_MASK_MASK 0xFFFFF +#define IA32_SMRR_PHYSMASK_SMRR_ADDRESS_RANGE_MASK(_) (((_) >> 12) & 0xFFFFF) + uint64_t reserved2 : 32; + }; + + uint64_t flags; +} ia32_smrr_physmask_register; + + +/** + * DCA Capability. + * + * @remarks If CPUID.01H: ECX[18] = 1 + */ +#define IA32_PLATFORM_DCA_CAP 0x000001F8 + + /** + * If set, CPU supports Prefetch-Hint type. + * + * @remarks If CPUID.01H: ECX[18] = 1 + */ +#define IA32_CPU_DCA_CAP 0x000001F9 + + /** + * DCA type 0 Status and Control register. + * + * @remarks If CPUID.01H: ECX[18] = 1 + */ +#define IA32_DCA_0_CAP 0x000001FA +typedef union +{ + struct + { + /** + * [Bit 0] Set by HW when DCA is fuseenabled and no defeatures are set. + */ + uint64_t dca_active : 1; +#define IA32_DCA_0_CAP_DCA_ACTIVE_BIT 0 +#define IA32_DCA_0_CAP_DCA_ACTIVE_FLAG 0x01 +#define IA32_DCA_0_CAP_DCA_ACTIVE_MASK 0x01 +#define IA32_DCA_0_CAP_DCA_ACTIVE(_) (((_) >> 0) & 0x01) + + /** + * [Bits 2:1] TRANSACTION. + */ + uint64_t transaction : 2; +#define IA32_DCA_0_CAP_TRANSACTION_BIT 1 +#define IA32_DCA_0_CAP_TRANSACTION_FLAG 0x06 +#define IA32_DCA_0_CAP_TRANSACTION_MASK 0x03 +#define IA32_DCA_0_CAP_TRANSACTION(_) (((_) >> 1) & 0x03) + + /** + * [Bits 6:3] DCA_TYPE. + */ + uint64_t dca_type : 4; +#define IA32_DCA_0_CAP_DCA_TYPE_BIT 3 +#define IA32_DCA_0_CAP_DCA_TYPE_FLAG 0x78 +#define IA32_DCA_0_CAP_DCA_TYPE_MASK 0x0F +#define IA32_DCA_0_CAP_DCA_TYPE(_) (((_) >> 3) & 0x0F) + + /** + * [Bits 10:7] DCA_QUEUE_SIZE. + */ + uint64_t dca_queue_size : 4; +#define IA32_DCA_0_CAP_DCA_QUEUE_SIZE_BIT 7 +#define IA32_DCA_0_CAP_DCA_QUEUE_SIZE_FLAG 0x780 +#define IA32_DCA_0_CAP_DCA_QUEUE_SIZE_MASK 0x0F +#define IA32_DCA_0_CAP_DCA_QUEUE_SIZE(_) (((_) >> 7) & 0x0F) + uint64_t reserved1 : 2; + + /** + * [Bits 16:13] Writes will update the register but have no HW side-effect. + */ + uint64_t dca_delay : 4; +#define IA32_DCA_0_CAP_DCA_DELAY_BIT 13 +#define IA32_DCA_0_CAP_DCA_DELAY_FLAG 0x1E000 +#define IA32_DCA_0_CAP_DCA_DELAY_MASK 0x0F +#define IA32_DCA_0_CAP_DCA_DELAY(_) (((_) >> 13) & 0x0F) + uint64_t reserved2 : 7; + + /** + * [Bit 24] SW can request DCA block by setting this bit. + */ + uint64_t sw_block : 1; +#define IA32_DCA_0_CAP_SW_BLOCK_BIT 24 +#define IA32_DCA_0_CAP_SW_BLOCK_FLAG 0x1000000 +#define IA32_DCA_0_CAP_SW_BLOCK_MASK 0x01 +#define IA32_DCA_0_CAP_SW_BLOCK(_) (((_) >> 24) & 0x01) + uint64_t reserved3 : 1; + + /** + * [Bit 26] Set when DCA is blocked by HW (e.g. CR0.CD = 1). + */ + uint64_t hw_block : 1; +#define IA32_DCA_0_CAP_HW_BLOCK_BIT 26 +#define IA32_DCA_0_CAP_HW_BLOCK_FLAG 0x4000000 +#define IA32_DCA_0_CAP_HW_BLOCK_MASK 0x01 +#define IA32_DCA_0_CAP_HW_BLOCK(_) (((_) >> 26) & 0x01) + uint64_t reserved4 : 37; + }; + + uint64_t flags; +} ia32_dca_0_cap_register; + +/** + * @defgroup ia32_mtrr_physbase \ + * IA32_MTRR_PHYSBASE(n) + * + * IA32_MTRR_PHYSBASE(0-9). + * + * @remarks If CPUID.01H: EDX.MTRR[12] = 1 + * @see Vol3A[11.11.2.3(Variable Range MTRRs)] + * @{ + */ +typedef union +{ + struct + { + /** + * [Bits 7:0] Specifies the memory type for the range. + */ + uint64_t exec_type : 8; +#define IA32_MTRR_PHYSBASE_TYPE_BIT 0 +#define IA32_MTRR_PHYSBASE_TYPE_FLAG 0xFF +#define IA32_MTRR_PHYSBASE_TYPE_MASK 0xFF +#define IA32_MTRR_PHYSBASE_TYPE(_) (((_) >> 0) & 0xFF) + uint64_t reserved1 : 4; + + /** + * [Bits 47:12] Specifies the base address of the address range. This 24-bit value, in the case where MAXPHYADDR is 36 + * bits, is extended by 12 bits at the low end to form the base address (this automatically aligns the address on a 4-KByte + * boundary). + */ + uint64_t page_frame_number : 36; +#define IA32_MTRR_PHYSBASE_PAGE_FRAME_NUMBER_BIT 12 +#define IA32_MTRR_PHYSBASE_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define IA32_MTRR_PHYSBASE_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define IA32_MTRR_PHYSBASE_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved2 : 16; + }; + + uint64_t flags; +} ia32_mtrr_physbase_register; + +#define IA32_MTRR_PHYSBASE0 0x00000200 +#define IA32_MTRR_PHYSBASE1 0x00000202 +#define IA32_MTRR_PHYSBASE2 0x00000204 +#define IA32_MTRR_PHYSBASE3 0x00000206 +#define IA32_MTRR_PHYSBASE4 0x00000208 +#define IA32_MTRR_PHYSBASE5 0x0000020A +#define IA32_MTRR_PHYSBASE6 0x0000020C +#define IA32_MTRR_PHYSBASE7 0x0000020E +#define IA32_MTRR_PHYSBASE8 0x00000210 +#define IA32_MTRR_PHYSBASE9 0x00000212 +/** + * @} + */ + + /** + * @defgroup ia32_mtrr_physmask \ + * IA32_MTRR_PHYSMASK(n) + * + * IA32_MTRR_PHYSMASK(0-9). + * + * @remarks If CPUID.01H: EDX.MTRR[12] = 1 + * @see Vol3A[11.11.2.3(Variable Range MTRRs)] + * @{ + */ +typedef union +{ + struct + { + /** + * [Bits 7:0] Specifies the memory type for the range. + */ + uint64_t exec_type : 8; +#define IA32_MTRR_PHYSMASK_TYPE_BIT 0 +#define IA32_MTRR_PHYSMASK_TYPE_FLAG 0xFF +#define IA32_MTRR_PHYSMASK_TYPE_MASK 0xFF +#define IA32_MTRR_PHYSMASK_TYPE(_) (((_) >> 0) & 0xFF) + uint64_t reserved1 : 3; + + /** + * [Bit 11] Enables the register pair when set; disables register pair when clear. + */ + uint64_t valid : 1; +#define IA32_MTRR_PHYSMASK_VALID_BIT 11 +#define IA32_MTRR_PHYSMASK_VALID_FLAG 0x800 +#define IA32_MTRR_PHYSMASK_VALID_MASK 0x01 +#define IA32_MTRR_PHYSMASK_VALID(_) (((_) >> 11) & 0x01) + + /** + * [Bits 47:12] Specifies a mask (24 bits if the maximum physical address size is 36 bits, 28 bits if the maximum physical + * address size is 40 bits). The mask determines the range of the region being mapped, according to the following + * relationships: + * - Address_Within_Range AND PhysMask = PhysBase AND PhysMask + * - This value is extended by 12 bits at the low end to form the mask value. + * - The width of the PhysMask field depends on the maximum physical address size supported by the processor. + * CPUID.80000008H reports the maximum physical address size supported by the processor. If CPUID.80000008H is not + * available, software may assume that the processor supports a 36-bit physical address size. + * + * @see Vol3A[11.11.3(Example Base and Mask Calculations)] + */ + uint64_t page_frame_number : 36; +#define IA32_MTRR_PHYSMASK_PAGE_FRAME_NUMBER_BIT 12 +#define IA32_MTRR_PHYSMASK_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define IA32_MTRR_PHYSMASK_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define IA32_MTRR_PHYSMASK_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved2 : 16; + }; + + uint64_t flags; +} ia32_mtrr_physmask_register; + +#define IA32_MTRR_PHYSMASK0 0x00000201 +#define IA32_MTRR_PHYSMASK1 0x00000203 +#define IA32_MTRR_PHYSMASK2 0x00000205 +#define IA32_MTRR_PHYSMASK3 0x00000207 +#define IA32_MTRR_PHYSMASK4 0x00000209 +#define IA32_MTRR_PHYSMASK5 0x0000020B +#define IA32_MTRR_PHYSMASK6 0x0000020D +#define IA32_MTRR_PHYSMASK7 0x0000020F +#define IA32_MTRR_PHYSMASK8 0x00000211 +#define IA32_MTRR_PHYSMASK9 0x00000213 +/** + * @} + */ + + /** + * @defgroup ia32_mtrr_fix \ + * IA32_MTRR_FIX(x) + * + * IA32_MTRR_FIX(x). + * + * @remarks If CPUID.01H: EDX.MTRR[12] = 1 + * @see Vol3A[11.11.2.2(Fixed Range MTRRs)] + * @{ + */ + /** + * @defgroup ia32_mtrr_fix64k \ + * IA32_MTRR_FIX64K(x) + * + * IA32_MTRR_FIX64K(x). + * @{ + */ +#define IA32_MTRR_FIX64K_BASE 0x00000000 +#define IA32_MTRR_FIX64K_SIZE 0x00010000 +#define IA32_MTRR_FIX64K_00000 0x00000250 + /** + * @} + */ + + /** + * @defgroup ia32_mtrr_fix16k \ + * IA32_MTRR_FIX16K(x) + * + * IA32_MTRR_FIX16K(x). + * @{ + */ +#define IA32_MTRR_FIX16K_BASE 0x00080000 +#define IA32_MTRR_FIX16K_SIZE 0x00004000 +#define IA32_MTRR_FIX16K_80000 0x00000258 +#define IA32_MTRR_FIX16K_A0000 0x00000259 + /** + * @} + */ + + /** + * @defgroup ia32_mtrr_fix4k \ + * IA32_MTRR_FIX4K(x) + * + * IA32_MTRR_FIX4K(x). + * @{ + */ +#define IA32_MTRR_FIX4K_BASE 0x000C0000 +#define IA32_MTRR_FIX4K_SIZE 0x00001000 +#define IA32_MTRR_FIX4K_C0000 0x00000268 +#define IA32_MTRR_FIX4K_C8000 0x00000269 +#define IA32_MTRR_FIX4K_D0000 0x0000026A +#define IA32_MTRR_FIX4K_D8000 0x0000026B +#define IA32_MTRR_FIX4K_E0000 0x0000026C +#define IA32_MTRR_FIX4K_E8000 0x0000026D +#define IA32_MTRR_FIX4K_F0000 0x0000026E +#define IA32_MTRR_FIX4K_F8000 0x0000026F + /** + * @} + */ + + /** + * Architecture defined number of fixed range MTRRs (1 for 64k, 2 for 16k, 8 for 4k). + */ +#define IA32_MTRR_FIX_COUNT ((1 + 2 + 8) * 8) + + /** + * Architecture defined number of variable range MTRRs. + */ +#define IA32_MTRR_VARIABLE_COUNT 0x000000FF + + /** + * A size of array to store all possible MTRRs. + */ +#define IA32_MTRR_COUNT (IA32_MTRR_FIX_COUNT + IA32_MTRR_VARIABLE_COUNT) + /** + * @} + */ + + + /** + * IA32_PAT. + * + * @remarks If CPUID.01H: EDX.MTRR[16] = 1 + */ +#define IA32_PAT 0x00000277 +typedef union +{ + struct + { + /** + * [Bits 2:0] PA0. + */ + uint64_t pa0 : 3; +#define IA32_PAT_PA0_BIT 0 +#define IA32_PAT_PA0_FLAG 0x07 +#define IA32_PAT_PA0_MASK 0x07 +#define IA32_PAT_PA0(_) (((_) >> 0) & 0x07) + uint64_t reserved1 : 5; + + /** + * [Bits 10:8] PA1. + */ + uint64_t pa1 : 3; +#define IA32_PAT_PA1_BIT 8 +#define IA32_PAT_PA1_FLAG 0x700 +#define IA32_PAT_PA1_MASK 0x07 +#define IA32_PAT_PA1(_) (((_) >> 8) & 0x07) + uint64_t reserved2 : 5; + + /** + * [Bits 18:16] PA2. + */ + uint64_t pa2 : 3; +#define IA32_PAT_PA2_BIT 16 +#define IA32_PAT_PA2_FLAG 0x70000 +#define IA32_PAT_PA2_MASK 0x07 +#define IA32_PAT_PA2(_) (((_) >> 16) & 0x07) + uint64_t reserved3 : 5; + + /** + * [Bits 26:24] PA3. + */ + uint64_t pa3 : 3; +#define IA32_PAT_PA3_BIT 24 +#define IA32_PAT_PA3_FLAG 0x7000000 +#define IA32_PAT_PA3_MASK 0x07 +#define IA32_PAT_PA3(_) (((_) >> 24) & 0x07) + uint64_t reserved4 : 5; + + /** + * [Bits 34:32] PA4. + */ + uint64_t pa4 : 3; +#define IA32_PAT_PA4_BIT 32 +#define IA32_PAT_PA4_FLAG 0x700000000 +#define IA32_PAT_PA4_MASK 0x07 +#define IA32_PAT_PA4(_) (((_) >> 32) & 0x07) + uint64_t reserved5 : 5; + + /** + * [Bits 42:40] PA5. + */ + uint64_t pa5 : 3; +#define IA32_PAT_PA5_BIT 40 +#define IA32_PAT_PA5_FLAG 0x70000000000 +#define IA32_PAT_PA5_MASK 0x07 +#define IA32_PAT_PA5(_) (((_) >> 40) & 0x07) + uint64_t reserved6 : 5; + + /** + * [Bits 50:48] PA6. + */ + uint64_t pa6 : 3; +#define IA32_PAT_PA6_BIT 48 +#define IA32_PAT_PA6_FLAG 0x7000000000000 +#define IA32_PAT_PA6_MASK 0x07 +#define IA32_PAT_PA6(_) (((_) >> 48) & 0x07) + uint64_t reserved7 : 5; + + /** + * [Bits 58:56] PA7. + */ + uint64_t pa7 : 3; +#define IA32_PAT_PA7_BIT 56 +#define IA32_PAT_PA7_FLAG 0x700000000000000 +#define IA32_PAT_PA7_MASK 0x07 +#define IA32_PAT_PA7(_) (((_) >> 56) & 0x07) + uint64_t reserved8 : 5; + }; + + uint64_t flags; +} ia32_pat_register; + +/** + * @defgroup ia32_mc_ctl2 \ + * IA32_MC(i)_CTL2 + * + * MSR to enable/disable CMCI capability for bank n. + * + * @remarks If IA32_MCG_CAP[10] = 1 && IA32_MCG_CAP[7:0] > n + * @see Vol3B[15.3.2.5(IA32_MCi_CTL2 MSRs)] + * @{ + */ +#define IA32_MC0_CTL2 0x00000280 +#define IA32_MC1_CTL2 0x00000281 +#define IA32_MC2_CTL2 0x00000282 +#define IA32_MC3_CTL2 0x00000283 +#define IA32_MC4_CTL2 0x00000284 +#define IA32_MC5_CTL2 0x00000285 +#define IA32_MC6_CTL2 0x00000286 +#define IA32_MC7_CTL2 0x00000287 +#define IA32_MC8_CTL2 0x00000288 +#define IA32_MC9_CTL2 0x00000289 +#define IA32_MC10_CTL2 0x0000028A +#define IA32_MC11_CTL2 0x0000028B +#define IA32_MC12_CTL2 0x0000028C +#define IA32_MC13_CTL2 0x0000028D +#define IA32_MC14_CTL2 0x0000028E +#define IA32_MC15_CTL2 0x0000028F +#define IA32_MC16_CTL2 0x00000290 +#define IA32_MC17_CTL2 0x00000291 +#define IA32_MC18_CTL2 0x00000292 +#define IA32_MC19_CTL2 0x00000293 +#define IA32_MC20_CTL2 0x00000294 +#define IA32_MC21_CTL2 0x00000295 +#define IA32_MC22_CTL2 0x00000296 +#define IA32_MC23_CTL2 0x00000297 +#define IA32_MC24_CTL2 0x00000298 +#define IA32_MC25_CTL2 0x00000299 +#define IA32_MC26_CTL2 0x0000029A +#define IA32_MC27_CTL2 0x0000029B +#define IA32_MC28_CTL2 0x0000029C +#define IA32_MC29_CTL2 0x0000029D +#define IA32_MC30_CTL2 0x0000029E +#define IA32_MC31_CTL2 0x0000029F +typedef union +{ + struct + { + /** + * [Bits 14:0] Corrected error count threshold. + */ + uint64_t corrected_error_count_threshold : 15; +#define IA32_MC_CTL2_CORRECTED_ERROR_COUNT_THRESHOLD_BIT 0 +#define IA32_MC_CTL2_CORRECTED_ERROR_COUNT_THRESHOLD_FLAG 0x7FFF +#define IA32_MC_CTL2_CORRECTED_ERROR_COUNT_THRESHOLD_MASK 0x7FFF +#define IA32_MC_CTL2_CORRECTED_ERROR_COUNT_THRESHOLD(_) (((_) >> 0) & 0x7FFF) + uint64_t reserved1 : 15; + + /** + * [Bit 30] CMCI_EN. + */ + uint64_t cmci_en : 1; +#define IA32_MC_CTL2_CMCI_EN_BIT 30 +#define IA32_MC_CTL2_CMCI_EN_FLAG 0x40000000 +#define IA32_MC_CTL2_CMCI_EN_MASK 0x01 +#define IA32_MC_CTL2_CMCI_EN(_) (((_) >> 30) & 0x01) + uint64_t reserved2 : 33; + }; + + uint64_t flags; +} ia32_mc_ctl2_register; + +/** + * @} + */ + + + /** + * IA32_MTRR_DEF_TYPE. + * + * @remarks If CPUID.01H: EDX.MTRR[12] = 1 + */ +#define IA32_MTRR_DEF_TYPE 0x000002FF +typedef union +{ + struct + { + /** + * [Bits 2:0] Default Memory Type. + */ + uint64_t default_memory_type : 3; +#define IA32_MTRR_DEF_TYPE_DEFAULT_MEMORY_TYPE_BIT 0 +#define IA32_MTRR_DEF_TYPE_DEFAULT_MEMORY_TYPE_FLAG 0x07 +#define IA32_MTRR_DEF_TYPE_DEFAULT_MEMORY_TYPE_MASK 0x07 +#define IA32_MTRR_DEF_TYPE_DEFAULT_MEMORY_TYPE(_) (((_) >> 0) & 0x07) + uint64_t reserved1 : 7; + + /** + * [Bit 10] Fixed Range MTRR Enable. + */ + uint64_t fixed_range_mtrr_enable : 1; +#define IA32_MTRR_DEF_TYPE_FIXED_RANGE_MTRR_ENABLE_BIT 10 +#define IA32_MTRR_DEF_TYPE_FIXED_RANGE_MTRR_ENABLE_FLAG 0x400 +#define IA32_MTRR_DEF_TYPE_FIXED_RANGE_MTRR_ENABLE_MASK 0x01 +#define IA32_MTRR_DEF_TYPE_FIXED_RANGE_MTRR_ENABLE(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] MTRR Enable. + */ + uint64_t mtrr_enable : 1; +#define IA32_MTRR_DEF_TYPE_MTRR_ENABLE_BIT 11 +#define IA32_MTRR_DEF_TYPE_MTRR_ENABLE_FLAG 0x800 +#define IA32_MTRR_DEF_TYPE_MTRR_ENABLE_MASK 0x01 +#define IA32_MTRR_DEF_TYPE_MTRR_ENABLE(_) (((_) >> 11) & 0x01) + uint64_t reserved2 : 52; + }; + + uint64_t flags; +} ia32_mtrr_def_type_register; + +/** + * @defgroup ia32_fixed_ctr \ + * IA32_FIXED_CTR(n) + * + * Fixed-Function Performance Counter n. + * + * @remarks If CPUID.0AH: EDX[4:0] > n + * @{ + */ + /** + * Counts Instr_Retired.Any. + */ +#define IA32_FIXED_CTR0 0x00000309 + + /** + * Counts CPU_CLK_Unhalted.Core + */ +#define IA32_FIXED_CTR1 0x0000030A + + /** + * Counts CPU_CLK_Unhalted.Ref + */ +#define IA32_FIXED_CTR2 0x0000030B + /** + * @} + */ + + + /** + * Read Only MSR that enumerates the existence of performance monitoring features. + * + * @remarks If CPUID.01H: ECX[15] = 1 + */ +#define IA32_PERF_CAPABILITIES 0x00000345 +typedef union +{ + struct + { + /** + * [Bits 5:0] LBR format. + */ + uint64_t lbr_format : 6; +#define IA32_PERF_CAPABILITIES_LBR_FORMAT_BIT 0 +#define IA32_PERF_CAPABILITIES_LBR_FORMAT_FLAG 0x3F +#define IA32_PERF_CAPABILITIES_LBR_FORMAT_MASK 0x3F +#define IA32_PERF_CAPABILITIES_LBR_FORMAT(_) (((_) >> 0) & 0x3F) + + /** + * [Bit 6] PEBS Trap. + */ + uint64_t pebs_trap : 1; +#define IA32_PERF_CAPABILITIES_PEBS_TRAP_BIT 6 +#define IA32_PERF_CAPABILITIES_PEBS_TRAP_FLAG 0x40 +#define IA32_PERF_CAPABILITIES_PEBS_TRAP_MASK 0x01 +#define IA32_PERF_CAPABILITIES_PEBS_TRAP(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] PEBSSaveArchRegs. + */ + uint64_t pebs_save_arch_regs : 1; +#define IA32_PERF_CAPABILITIES_PEBS_SAVE_ARCH_REGS_BIT 7 +#define IA32_PERF_CAPABILITIES_PEBS_SAVE_ARCH_REGS_FLAG 0x80 +#define IA32_PERF_CAPABILITIES_PEBS_SAVE_ARCH_REGS_MASK 0x01 +#define IA32_PERF_CAPABILITIES_PEBS_SAVE_ARCH_REGS(_) (((_) >> 7) & 0x01) + + /** + * [Bits 11:8] PEBS Record Format. + */ + uint64_t pebs_record_format : 4; +#define IA32_PERF_CAPABILITIES_PEBS_RECORD_FORMAT_BIT 8 +#define IA32_PERF_CAPABILITIES_PEBS_RECORD_FORMAT_FLAG 0xF00 +#define IA32_PERF_CAPABILITIES_PEBS_RECORD_FORMAT_MASK 0x0F +#define IA32_PERF_CAPABILITIES_PEBS_RECORD_FORMAT(_) (((_) >> 8) & 0x0F) + + /** + * [Bit 12] Freeze while SMM is supported. + */ + uint64_t freeze_while_smm_is_supported : 1; +#define IA32_PERF_CAPABILITIES_FREEZE_WHILE_SMM_IS_SUPPORTED_BIT 12 +#define IA32_PERF_CAPABILITIES_FREEZE_WHILE_SMM_IS_SUPPORTED_FLAG 0x1000 +#define IA32_PERF_CAPABILITIES_FREEZE_WHILE_SMM_IS_SUPPORTED_MASK 0x01 +#define IA32_PERF_CAPABILITIES_FREEZE_WHILE_SMM_IS_SUPPORTED(_) (((_) >> 12) & 0x01) + + /** + * [Bit 13] Full width of counter writable via IA32_A_PMCx. + */ + uint64_t full_width_counter_write : 1; +#define IA32_PERF_CAPABILITIES_FULL_WIDTH_COUNTER_WRITE_BIT 13 +#define IA32_PERF_CAPABILITIES_FULL_WIDTH_COUNTER_WRITE_FLAG 0x2000 +#define IA32_PERF_CAPABILITIES_FULL_WIDTH_COUNTER_WRITE_MASK 0x01 +#define IA32_PERF_CAPABILITIES_FULL_WIDTH_COUNTER_WRITE(_) (((_) >> 13) & 0x01) + uint64_t reserved1 : 50; + }; + + uint64_t flags; +} ia32_perf_capabilities_register; + + +/** + * @brief Fixed-Function Performance Counter Control (R/W) + * + * Fixed-Function Performance Counter Control. Counter increments while the results of ANDing respective enable bit in + * IA32_PERF_GLOBAL_CTRL with the corresponding OS or USR bits in this MSR is true. + * + * @remarks If CPUID.0AH: EAX[7:0] > 1 + */ +#define IA32_FIXED_CTR_CTRL 0x0000038D +typedef union +{ + struct + { + /** + * [Bit 0] EN0_OS: Enable Fixed Counter 0 to count while CPL = 0. + */ + uint64_t en0_os : 1; +#define IA32_FIXED_CTR_CTRL_EN0_OS_BIT 0 +#define IA32_FIXED_CTR_CTRL_EN0_OS_FLAG 0x01 +#define IA32_FIXED_CTR_CTRL_EN0_OS_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN0_OS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] EN0_Usr: Enable Fixed Counter 0 to count while CPL > 0. + */ + uint64_t en0_usr : 1; +#define IA32_FIXED_CTR_CTRL_EN0_USR_BIT 1 +#define IA32_FIXED_CTR_CTRL_EN0_USR_FLAG 0x02 +#define IA32_FIXED_CTR_CTRL_EN0_USR_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN0_USR(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] AnyThread: When set to 1, it enables counting the associated event conditions occurring across all logical + * processors sharing a processor core. When set to 0, the counter only increments the associated event conditions + * occurring in the logical processor which programmed the MSR. + */ + uint64_t any_thread0 : 1; +#define IA32_FIXED_CTR_CTRL_ANY_THREAD0_BIT 2 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD0_FLAG 0x04 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD0_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD0(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] EN0_PMI: Enable PMI when fixed counter 0 overflows. + */ + uint64_t en0_pmi : 1; +#define IA32_FIXED_CTR_CTRL_EN0_PMI_BIT 3 +#define IA32_FIXED_CTR_CTRL_EN0_PMI_FLAG 0x08 +#define IA32_FIXED_CTR_CTRL_EN0_PMI_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN0_PMI(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] EN1_OS: Enable Fixed Counter 1 to count while CPL = 0. + */ + uint64_t en1_os : 1; +#define IA32_FIXED_CTR_CTRL_EN1_OS_BIT 4 +#define IA32_FIXED_CTR_CTRL_EN1_OS_FLAG 0x10 +#define IA32_FIXED_CTR_CTRL_EN1_OS_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN1_OS(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] EN1_Usr: Enable Fixed Counter 1 to count while CPL > 0. + */ + uint64_t en1_usr : 1; +#define IA32_FIXED_CTR_CTRL_EN1_USR_BIT 5 +#define IA32_FIXED_CTR_CTRL_EN1_USR_FLAG 0x20 +#define IA32_FIXED_CTR_CTRL_EN1_USR_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN1_USR(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] AnyThread: When set to 1, it enables counting the associated event conditions occurring across all logical + * processors sharing a processor core. When set to 0, the counter only increments the associated event conditions + * occurring in the logical processor which programmed the MSR. + * + * @remarks If CPUID.0AH: EAX[7:0] > 2 + */ + uint64_t any_thread1 : 1; +#define IA32_FIXED_CTR_CTRL_ANY_THREAD1_BIT 6 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD1_FLAG 0x40 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD1_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD1(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] EN1_PMI: Enable PMI when fixed counter 1 overflows. + */ + uint64_t en1_pmi : 1; +#define IA32_FIXED_CTR_CTRL_EN1_PMI_BIT 7 +#define IA32_FIXED_CTR_CTRL_EN1_PMI_FLAG 0x80 +#define IA32_FIXED_CTR_CTRL_EN1_PMI_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN1_PMI(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] EN2_OS: Enable Fixed Counter 2 to count while CPL = 0. + */ + uint64_t en2_os : 1; +#define IA32_FIXED_CTR_CTRL_EN2_OS_BIT 8 +#define IA32_FIXED_CTR_CTRL_EN2_OS_FLAG 0x100 +#define IA32_FIXED_CTR_CTRL_EN2_OS_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN2_OS(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] EN2_Usr: Enable Fixed Counter 2 to count while CPL > 0. + */ + uint64_t en2_usr : 1; +#define IA32_FIXED_CTR_CTRL_EN2_USR_BIT 9 +#define IA32_FIXED_CTR_CTRL_EN2_USR_FLAG 0x200 +#define IA32_FIXED_CTR_CTRL_EN2_USR_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN2_USR(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] AnyThread: When set to 1, it enables counting the associated event conditions occurring across all logical + * processors sharing a processor core. When set to 0, the counter only increments the associated event conditions + * occurring in the logical processor which programmed the MSR. + * + * @remarks If CPUID.0AH: EAX[7:0] > 2 + */ + uint64_t any_thread2 : 1; +#define IA32_FIXED_CTR_CTRL_ANY_THREAD2_BIT 10 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD2_FLAG 0x400 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD2_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_ANY_THREAD2(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] EN2_PMI: Enable PMI when fixed counter 2 overflows. + */ + uint64_t en2_pmi : 1; +#define IA32_FIXED_CTR_CTRL_EN2_PMI_BIT 11 +#define IA32_FIXED_CTR_CTRL_EN2_PMI_FLAG 0x800 +#define IA32_FIXED_CTR_CTRL_EN2_PMI_MASK 0x01 +#define IA32_FIXED_CTR_CTRL_EN2_PMI(_) (((_) >> 11) & 0x01) + uint64_t reserved1 : 52; + }; + + uint64_t flags; +} ia32_fixed_ctr_ctrl_register; + + +/** + * Global Performance Counter Status. + * + * @remarks If CPUID.0AH: EAX[7:0] > 0 + */ +#define IA32_PERF_GLOBAL_STATUS 0x0000038E +typedef union +{ + struct + { + /** + * [Bit 0] Ovf_PMC0: Overflow status of IA32_PMC0. + * + * @remarks If CPUID.0AH: EAX[15:8] > 0 + */ + uint64_t ovf_pmc0 : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC0_BIT 0 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC0_FLAG 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC0_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC0(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Ovf_PMC1: Overflow status of IA32_PMC1. + * + * @remarks If CPUID.0AH: EAX[15:8] > 1 + */ + uint64_t ovf_pmc1 : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC1_BIT 1 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC1_FLAG 0x02 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC1_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC1(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Ovf_PMC2: Overflow status of IA32_PMC2. + * + * @remarks If CPUID.0AH: EAX[15:8] > 2 + */ + uint64_t ovf_pmc2 : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC2_BIT 2 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC2_FLAG 0x04 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC2_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC2(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Ovf_PMC3: Overflow status of IA32_PMC3. + * + * @remarks If CPUID.0AH: EAX[15:8] > 3 + */ + uint64_t ovf_pmc3 : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC3_BIT 3 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC3_FLAG 0x08 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC3_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_PMC3(_) (((_) >> 3) & 0x01) + uint64_t reserved1 : 28; + + /** + * [Bit 32] Ovf_FixedCtr0: Overflow status of IA32_FIXED_CTR0. + * + * @remarks If CPUID.0AH: EAX[7:0] > 1 + */ + uint64_t ovf_fixedctr0 : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR0_BIT 32 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR0_FLAG 0x100000000 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR0_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR0(_) (((_) >> 32) & 0x01) + + /** + * [Bit 33] Ovf_FixedCtr1: Overflow status of IA32_FIXED_CTR1. + * + * @remarks If CPUID.0AH: EAX[7:0] > 1 + */ + uint64_t ovf_fixedctr1 : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR1_BIT 33 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR1_FLAG 0x200000000 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR1_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR1(_) (((_) >> 33) & 0x01) + + /** + * [Bit 34] Ovf_FixedCtr2: Overflow status of IA32_FIXED_CTR2. + * + * @remarks If CPUID.0AH: EAX[7:0] > 1 + */ + uint64_t ovf_fixedctr2 : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR2_BIT 34 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR2_FLAG 0x400000000 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR2_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_FIXEDCTR2(_) (((_) >> 34) & 0x01) + uint64_t reserved2 : 20; + + /** + * [Bit 55] Trace_ToPA_PMI: A PMI occurred due to a ToPA entry memory buffer that was completely filled. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA = 1 + */ + uint64_t trace_topa_pmi : 1; +#define IA32_PERF_GLOBAL_STATUS_TRACE_TOPA_PMI_BIT 55 +#define IA32_PERF_GLOBAL_STATUS_TRACE_TOPA_PMI_FLAG 0x80000000000000 +#define IA32_PERF_GLOBAL_STATUS_TRACE_TOPA_PMI_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_TRACE_TOPA_PMI(_) (((_) >> 55) & 0x01) + uint64_t reserved3 : 2; + + /** + * [Bit 58] LBR_Frz. LBRs are frozen due to: + * * IA32_DEBUGCTL.FREEZE_LBR_ON_PMI=1. + * * The LBR stack overflowed. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t lbr_frz : 1; +#define IA32_PERF_GLOBAL_STATUS_LBR_FRZ_BIT 58 +#define IA32_PERF_GLOBAL_STATUS_LBR_FRZ_FLAG 0x400000000000000 +#define IA32_PERF_GLOBAL_STATUS_LBR_FRZ_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_LBR_FRZ(_) (((_) >> 58) & 0x01) + + /** + * [Bit 59] CTR_Frz. Performance counters in the core PMU are frozen due to: + * * IA32_DEBUGCTL.FREEZE_PERFMON_ON_PMI=1. + * * One or more core PMU counters overflowed. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t ctr_frz : 1; +#define IA32_PERF_GLOBAL_STATUS_CTR_FRZ_BIT 59 +#define IA32_PERF_GLOBAL_STATUS_CTR_FRZ_FLAG 0x800000000000000 +#define IA32_PERF_GLOBAL_STATUS_CTR_FRZ_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_CTR_FRZ(_) (((_) >> 59) & 0x01) + + /** + * [Bit 60] ASCI: Data in the performance counters in the core PMU may include contributions from the direct or indirect + * operation Intel SGX to protect an enclave. + * + * @remarks If CPUID.(EAX=07H, ECX=0):EBX[2] = 1 + */ + uint64_t asci : 1; +#define IA32_PERF_GLOBAL_STATUS_ASCI_BIT 60 +#define IA32_PERF_GLOBAL_STATUS_ASCI_FLAG 0x1000000000000000 +#define IA32_PERF_GLOBAL_STATUS_ASCI_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_ASCI(_) (((_) >> 60) & 0x01) + + /** + * [Bit 61] Uncore counter overflow status. + * + * @remarks If CPUID.0AH: EAX[7:0] > 2 + */ + uint64_t ovf_uncore : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_UNCORE_BIT 61 +#define IA32_PERF_GLOBAL_STATUS_OVF_UNCORE_FLAG 0x2000000000000000 +#define IA32_PERF_GLOBAL_STATUS_OVF_UNCORE_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_UNCORE(_) (((_) >> 61) & 0x01) + + /** + * [Bit 62] OvfBuf: DS SAVE area Buffer overflow status. + * + * @remarks If CPUID.0AH: EAX[7:0] > 0 + */ + uint64_t ovf_buf : 1; +#define IA32_PERF_GLOBAL_STATUS_OVF_BUF_BIT 62 +#define IA32_PERF_GLOBAL_STATUS_OVF_BUF_FLAG 0x4000000000000000 +#define IA32_PERF_GLOBAL_STATUS_OVF_BUF_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_OVF_BUF(_) (((_) >> 62) & 0x01) + + /** + * [Bit 63] CondChgd: Status bits of this register have changed. + * + * @remarks If CPUID.0AH: EAX[7:0] > 0 + */ + uint64_t cond_chgd : 1; +#define IA32_PERF_GLOBAL_STATUS_COND_CHGD_BIT 63 +#define IA32_PERF_GLOBAL_STATUS_COND_CHGD_FLAG 0x8000000000000000 +#define IA32_PERF_GLOBAL_STATUS_COND_CHGD_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_COND_CHGD(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} ia32_perf_global_status_register; + + +/** + * @brief Global Performance Counter Control (R/W) + * + * Global Performance Counter Control. Counter increments while the result of ANDing the respective enable bit in this MSR + * with the corresponding OS or USR bits in the general-purpose or fixed counter control MSR is true. + * + * @remarks If CPUID.0AH: EAX[7:0] > 0 + */ +#define IA32_PERF_GLOBAL_CTRL 0x0000038F +typedef struct +{ + /** + * EN_PMC(n). Enable bitmask. Only the first n-1 bits are valid. Bits 31:n are reserved. + * + * @remarks If CPUID.0AH: EAX[15:8] > n + */ + uint32_t en_pmcn; + + /** + * EN_FIXED_CTR(n). Enable bitmask. Only the first n-1 bits are valid. Bits 31:n are reserved. + * + * @remarks If CPUID.0AH: EDX[4:0] > n + */ + uint32_t en_fixed_ctrn; +} ia32_perf_global_ctrl_register; + + +/** + * Global Performance Counter Overflow Reset Control. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ +#define IA32_PERF_GLOBAL_STATUS_RESET 0x00000390 +typedef union +{ + struct + { + /** + * [Bits 31:0] Set 1 to clear Ovf_PMC(n) bit. Clear bitmask. Only the first n-1 bits are valid. Bits 31:n are reserved. + * + * @remarks If CPUID.0AH: EAX[15:8] > n + */ + uint64_t clear_ovf_pmcn : 32; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_PMCN_BIT 0 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_PMCN_FLAG 0xFFFFFFFF +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_PMCN_MASK 0xFFFFFFFF +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_PMCN(_) (((_) >> 0) & 0xFFFFFFFF) + + /** + * [Bits 34:32] Set 1 to clear Ovf_FIXED_CTR(n) bit. Clear bitmask. Only the first n-1 bits are valid. Bits 31:n are + * reserved. + * + * @remarks If CPUID.0AH: EDX[4:0] > n + */ + uint64_t clear_ovf_fixed_ctrn : 3; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_FIXED_CTRN_BIT 32 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_FIXED_CTRN_FLAG 0x700000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_FIXED_CTRN_MASK 0x07 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_FIXED_CTRN(_) (((_) >> 32) & 0x07) + uint64_t reserved1 : 20; + + /** + * [Bit 55] Set 1 to clear Trace_ToPA_PMI bit. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1) && IA32_RTIT_CTL.ToPA = 1 + */ + uint64_t clear_trace_topa_pmi : 1; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_TRACE_TOPA_PMI_BIT 55 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_TRACE_TOPA_PMI_FLAG 0x80000000000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_TRACE_TOPA_PMI_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_TRACE_TOPA_PMI(_) (((_) >> 55) & 0x01) + uint64_t reserved2 : 2; + + /** + * [Bit 58] Set 1 to clear LBR_Frz bit. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t clear_lbr_frz : 1; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_LBR_FRZ_BIT 58 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_LBR_FRZ_FLAG 0x400000000000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_LBR_FRZ_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_LBR_FRZ(_) (((_) >> 58) & 0x01) + + /** + * [Bit 59] Set 1 to clear CTR_Frz bit. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t clear_ctr_frz : 1; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_CTR_FRZ_BIT 59 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_CTR_FRZ_FLAG 0x800000000000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_CTR_FRZ_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_CTR_FRZ(_) (((_) >> 59) & 0x01) + + /** + * [Bit 60] Set 1 to clear ASCI bit. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t clear_asci : 1; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_ASCI_BIT 60 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_ASCI_FLAG 0x1000000000000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_ASCI_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_ASCI(_) (((_) >> 60) & 0x01) + + /** + * [Bit 61] Set 1 to clear Ovf_Uncore bit. + * + * @remarks 06_2EH + */ + uint64_t clear_ovf_uncore : 1; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_UNCORE_BIT 61 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_UNCORE_FLAG 0x2000000000000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_UNCORE_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_UNCORE(_) (((_) >> 61) & 0x01) + + /** + * [Bit 62] Set 1 to clear OvfBuf bit. + * + * @remarks If CPUID.0AH: EAX[7:0] > 0 + */ + uint64_t clear_ovf_buf : 1; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_BUF_BIT 62 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_BUF_FLAG 0x4000000000000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_BUF_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_OVF_BUF(_) (((_) >> 62) & 0x01) + + /** + * [Bit 63] Set 1 to clear CondChgd bit. + * + * @remarks If CPUID.0AH: EAX[7:0] > 0 + */ + uint64_t clear_cond_chgd : 1; +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_COND_CHGD_BIT 63 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_COND_CHGD_FLAG 0x8000000000000000 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_COND_CHGD_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_RESET_CLEAR_COND_CHGD(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} ia32_perf_global_status_reset_register; + + +/** + * Global Performance Counter Overflow Set Control. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ +#define IA32_PERF_GLOBAL_STATUS_SET 0x00000391 +typedef union +{ + struct + { + /** + * [Bits 31:0] Set 1 to cause Ovf_PMC(n) = 1. Set bitmask. Only the first n-1 bits are valid. Bits 31:n are reserved. + * + * @remarks If CPUID.0AH: EAX[15:8] > n + */ + uint64_t ovf_pmcn : 32; +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_PMCN_BIT 0 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_PMCN_FLAG 0xFFFFFFFF +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_PMCN_MASK 0xFFFFFFFF +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_PMCN(_) (((_) >> 0) & 0xFFFFFFFF) + + /** + * [Bits 34:32] Set 1 to cause Ovf_FIXED_CTR(n) = 1. Set bitmask. Only the first n-1 bits are valid. Bits 31:n are + * reserved. + * + * @remarks If CPUID.0AH: EDX[4:0] > n + */ + uint64_t ovf_fixed_ctrn : 3; +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_FIXED_CTRN_BIT 32 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_FIXED_CTRN_FLAG 0x700000000 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_FIXED_CTRN_MASK 0x07 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_FIXED_CTRN(_) (((_) >> 32) & 0x07) + uint64_t reserved1 : 20; + + /** + * [Bit 55] Set 1 to cause Trace_ToPA_PMI = 1. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t trace_topa_pmi : 1; +#define IA32_PERF_GLOBAL_STATUS_SET_TRACE_TOPA_PMI_BIT 55 +#define IA32_PERF_GLOBAL_STATUS_SET_TRACE_TOPA_PMI_FLAG 0x80000000000000 +#define IA32_PERF_GLOBAL_STATUS_SET_TRACE_TOPA_PMI_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_SET_TRACE_TOPA_PMI(_) (((_) >> 55) & 0x01) + uint64_t reserved2 : 2; + + /** + * [Bit 58] Set 1 to cause LBR_Frz = 1. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t lbr_frz : 1; +#define IA32_PERF_GLOBAL_STATUS_SET_LBR_FRZ_BIT 58 +#define IA32_PERF_GLOBAL_STATUS_SET_LBR_FRZ_FLAG 0x400000000000000 +#define IA32_PERF_GLOBAL_STATUS_SET_LBR_FRZ_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_SET_LBR_FRZ(_) (((_) >> 58) & 0x01) + + /** + * [Bit 59] Set 1 to cause CTR_Frz = 1. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t ctr_frz : 1; +#define IA32_PERF_GLOBAL_STATUS_SET_CTR_FRZ_BIT 59 +#define IA32_PERF_GLOBAL_STATUS_SET_CTR_FRZ_FLAG 0x800000000000000 +#define IA32_PERF_GLOBAL_STATUS_SET_CTR_FRZ_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_SET_CTR_FRZ(_) (((_) >> 59) & 0x01) + + /** + * [Bit 60] Set 1 to cause ASCI = 1. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t asci : 1; +#define IA32_PERF_GLOBAL_STATUS_SET_ASCI_BIT 60 +#define IA32_PERF_GLOBAL_STATUS_SET_ASCI_FLAG 0x1000000000000000 +#define IA32_PERF_GLOBAL_STATUS_SET_ASCI_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_SET_ASCI(_) (((_) >> 60) & 0x01) + + /** + * [Bit 61] Set 1 to cause Ovf_Uncore = 1. + * + * @remarks 06_2EH + */ + uint64_t ovf_uncore : 1; +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_UNCORE_BIT 61 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_UNCORE_FLAG 0x2000000000000000 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_UNCORE_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_UNCORE(_) (((_) >> 61) & 0x01) + + /** + * [Bit 62] Set 1 to cause OvfBuf = 1. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ + uint64_t ovf_buf : 1; +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_BUF_BIT 62 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_BUF_FLAG 0x4000000000000000 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_BUF_MASK 0x01 +#define IA32_PERF_GLOBAL_STATUS_SET_OVF_BUF(_) (((_) >> 62) & 0x01) + uint64_t reserved3 : 1; + }; + + uint64_t flags; +} ia32_perf_global_status_set_register; + + +/** + * Indicator that core perfmon interface is in use. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ +#define IA32_PERF_GLOBAL_INUSE 0x00000392 +typedef union +{ + struct + { + /** + * [Bits 31:0] IA32_PERFEVTSEL(n) in use. Status bitmask. Only the first n-1 bits are valid. Bits 31:n are reserved. + * + * @remarks If CPUID.0AH: EAX[15:8] > n + */ + uint64_t ia32_perfevtseln_in_use : 32; +#define IA32_PERF_GLOBAL_INUSE_IA32_PERFEVTSELN_IN_USE_BIT 0 +#define IA32_PERF_GLOBAL_INUSE_IA32_PERFEVTSELN_IN_USE_FLAG 0xFFFFFFFF +#define IA32_PERF_GLOBAL_INUSE_IA32_PERFEVTSELN_IN_USE_MASK 0xFFFFFFFF +#define IA32_PERF_GLOBAL_INUSE_IA32_PERFEVTSELN_IN_USE(_) (((_) >> 0) & 0xFFFFFFFF) + + /** + * [Bits 34:32] IA32_FIXED_CTR(n) in use. Status bitmask. Only the first n-1 bits are valid. Bits 31:n are reserved. + */ + uint64_t ia32_fixed_ctrn_in_use : 3; +#define IA32_PERF_GLOBAL_INUSE_IA32_FIXED_CTRN_IN_USE_BIT 32 +#define IA32_PERF_GLOBAL_INUSE_IA32_FIXED_CTRN_IN_USE_FLAG 0x700000000 +#define IA32_PERF_GLOBAL_INUSE_IA32_FIXED_CTRN_IN_USE_MASK 0x07 +#define IA32_PERF_GLOBAL_INUSE_IA32_FIXED_CTRN_IN_USE(_) (((_) >> 32) & 0x07) + uint64_t reserved1 : 28; + + /** + * [Bit 63] PMI in use. + */ + uint64_t pmi_in_use : 1; +#define IA32_PERF_GLOBAL_INUSE_PMI_IN_USE_BIT 63 +#define IA32_PERF_GLOBAL_INUSE_PMI_IN_USE_FLAG 0x8000000000000000 +#define IA32_PERF_GLOBAL_INUSE_PMI_IN_USE_MASK 0x01 +#define IA32_PERF_GLOBAL_INUSE_PMI_IN_USE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} ia32_perf_global_inuse_register; + + +/** + * PEBS Control. + * + * @remarks If CPUID.0AH: EAX[7:0] > 3 + */ +#define IA32_PEBS_ENABLE 0x000003F1 +typedef union +{ + struct + { + /** + * [Bit 0] Enable PEBS on IA32_PMC0. + * + * @remarks 06_0FH + */ + uint64_t enable_pebs : 1; +#define IA32_PEBS_ENABLE_ENABLE_PEBS_BIT 0 +#define IA32_PEBS_ENABLE_ENABLE_PEBS_FLAG 0x01 +#define IA32_PEBS_ENABLE_ENABLE_PEBS_MASK 0x01 +#define IA32_PEBS_ENABLE_ENABLE_PEBS(_) (((_) >> 0) & 0x01) + + /** + * [Bits 3:1] Reserved or model specific. + */ + uint64_t reservedormodelspecific1 : 3; +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC1_BIT 1 +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC1_FLAG 0x0E +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC1_MASK 0x07 +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC1(_) (((_) >> 1) & 0x07) + uint64_t reserved1 : 28; + + /** + * [Bits 35:32] Reserved or model specific. + */ + uint64_t reservedormodelspecific2 : 4; +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC2_BIT 32 +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC2_FLAG 0xF00000000 +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC2_MASK 0x0F +#define IA32_PEBS_ENABLE_RESERVEDORMODELSPECIFIC2(_) (((_) >> 32) & 0x0F) + uint64_t reserved2 : 28; + }; + + uint64_t flags; +} ia32_pebs_enable_register; + +/** + * @defgroup ia32_mc_ctl \ + * IA32_MC(i)_CTL + * + * IA32_MC(0-28)_CTL. + * + * @remarks If IA32_MCG_CAP.CNT > n + * @{ + */ +#define IA32_MC0_CTL 0x00000400 +#define IA32_MC1_CTL 0x00000404 +#define IA32_MC2_CTL 0x00000408 +#define IA32_MC3_CTL 0x0000040C +#define IA32_MC4_CTL 0x00000410 +#define IA32_MC5_CTL 0x00000414 +#define IA32_MC6_CTL 0x00000418 +#define IA32_MC7_CTL 0x0000041C +#define IA32_MC8_CTL 0x00000420 +#define IA32_MC9_CTL 0x00000424 +#define IA32_MC10_CTL 0x00000428 +#define IA32_MC11_CTL 0x0000042C +#define IA32_MC12_CTL 0x00000430 +#define IA32_MC13_CTL 0x00000434 +#define IA32_MC14_CTL 0x00000438 +#define IA32_MC15_CTL 0x0000043C +#define IA32_MC16_CTL 0x00000440 +#define IA32_MC17_CTL 0x00000444 +#define IA32_MC18_CTL 0x00000448 +#define IA32_MC19_CTL 0x0000044C +#define IA32_MC20_CTL 0x00000450 +#define IA32_MC21_CTL 0x00000454 +#define IA32_MC22_CTL 0x00000458 +#define IA32_MC23_CTL 0x0000045C +#define IA32_MC24_CTL 0x00000460 +#define IA32_MC25_CTL 0x00000464 +#define IA32_MC26_CTL 0x00000468 +#define IA32_MC27_CTL 0x0000046C +#define IA32_MC28_CTL 0x00000470 + /** + * @} + */ + + /** + * @defgroup ia32_mc_status \ + * IA32_MC(i)_STATUS + * + * IA32_MC(0-28)_STATUS. + * + * @remarks If IA32_MCG_CAP.CNT > n + * @{ + */ +#define IA32_MC0_STATUS 0x00000401 +#define IA32_MC1_STATUS 0x00000405 +#define IA32_MC2_STATUS 0x00000409 +#define IA32_MC3_STATUS 0x0000040D +#define IA32_MC4_STATUS 0x00000411 +#define IA32_MC5_STATUS 0x00000415 +#define IA32_MC6_STATUS 0x00000419 +#define IA32_MC7_STATUS 0x0000041D +#define IA32_MC8_STATUS 0x00000421 +#define IA32_MC9_STATUS 0x00000425 +#define IA32_MC10_STATUS 0x00000429 +#define IA32_MC11_STATUS 0x0000042D +#define IA32_MC12_STATUS 0x00000431 +#define IA32_MC13_STATUS 0x00000435 +#define IA32_MC14_STATUS 0x00000439 +#define IA32_MC15_STATUS 0x0000043D +#define IA32_MC16_STATUS 0x00000441 +#define IA32_MC17_STATUS 0x00000445 +#define IA32_MC18_STATUS 0x00000449 +#define IA32_MC19_STATUS 0x0000044D +#define IA32_MC20_STATUS 0x00000451 +#define IA32_MC21_STATUS 0x00000455 +#define IA32_MC22_STATUS 0x00000459 +#define IA32_MC23_STATUS 0x0000045D +#define IA32_MC24_STATUS 0x00000461 +#define IA32_MC25_STATUS 0x00000465 +#define IA32_MC26_STATUS 0x00000469 +#define IA32_MC27_STATUS 0x0000046D +#define IA32_MC28_STATUS 0x00000471 + /** + * @} + */ + + /** + * @defgroup ia32_mc_addr \ + * IA32_MC(i)_ADDR + * + * IA32_MC(0-28)_ADDR. + * + * @remarks If IA32_MCG_CAP.CNT > n + * @{ + */ +#define IA32_MC0_ADDR 0x00000402 +#define IA32_MC1_ADDR 0x00000406 +#define IA32_MC2_ADDR 0x0000040A +#define IA32_MC3_ADDR 0x0000040E +#define IA32_MC4_ADDR 0x00000412 +#define IA32_MC5_ADDR 0x00000416 +#define IA32_MC6_ADDR 0x0000041A +#define IA32_MC7_ADDR 0x0000041E +#define IA32_MC8_ADDR 0x00000422 +#define IA32_MC9_ADDR 0x00000426 +#define IA32_MC10_ADDR 0x0000042A +#define IA32_MC11_ADDR 0x0000042E +#define IA32_MC12_ADDR 0x00000432 +#define IA32_MC13_ADDR 0x00000436 +#define IA32_MC14_ADDR 0x0000043A +#define IA32_MC15_ADDR 0x0000043E +#define IA32_MC16_ADDR 0x00000442 +#define IA32_MC17_ADDR 0x00000446 +#define IA32_MC18_ADDR 0x0000044A +#define IA32_MC19_ADDR 0x0000044E +#define IA32_MC20_ADDR 0x00000452 +#define IA32_MC21_ADDR 0x00000456 +#define IA32_MC22_ADDR 0x0000045A +#define IA32_MC23_ADDR 0x0000045E +#define IA32_MC24_ADDR 0x00000462 +#define IA32_MC25_ADDR 0x00000466 +#define IA32_MC26_ADDR 0x0000046A +#define IA32_MC27_ADDR 0x0000046E +#define IA32_MC28_ADDR 0x00000472 + /** + * @} + */ + + /** + * @defgroup ia32_mc_misc \ + * IA32_MC(i)_MISC + * + * IA32_MC(0-28)_MISC. + * + * @remarks If IA32_MCG_CAP.CNT > n + * @{ + */ +#define IA32_MC0_MISC 0x00000403 +#define IA32_MC1_MISC 0x00000407 +#define IA32_MC2_MISC 0x0000040B +#define IA32_MC3_MISC 0x0000040F +#define IA32_MC4_MISC 0x00000413 +#define IA32_MC5_MISC 0x00000417 +#define IA32_MC6_MISC 0x0000041B +#define IA32_MC7_MISC 0x0000041F +#define IA32_MC8_MISC 0x00000423 +#define IA32_MC9_MISC 0x00000427 +#define IA32_MC10_MISC 0x0000042B +#define IA32_MC11_MISC 0x0000042F +#define IA32_MC12_MISC 0x00000433 +#define IA32_MC13_MISC 0x00000437 +#define IA32_MC14_MISC 0x0000043B +#define IA32_MC15_MISC 0x0000043F +#define IA32_MC16_MISC 0x00000443 +#define IA32_MC17_MISC 0x00000447 +#define IA32_MC18_MISC 0x0000044B +#define IA32_MC19_MISC 0x0000044F +#define IA32_MC20_MISC 0x00000453 +#define IA32_MC21_MISC 0x00000457 +#define IA32_MC22_MISC 0x0000045B +#define IA32_MC23_MISC 0x0000045F +#define IA32_MC24_MISC 0x00000463 +#define IA32_MC25_MISC 0x00000467 +#define IA32_MC26_MISC 0x0000046B +#define IA32_MC27_MISC 0x0000046F +#define IA32_MC28_MISC 0x00000473 + /** + * @} + */ + + + /** + * Reporting Register of Basic VMX Capabilities. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.1(BASIC VMX INFORMATION)] + * @see Vol3D[A.1(Basic VMX Information)] (reference) + */ +#define IA32_VMX_BASIC 0x00000480 +typedef union +{ + struct + { + /** + * @brief VMCS revision identifier used by the processor + * + * [Bits 30:0] 31-bit VMCS revision identifier used by the processor. Processors that use the same VMCS revision identifier + * use the same size for VMCS regions. + */ + uint64_t vmcs_revision_id : 31; +#define IA32_VMX_BASIC_VMCS_REVISION_ID_BIT 0 +#define IA32_VMX_BASIC_VMCS_REVISION_ID_FLAG 0x7FFFFFFF +#define IA32_VMX_BASIC_VMCS_REVISION_ID_MASK 0x7FFFFFFF +#define IA32_VMX_BASIC_VMCS_REVISION_ID(_) (((_) >> 0) & 0x7FFFFFFF) + + /** + * [Bit 31] Bit 31 is always 0. + */ + uint64_t must_be_zero : 1; +#define IA32_VMX_BASIC_MUST_BE_ZERO_BIT 31 +#define IA32_VMX_BASIC_MUST_BE_ZERO_FLAG 0x80000000 +#define IA32_VMX_BASIC_MUST_BE_ZERO_MASK 0x01 +#define IA32_VMX_BASIC_MUST_BE_ZERO(_) (((_) >> 31) & 0x01) + + /** + * @brief Size of the VMCS + * + * [Bits 44:32] Report the number of bytes that software should allocate for the VMXON region and any VMCS region. It is a + * value greater than 0 and at most 4096 (bit 44 is set if and only if bits 43:32 are clear). + */ + uint64_t vmcs_size_in_bytes : 13; +#define IA32_VMX_BASIC_VMCS_SIZE_IN_BYTES_BIT 32 +#define IA32_VMX_BASIC_VMCS_SIZE_IN_BYTES_FLAG 0x1FFF00000000 +#define IA32_VMX_BASIC_VMCS_SIZE_IN_BYTES_MASK 0x1FFF +#define IA32_VMX_BASIC_VMCS_SIZE_IN_BYTES(_) (((_) >> 32) & 0x1FFF) + uint64_t reserved1 : 3; + + /** + * @brief Width of physical address used for the VMCS + * - 0 -> limited to the available amount of physical RAM + * - 1 -> within the first 4 GB + * + * [Bit 48] Indicates the width of the physical addresses that may be used for the VMXON region, each VMCS, and data + * structures referenced by pointers in a VMCS (I/O bitmaps, virtual-APIC page, MSR areas for VMX transitions). If the bit + * is 0, these addresses are limited to the processor's physical-address width.2 If the bit is 1, these addresses are + * limited to 32 bits. This bit is always 0 for processors that support Intel 64 architecture. + */ + uint64_t vmcs_physical_address_width : 1; +#define IA32_VMX_BASIC_VMCS_PHYSICAL_ADDRESS_WIDTH_BIT 48 +#define IA32_VMX_BASIC_VMCS_PHYSICAL_ADDRESS_WIDTH_FLAG 0x1000000000000 +#define IA32_VMX_BASIC_VMCS_PHYSICAL_ADDRESS_WIDTH_MASK 0x01 +#define IA32_VMX_BASIC_VMCS_PHYSICAL_ADDRESS_WIDTH(_) (((_) >> 48) & 0x01) + + /** + * @brief Whether the processor supports the dual-monitor treatment of system-management interrupts and system-management + * code (always 1) + * + * [Bit 49] Read as 1, the logical processor supports the dual-monitor treatment of system-management interrupts and + * system-management mode. + * + * @see Vol3C[34.15(DUAL-MONITOR TREATMENT OF SMIs AND SMM)] + */ + uint64_t dual_monitor_support : 1; +#define IA32_VMX_BASIC_DUAL_MONITOR_SUPPORT_BIT 49 +#define IA32_VMX_BASIC_DUAL_MONITOR_SUPPORT_FLAG 0x2000000000000 +#define IA32_VMX_BASIC_DUAL_MONITOR_SUPPORT_MASK 0x01 +#define IA32_VMX_BASIC_DUAL_MONITOR_SUPPORT(_) (((_) >> 49) & 0x01) + + /** + * @brief Memory type that must be used for the VMCS + * + * [Bits 53:50] Report the memory type that should be used for the VMCS, for data structures referenced by pointers in the + * VMCS (I/O bitmaps, virtual-APIC page, MSR areas for VMX transitions), and for the MSEG header. If software needs to + * access these data structures (e.g., to modify the contents of the MSR bitmaps), it can configure the paging structures + * to map them into the linear-address space. If it does so, it should establish mappings that use the memory type reported + * bits 53:50 in this MSR. + * As of this writing, all processors that support VMX operation indicate the write-back type. + */ + uint64_t memory_type : 4; +#define IA32_VMX_BASIC_MEMORY_TYPE_BIT 50 +#define IA32_VMX_BASIC_MEMORY_TYPE_FLAG 0x3C000000000000 +#define IA32_VMX_BASIC_MEMORY_TYPE_MASK 0x0F +#define IA32_VMX_BASIC_MEMORY_TYPE(_) (((_) >> 50) & 0x0F) + + /** + * @brief Whether the processor provides additional information for exits due to INS/OUTS + * + * [Bit 54] When set to 1, the processor reports information in the VM-exit instruction-information field on VM exits due + * to execution of the INS and OUTS instructions. This reporting is done only if this bit is read as 1. + * + * @see Vol3C[27.2.4(Information for VM Exits Due to Instruction Execution)] + */ + uint64_t ins_outs_reporting : 1; +#define IA32_VMX_BASIC_INS_OUTS_REPORTING_BIT 54 +#define IA32_VMX_BASIC_INS_OUTS_REPORTING_FLAG 0x40000000000000 +#define IA32_VMX_BASIC_INS_OUTS_REPORTING_MASK 0x01 +#define IA32_VMX_BASIC_INS_OUTS_REPORTING(_) (((_) >> 54) & 0x01) + + /** + * @brief Whether default 1 bits in control MSRs (pin/proc/exit/entry) may be cleared to 0 and that 'true' control MSRs are + * supported + * + * [Bit 55] Is read as 1 if any VMX controls that default to 1 may be cleared to 0. It also reports support for the VMX + * capability MSRs IA32_VMX_TRUE_PINBASED_CTLS, IA32_VMX_TRUE_PROCBASED_CTLS, IA32_VMX_TRUE_EXIT_CTLS, and + * IA32_VMX_TRUE_ENTRY_CTLS. + * + * @see Vol3D[A.2(RESERVED CONTROLS AND DEFAULT SETTINGS)] + * @see Vol3D[A.3.1(Pin-Based VM-Execution Controls)] + * @see Vol3D[A.3.2(Primary Processor-Based VM-Execution Controls)] + * @see Vol3D[A.4(VM-EXIT CONTROLS)] + * @see Vol3D[A.5(VM-ENTRY CONTROLS)] + */ + uint64_t vmx_controls : 1; +#define IA32_VMX_BASIC_VMX_CONTROLS_BIT 55 +#define IA32_VMX_BASIC_VMX_CONTROLS_FLAG 0x80000000000000 +#define IA32_VMX_BASIC_VMX_CONTROLS_MASK 0x01 +#define IA32_VMX_BASIC_VMX_CONTROLS(_) (((_) >> 55) & 0x01) + uint64_t reserved2 : 8; + }; + + uint64_t flags; +} ia32_vmx_basic_register; + + +/** + * Capability Reporting Register of Pin-Based VM-Execution Controls. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.3.1(Pin-Based VM-Execution Controls)] + * @see Vol3C[24.6.1(Pin-Based VM-Execution Controls)] (reference) + */ +#define IA32_VMX_PINBASED_CTLS 0x00000481 +typedef union +{ + struct + { + /** + * @brief External interrupts cause VM-exits if set; otherwise dispatched through the guest's IDT + * + * [Bit 0] If this control is 1, external interrupts cause VM exits. Otherwise, they are delivered normally through the + * guest interrupt-descriptor table (IDT). If this control is 1, the value of RFLAGS.IF does not affect interrupt blocking. + */ + uint64_t external_interrupt_exiting : 1; +#define IA32_VMX_PINBASED_CTLS_EXTERNAL_INTERRUPT_EXITING_BIT 0 +#define IA32_VMX_PINBASED_CTLS_EXTERNAL_INTERRUPT_EXITING_FLAG 0x01 +#define IA32_VMX_PINBASED_CTLS_EXTERNAL_INTERRUPT_EXITING_MASK 0x01 +#define IA32_VMX_PINBASED_CTLS_EXTERNAL_INTERRUPT_EXITING(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 2; + + /** + * @brief Non-maskable interrupts cause VM-exits if set; otherwise dispatched through the guest's IDT + * + * [Bit 3] If this control is 1, non-maskable interrupts (NMIs) cause VM exits. Otherwise, they are delivered normally + * using descriptor 2 of the IDT. This control also determines interactions between IRET and blocking by NMI. + * + * @see Vol3C[25.3(CHANGES TO INSTRUCTION BEHAVIOR IN VMX NON-ROOT OPERATION)] + */ + uint64_t nmi_exiting : 1; +#define IA32_VMX_PINBASED_CTLS_NMI_EXITING_BIT 3 +#define IA32_VMX_PINBASED_CTLS_NMI_EXITING_FLAG 0x08 +#define IA32_VMX_PINBASED_CTLS_NMI_EXITING_MASK 0x01 +#define IA32_VMX_PINBASED_CTLS_NMI_EXITING(_) (((_) >> 3) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief Virtual NMIs + * + * [Bit 5] If this control is 1, NMIs are never blocked and the "blocking by NMI" bit (bit 3) in the interruptibility-state + * field indicates "virtual-NMI blocking". This control also interacts with the "NMI-window exiting" VM-execution control. + * + * @see Vol3C[24.6.2(Processor-Based VM-Execution Controls)] + */ + uint64_t virtual_nmi : 1; +#define IA32_VMX_PINBASED_CTLS_VIRTUAL_NMI_BIT 5 +#define IA32_VMX_PINBASED_CTLS_VIRTUAL_NMI_FLAG 0x20 +#define IA32_VMX_PINBASED_CTLS_VIRTUAL_NMI_MASK 0x01 +#define IA32_VMX_PINBASED_CTLS_VIRTUAL_NMI(_) (((_) >> 5) & 0x01) + + /** + * @brief Activate VMX preemption timer + * + * [Bit 6] If this control is 1, the VMX-preemption timer counts down in VMX non-root operation. A VM exit occurs when the + * timer counts down to zero. + * + * @see Vol3C[25.5.1(VMX-Preemption Timer)] + * @see Vol3C[25.2(OTHER CAUSES OF VM EXITS)] + */ + uint64_t activate_vmx_preemption_timer : 1; +#define IA32_VMX_PINBASED_CTLS_ACTIVATE_VMX_PREEMPTION_TIMER_BIT 6 +#define IA32_VMX_PINBASED_CTLS_ACTIVATE_VMX_PREEMPTION_TIMER_FLAG 0x40 +#define IA32_VMX_PINBASED_CTLS_ACTIVATE_VMX_PREEMPTION_TIMER_MASK 0x01 +#define IA32_VMX_PINBASED_CTLS_ACTIVATE_VMX_PREEMPTION_TIMER(_) (((_) >> 6) & 0x01) + + /** + * @brief Process interrupts with the posted-interrupt notification vector + * + * [Bit 7] If this control is 1, the processor treats interrupts with the posted-interrupt notification vector specially, + * updating the virtual-APIC page with posted-interrupt requests. + * + * @see Vol3C[24.6.8(Controls for APIC Virtualization)] + * @see Vol3C[29.6(POSTED-INTERRUPT PROCESSING)] + */ + uint64_t process_posted_interrupts : 1; +#define IA32_VMX_PINBASED_CTLS_PROCESS_POSTED_INTERRUPTS_BIT 7 +#define IA32_VMX_PINBASED_CTLS_PROCESS_POSTED_INTERRUPTS_FLAG 0x80 +#define IA32_VMX_PINBASED_CTLS_PROCESS_POSTED_INTERRUPTS_MASK 0x01 +#define IA32_VMX_PINBASED_CTLS_PROCESS_POSTED_INTERRUPTS(_) (((_) >> 7) & 0x01) + uint64_t reserved3 : 56; + }; + + uint64_t flags; +} ia32_vmx_pinbased_ctls_register; + + +/** + * Capability Reporting Register of Primary Processor-Based VM-Execution Controls. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.3.2(Primary Processor-Based VM-Execution Controls)] + * @see Vol3C[24.6.2(Processor-Based VM-Execution Controls)] (reference) + */ +#define IA32_VMX_PROCBASED_CTLS 0x00000482 +typedef union +{ + struct + { + uint64_t reserved1 : 2; + + /** + * @brief VM-exit as soon as RFLAGS.IF=1 and no blocking is active + * + * [Bit 2] If this control is 1, a VM exit occurs at the beginning of any instruction if RFLAGS.IF = 1 and there are no + * other blocking of interrupts. + * + * @see Vol3C[24.4.2(Guest Non-Register State)] + */ + uint64_t interrupt_window_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_INTERRUPT_WINDOW_EXITING_BIT 2 +#define IA32_VMX_PROCBASED_CTLS_INTERRUPT_WINDOW_EXITING_FLAG 0x04 +#define IA32_VMX_PROCBASED_CTLS_INTERRUPT_WINDOW_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_INTERRUPT_WINDOW_EXITING(_) (((_) >> 2) & 0x01) + + /** + * @brief Use timestamp counter offset + * + * [Bit 3] This control determines whether executions of RDTSC, executions of RDTSCP, and executions of RDMSR that read + * from the IA32_TIME_STAMP_COUNTER MSR return a value modified by the TSC offset field. + * + * @see Vol3C[24.6.5(Time-Stamp Counter Offset and Multiplier)] + * @see Vol3C[25.3(CHANGES TO INSTRUCTION BEHAVIOR IN VMX NON-ROOT OPERATION)] + */ + uint64_t use_tsc_offsetting : 1; +#define IA32_VMX_PROCBASED_CTLS_USE_TSC_OFFSETTING_BIT 3 +#define IA32_VMX_PROCBASED_CTLS_USE_TSC_OFFSETTING_FLAG 0x08 +#define IA32_VMX_PROCBASED_CTLS_USE_TSC_OFFSETTING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_USE_TSC_OFFSETTING(_) (((_) >> 3) & 0x01) + uint64_t reserved2 : 3; + + /** + * @brief VM-exit when executing the HLT instruction + * + * [Bit 7] This control determines whether executions of HLT cause VM exits. + */ + uint64_t hlt_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_HLT_EXITING_BIT 7 +#define IA32_VMX_PROCBASED_CTLS_HLT_EXITING_FLAG 0x80 +#define IA32_VMX_PROCBASED_CTLS_HLT_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_HLT_EXITING(_) (((_) >> 7) & 0x01) + uint64_t reserved3 : 1; + + /** + * @brief VM-exit when executing the INVLPG instruction + * + * [Bit 9] This control determines whether executions of INVLPG cause VM exits. + */ + uint64_t invlpg_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_INVLPG_EXITING_BIT 9 +#define IA32_VMX_PROCBASED_CTLS_INVLPG_EXITING_FLAG 0x200 +#define IA32_VMX_PROCBASED_CTLS_INVLPG_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_INVLPG_EXITING(_) (((_) >> 9) & 0x01) + + /** + * @brief VM-exit when executing the MWAIT instruction + * + * [Bit 10] This control determines whether executions of MWAIT cause VM exits. + */ + uint64_t mwait_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_MWAIT_EXITING_BIT 10 +#define IA32_VMX_PROCBASED_CTLS_MWAIT_EXITING_FLAG 0x400 +#define IA32_VMX_PROCBASED_CTLS_MWAIT_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_MWAIT_EXITING(_) (((_) >> 10) & 0x01) + + /** + * @brief VM-exit when executing the RDPMC instruction + * + * [Bit 11] This control determines whether executions of RDPMC cause VM exits. + */ + uint64_t rdpmc_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_RDPMC_EXITING_BIT 11 +#define IA32_VMX_PROCBASED_CTLS_RDPMC_EXITING_FLAG 0x800 +#define IA32_VMX_PROCBASED_CTLS_RDPMC_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_RDPMC_EXITING(_) (((_) >> 11) & 0x01) + + /** + * @brief VM-exit when executing the RDTSC/RDTSCP instruction + * + * [Bit 12] This control determines whether executions of RDTSC and RDTSCP cause VM exits. + */ + uint64_t rdtsc_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_RDTSC_EXITING_BIT 12 +#define IA32_VMX_PROCBASED_CTLS_RDTSC_EXITING_FLAG 0x1000 +#define IA32_VMX_PROCBASED_CTLS_RDTSC_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_RDTSC_EXITING(_) (((_) >> 12) & 0x01) + uint64_t reserved4 : 2; + + /** + * @brief VM-exit when executing the MOV to CR3 instruction (forced to 1 on the 'first' VT-x capable CPUs; this actually + * includes the newest Nehalem CPUs) + * + * [Bit 15] In conjunction with the CR3-target controls, this control determines whether executions of MOV to CR3 cause VM + * exits. The first processors to support the virtual-machine extensions supported only the 1-setting of this control. + * + * @see Vol3C[24.6.7(CR3-Target Controls)] + * @see Vol3C[25.1.3(Instructions That Cause VM Exits Conditionally)] + */ + uint64_t cr3_load_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_CR3_LOAD_EXITING_BIT 15 +#define IA32_VMX_PROCBASED_CTLS_CR3_LOAD_EXITING_FLAG 0x8000 +#define IA32_VMX_PROCBASED_CTLS_CR3_LOAD_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_CR3_LOAD_EXITING(_) (((_) >> 15) & 0x01) + + /** + * @brief VM-exit when executing the MOV from CR3 instruction (forced to 1 on the 'first' VT-x capable CPUs; this actually + * includes the newest Nehalem CPUs) + * + * [Bit 16] This control determines whether executions of MOV from CR3 cause VM exits. The first processors to support the + * virtual-machine extensions supported only the 1-setting of this control. + */ + uint64_t cr3_store_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_CR3_STORE_EXITING_BIT 16 +#define IA32_VMX_PROCBASED_CTLS_CR3_STORE_EXITING_FLAG 0x10000 +#define IA32_VMX_PROCBASED_CTLS_CR3_STORE_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_CR3_STORE_EXITING(_) (((_) >> 16) & 0x01) + uint64_t reserved5 : 2; + + /** + * @brief VM-exit on CR8 loads + * + * [Bit 19] This control determines whether executions of MOV to CR8 cause VM exits. + */ + uint64_t cr8_load_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_CR8_LOAD_EXITING_BIT 19 +#define IA32_VMX_PROCBASED_CTLS_CR8_LOAD_EXITING_FLAG 0x80000 +#define IA32_VMX_PROCBASED_CTLS_CR8_LOAD_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_CR8_LOAD_EXITING(_) (((_) >> 19) & 0x01) + + /** + * @brief VM-exit on CR8 stores + * + * [Bit 20] This control determines whether executions of MOV from CR8 cause VM exits. + */ + uint64_t cr8_store_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_CR8_STORE_EXITING_BIT 20 +#define IA32_VMX_PROCBASED_CTLS_CR8_STORE_EXITING_FLAG 0x100000 +#define IA32_VMX_PROCBASED_CTLS_CR8_STORE_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_CR8_STORE_EXITING(_) (((_) >> 20) & 0x01) + + /** + * @brief Use TPR shadow + * + * [Bit 21] Setting this control to 1 enables TPR virtualization and other APIC-virtualization features. + * + * @see Vol3C[29(APIC VIRTUALIZATION AND VIRTUAL INTERRUPTS)] + */ + uint64_t use_tpr_shadow : 1; +#define IA32_VMX_PROCBASED_CTLS_USE_TPR_SHADOW_BIT 21 +#define IA32_VMX_PROCBASED_CTLS_USE_TPR_SHADOW_FLAG 0x200000 +#define IA32_VMX_PROCBASED_CTLS_USE_TPR_SHADOW_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_USE_TPR_SHADOW(_) (((_) >> 21) & 0x01) + + /** + * @brief VM-exit when virtual NMI blocking is disabled + * + * [Bit 22] If this control is 1, a VM exit occurs at the beginning of any instruction if there is no virtual-NMI blocking. + * + * @see Vol3C[24.4.2(Guest Non-Register State)] + */ + uint64_t nmi_window_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_NMI_WINDOW_EXITING_BIT 22 +#define IA32_VMX_PROCBASED_CTLS_NMI_WINDOW_EXITING_FLAG 0x400000 +#define IA32_VMX_PROCBASED_CTLS_NMI_WINDOW_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_NMI_WINDOW_EXITING(_) (((_) >> 22) & 0x01) + + /** + * @brief VM-exit when executing a MOV DRx instruction + * + * [Bit 23] This control determines whether executions of MOV DR cause VM exits. + */ + uint64_t mov_dr_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_MOV_DR_EXITING_BIT 23 +#define IA32_VMX_PROCBASED_CTLS_MOV_DR_EXITING_FLAG 0x800000 +#define IA32_VMX_PROCBASED_CTLS_MOV_DR_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_MOV_DR_EXITING(_) (((_) >> 23) & 0x01) + + /** + * @brief VM-exit when executing IO instructions + * + * [Bit 24] This control determines whether executions of I/O instructions (IN, INS/INSB/INSW/INSD, OUT, and + * OUTS/OUTSB/OUTSW/OUTSD) cause VM exits. + */ + uint64_t unconditional_io_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_UNCONDITIONAL_IO_EXITING_BIT 24 +#define IA32_VMX_PROCBASED_CTLS_UNCONDITIONAL_IO_EXITING_FLAG 0x1000000 +#define IA32_VMX_PROCBASED_CTLS_UNCONDITIONAL_IO_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_UNCONDITIONAL_IO_EXITING(_) (((_) >> 24) & 0x01) + + /** + * @brief Use IO bitmaps + * + * [Bit 25] This control determines whether I/O bitmaps are used to restrict executions of I/O instructions For this + * control, "0" means "do not use I/O bitmaps" and "1" means "use I/O bitmaps." If the I/O bitmaps are used, the setting of + * the "unconditional I/O exiting" control is ignored. + * + * @see Vol3C[24.6.4(I/O-Bitmap Addresses)] + * @see Vol3C[25.1.3(Instructions That Cause VM Exits Conditionally)] + */ + uint64_t use_io_bitmaps : 1; +#define IA32_VMX_PROCBASED_CTLS_USE_IO_BITMAPS_BIT 25 +#define IA32_VMX_PROCBASED_CTLS_USE_IO_BITMAPS_FLAG 0x2000000 +#define IA32_VMX_PROCBASED_CTLS_USE_IO_BITMAPS_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_USE_IO_BITMAPS(_) (((_) >> 25) & 0x01) + uint64_t reserved6 : 1; + + /** + * @brief Monitor trap flag + * + * [Bit 27] If this control is 1, the monitor trap flag debugging feature is enabled. + * + * @see Vol3C[25.5.2(Monitor Trap Flag)] + */ + uint64_t monitor_trap_flag : 1; +#define IA32_VMX_PROCBASED_CTLS_MONITOR_TRAP_FLAG_BIT 27 +#define IA32_VMX_PROCBASED_CTLS_MONITOR_TRAP_FLAG_FLAG 0x8000000 +#define IA32_VMX_PROCBASED_CTLS_MONITOR_TRAP_FLAG_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_MONITOR_TRAP_FLAG(_) (((_) >> 27) & 0x01) + + /** + * @brief Use MSR bitmaps + * + * [Bit 28] This control determines whether MSR bitmaps are used to control execution of the RDMSR and WRMSR instructions. + * For this control, "0" means "do not use MSR bitmaps" and "1" means "use MSR bitmaps." If the MSR bitmaps are not used, + * all executions of the RDMSR and WRMSR instructions cause VM exits. + * + * @see Vol3C[24.6.9(MSR-Bitmap Address)] + * @see Vol3C[25.1.3(Instructions That Cause VM Exits Conditionally)] + */ + uint64_t use_msr_bitmaps : 1; +#define IA32_VMX_PROCBASED_CTLS_USE_MSR_BITMAPS_BIT 28 +#define IA32_VMX_PROCBASED_CTLS_USE_MSR_BITMAPS_FLAG 0x10000000 +#define IA32_VMX_PROCBASED_CTLS_USE_MSR_BITMAPS_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_USE_MSR_BITMAPS(_) (((_) >> 28) & 0x01) + + /** + * @brief VM-exit when executing the MONITOR instruction + * + * [Bit 29] This control determines whether executions of MONITOR cause VM exits. + */ + uint64_t monitor_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_MONITOR_EXITING_BIT 29 +#define IA32_VMX_PROCBASED_CTLS_MONITOR_EXITING_FLAG 0x20000000 +#define IA32_VMX_PROCBASED_CTLS_MONITOR_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_MONITOR_EXITING(_) (((_) >> 29) & 0x01) + + /** + * @brief VM-exit when executing the PAUSE instruction + * + * [Bit 30] This control determines whether executions of PAUSE cause VM exits. + */ + uint64_t pause_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS_PAUSE_EXITING_BIT 30 +#define IA32_VMX_PROCBASED_CTLS_PAUSE_EXITING_FLAG 0x40000000 +#define IA32_VMX_PROCBASED_CTLS_PAUSE_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_PAUSE_EXITING(_) (((_) >> 30) & 0x01) + + /** + * @brief Determines whether the secondary processor based VM-execution controls are used + * + * [Bit 31] This control determines whether the secondary processor-based VM-execution controls are used. If this control + * is 0, the logical processor operates as if all the secondary processor-based VM-execution controls were also 0. + */ + uint64_t activate_secondary_controls : 1; +#define IA32_VMX_PROCBASED_CTLS_ACTIVATE_SECONDARY_CONTROLS_BIT 31 +#define IA32_VMX_PROCBASED_CTLS_ACTIVATE_SECONDARY_CONTROLS_FLAG 0x80000000 +#define IA32_VMX_PROCBASED_CTLS_ACTIVATE_SECONDARY_CONTROLS_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS_ACTIVATE_SECONDARY_CONTROLS(_) (((_) >> 31) & 0x01) + uint64_t reserved7 : 32; + }; + + uint64_t flags; +} ia32_vmx_procbased_ctls_register; + + +/** + * Capability Reporting Register of VM-Exit Controls. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.4(VM-EXIT CONTROLS)] + * @see Vol3C[24.7.1(VM-Exit Controls)] (reference) + */ +#define IA32_VMX_EXIT_CTLS 0x00000483 +typedef union +{ + struct + { + uint64_t reserved1 : 2; + + /** + * @brief Save guest debug controls (dr7 & IA32_DEBUGCTL_MSR) (forced to 1 on the 'first' VT-x capable CPUs; this actually + * includes the newest Nehalem CPUs) + * + * [Bit 2] This control determines whether DR7 and the IA32_DEBUGCTL MSR are saved on VM exit. The first processors to + * support the virtual-machine extensions supported only the 1-setting of this control. + */ + uint64_t save_debug_controls : 1; +#define IA32_VMX_EXIT_CTLS_SAVE_DEBUG_CONTROLS_BIT 2 +#define IA32_VMX_EXIT_CTLS_SAVE_DEBUG_CONTROLS_FLAG 0x04 +#define IA32_VMX_EXIT_CTLS_SAVE_DEBUG_CONTROLS_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_SAVE_DEBUG_CONTROLS(_) (((_) >> 2) & 0x01) + uint64_t reserved2 : 6; + + /** + * @brief Return to long mode after a VM-exit + * + * [Bit 9] On processors that support Intel 64 architecture, this control determines whether a logical processor is in + * 64-bit mode after the next VM exit. Its value is loaded into CS.L, IA32_EFER.LME, and IA32_EFER.LMA on every VM exit.1 + * This control must be 0 on processors that do not support Intel 64 architecture. + */ + uint64_t host_address_space_size : 1; +#define IA32_VMX_EXIT_CTLS_HOST_ADDRESS_SPACE_SIZE_BIT 9 +#define IA32_VMX_EXIT_CTLS_HOST_ADDRESS_SPACE_SIZE_FLAG 0x200 +#define IA32_VMX_EXIT_CTLS_HOST_ADDRESS_SPACE_SIZE_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_HOST_ADDRESS_SPACE_SIZE(_) (((_) >> 9) & 0x01) + uint64_t reserved3 : 2; + + /** + * @brief Whether the IA32_PERF_GLOBAL_CTRL MSR is loaded on VM-exit + * + * [Bit 12] This control determines whether the IA32_PERF_GLOBAL_CTRL MSR is loaded on VM exit. + */ + uint64_t load_ia32_perf_global_ctrl : 1; +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL_BIT 12 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL_FLAG 0x1000 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL(_) (((_) >> 12) & 0x01) + uint64_t reserved4 : 2; + + /** + * @brief Acknowledge external interrupts with the irq controller if one caused a VM-exit + * + * [Bit 15] This control affects VM exits due to external interrupts: + * - If such a VM exit occurs and this control is 1, the logical processor acknowledges the interrupt controller, acquiring + * the interrupt's vector. The vector is stored in the VM-exit interruption-information field, which is marked valid. + * - If such a VM exit occurs and this control is 0, the interrupt is not acknowledged and the VM-exit + * interruption-information field is marked invalid. + */ + uint64_t acknowledge_interrupt_on_exit : 1; +#define IA32_VMX_EXIT_CTLS_ACKNOWLEDGE_INTERRUPT_ON_EXIT_BIT 15 +#define IA32_VMX_EXIT_CTLS_ACKNOWLEDGE_INTERRUPT_ON_EXIT_FLAG 0x8000 +#define IA32_VMX_EXIT_CTLS_ACKNOWLEDGE_INTERRUPT_ON_EXIT_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_ACKNOWLEDGE_INTERRUPT_ON_EXIT(_) (((_) >> 15) & 0x01) + uint64_t reserved5 : 2; + + /** + * @brief Whether the guest IA32_PAT MSR is saved on VM-exit + * + * [Bit 18] This control determines whether the IA32_PAT MSR is saved on VM exit. + */ + uint64_t save_ia32_pat : 1; +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_PAT_BIT 18 +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_PAT_FLAG 0x40000 +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_PAT_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_PAT(_) (((_) >> 18) & 0x01) + + /** + * @brief Whether the host IA32_PAT MSR is loaded on VM-exit + * + * [Bit 19] This control determines whether the IA32_PAT MSR is loaded on VM exit. + */ + uint64_t load_ia32_pat : 1; +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PAT_BIT 19 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PAT_FLAG 0x80000 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PAT_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_PAT(_) (((_) >> 19) & 0x01) + + /** + * @brief Whether the guest IA32_EFER MSR is saved on VM-exit + * + * [Bit 20] This control determines whether the IA32_EFER MSR is saved on VM exit. + */ + uint64_t save_ia32_efer : 1; +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_EFER_BIT 20 +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_EFER_FLAG 0x100000 +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_EFER_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_SAVE_IA32_EFER(_) (((_) >> 20) & 0x01) + + /** + * @brief Whether the host IA32_EFER MSR is loaded on VM-exit + * + * [Bit 21] This control determines whether the IA32_EFER MSR is loaded on VM exit. + */ + uint64_t load_ia32_efer : 1; +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_EFER_BIT 21 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_EFER_FLAG 0x200000 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_EFER_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_LOAD_IA32_EFER(_) (((_) >> 21) & 0x01) + + /** + * @brief Whether the value of the VMX preemption timer is saved on every VM-exit + * + * [Bit 22] This control determines whether the value of the VMX-preemption timer is saved on VM exit. + */ + uint64_t save_vmx_preemption_timer_value : 1; +#define IA32_VMX_EXIT_CTLS_SAVE_VMX_PREEMPTION_TIMER_VALUE_BIT 22 +#define IA32_VMX_EXIT_CTLS_SAVE_VMX_PREEMPTION_TIMER_VALUE_FLAG 0x400000 +#define IA32_VMX_EXIT_CTLS_SAVE_VMX_PREEMPTION_TIMER_VALUE_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_SAVE_VMX_PREEMPTION_TIMER_VALUE(_) (((_) >> 22) & 0x01) + + /** + * [Bit 23] This control determines whether the IA32_BNDCFGS MSR is cleared on VM exit. + */ + uint64_t clear_ia32_bndcfgs : 1; +#define IA32_VMX_EXIT_CTLS_CLEAR_IA32_BNDCFGS_BIT 23 +#define IA32_VMX_EXIT_CTLS_CLEAR_IA32_BNDCFGS_FLAG 0x800000 +#define IA32_VMX_EXIT_CTLS_CLEAR_IA32_BNDCFGS_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_CLEAR_IA32_BNDCFGS(_) (((_) >> 23) & 0x01) + + /** + * [Bit 24] If this control is 1, Intel Processor Trace does not produce a paging information packet (PIP) on a VM exit or + * a VMCS packet on an SMM VM exit. + * + * @see Vol3C[35(INTEL(R) PROCESSOR TRACE)] + */ + uint64_t conceal_vmx_from_pt : 1; +#define IA32_VMX_EXIT_CTLS_CONCEAL_VMX_FROM_PT_BIT 24 +#define IA32_VMX_EXIT_CTLS_CONCEAL_VMX_FROM_PT_FLAG 0x1000000 +#define IA32_VMX_EXIT_CTLS_CONCEAL_VMX_FROM_PT_MASK 0x01 +#define IA32_VMX_EXIT_CTLS_CONCEAL_VMX_FROM_PT(_) (((_) >> 24) & 0x01) + uint64_t reserved6 : 39; + }; + + uint64_t flags; +} ia32_vmx_exit_ctls_register; + + +/** + * Capability Reporting Register of VM-Entry Controls. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.5(VM-ENTRY CONTROLS)] + * @see Vol3D[24.8.1(VM-Entry Controls)] (reference) + */ +#define IA32_VMX_ENTRY_CTLS 0x00000484 +typedef union +{ + struct + { + uint64_t reserved1 : 2; + + /** + * @brief Load guest debug controls (dr7 & IA32_DEBUGCTL_MSR) (forced to 1 on the 'first' VT-x capable CPUs; this actually + * includes the newest Nehalem CPUs) + * + * [Bit 2] This control determines whether DR7 and the IA32_DEBUGCTL MSR are loaded on VM entry. The first processors to + * support the virtual-machine extensions supported only the 1-setting of this control. + */ + uint64_t load_debug_controls : 1; +#define IA32_VMX_ENTRY_CTLS_LOAD_DEBUG_CONTROLS_BIT 2 +#define IA32_VMX_ENTRY_CTLS_LOAD_DEBUG_CONTROLS_FLAG 0x04 +#define IA32_VMX_ENTRY_CTLS_LOAD_DEBUG_CONTROLS_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_LOAD_DEBUG_CONTROLS(_) (((_) >> 2) & 0x01) + uint64_t reserved2 : 6; + + /** + * @brief 64 bits guest mode. Must be 0 for CPUs that don't support AMD64 + * + * [Bit 9] On processors that support Intel 64 architecture, this control determines whether the logical processor is in + * IA-32e mode after VM entry. Its value is loaded into IA32_EFER.LMA as part of VM entry. This control must be 0 on + * processors that do not support Intel 64 architecture. + */ + uint64_t ia32e_mode_guest : 1; +#define IA32_VMX_ENTRY_CTLS_IA32E_MODE_GUEST_BIT 9 +#define IA32_VMX_ENTRY_CTLS_IA32E_MODE_GUEST_FLAG 0x200 +#define IA32_VMX_ENTRY_CTLS_IA32E_MODE_GUEST_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_IA32E_MODE_GUEST(_) (((_) >> 9) & 0x01) + + /** + * @brief In SMM mode after VM-entry + * + * [Bit 10] This control determines whether the logical processor is in system-management mode (SMM) after VM entry. This + * control must be 0 for any VM entry from outside SMM. + */ + uint64_t entry_to_smm : 1; +#define IA32_VMX_ENTRY_CTLS_ENTRY_TO_SMM_BIT 10 +#define IA32_VMX_ENTRY_CTLS_ENTRY_TO_SMM_FLAG 0x400 +#define IA32_VMX_ENTRY_CTLS_ENTRY_TO_SMM_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_ENTRY_TO_SMM(_) (((_) >> 10) & 0x01) + + /** + * @brief Disable dual treatment of SMI and SMM; must be zero for VM-entry outside of SMM + * + * [Bit 11] If set to 1, the default treatment of SMIs and SMM is in effect after the VM entry. This control must be 0 for + * any VM entry from outside SMM + * + * @see Vol3C[34.15.7(Deactivating the Dual-Monitor Treatment)] + */ + uint64_t deactivate_dual_monitor_treatment : 1; +#define IA32_VMX_ENTRY_CTLS_DEACTIVATE_DUAL_MONITOR_TREATMENT_BIT 11 +#define IA32_VMX_ENTRY_CTLS_DEACTIVATE_DUAL_MONITOR_TREATMENT_FLAG 0x800 +#define IA32_VMX_ENTRY_CTLS_DEACTIVATE_DUAL_MONITOR_TREATMENT_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_DEACTIVATE_DUAL_MONITOR_TREATMENT(_) (((_) >> 11) & 0x01) + uint64_t reserved3 : 1; + + /** + * @brief Whether the guest IA32_PERF_GLOBAL_CTRL MSR is loaded on VM-entry + * + * [Bit 13] This control determines whether the IA32_PERF_GLOBAL_CTRL MSR is loaded on VM entry. + */ + uint64_t load_ia32_perf_global_ctrl : 1; +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL_BIT 13 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL_FLAG 0x2000 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PERF_GLOBAL_CTRL(_) (((_) >> 13) & 0x01) + + /** + * @brief Whether the guest IA32_PAT MSR is loaded on VM-entry + * + * [Bit 14] This control determines whether the IA32_PAT MSR is loaded on VM entry. + */ + uint64_t load_ia32_pat : 1; +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PAT_BIT 14 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PAT_FLAG 0x4000 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PAT_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_PAT(_) (((_) >> 14) & 0x01) + + /** + * @brief Whether the guest IA32_EFER MSR is loaded on VM-entry + * + * [Bit 15] This control determines whether the IA32_EFER MSR is loaded on VM entry. + */ + uint64_t load_ia32_efer : 1; +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_EFER_BIT 15 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_EFER_FLAG 0x8000 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_EFER_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_EFER(_) (((_) >> 15) & 0x01) + + /** + * [Bit 16] This control determines whether the IA32_BNDCFGS MSR is loaded on VM entry. + */ + uint64_t load_ia32_bndcfgs : 1; +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_BNDCFGS_BIT 16 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_BNDCFGS_FLAG 0x10000 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_BNDCFGS_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_BNDCFGS(_) (((_) >> 16) & 0x01) + + /** + * [Bit 17] If this control is 1, Intel Processor Trace does not produce a paging information packet (PIP) on a VM entry or + * a VMCS packet on a VM entry that returns from SMM. + * + * @see Vol3C[35(INTEL(R) PROCESSOR TRACE)] + */ + uint64_t conceal_vmx_from_pt : 1; +#define IA32_VMX_ENTRY_CTLS_CONCEAL_VMX_FROM_PT_BIT 17 +#define IA32_VMX_ENTRY_CTLS_CONCEAL_VMX_FROM_PT_FLAG 0x20000 +#define IA32_VMX_ENTRY_CTLS_CONCEAL_VMX_FROM_PT_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_CONCEAL_VMX_FROM_PT(_) (((_) >> 17) & 0x01) + + /** + * [Bit 18] This control determines whether the IA32_RTIT_CTL MSR is loaded on VM entry. + */ + uint64_t load_ia32_rtit_ctl : 1; +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_RTIT_CTL_BIT 18 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_RTIT_CTL_FLAG 0x40000 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_RTIT_CTL_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_LOAD_IA32_RTIT_CTL(_) (((_) >> 18) & 0x01) + uint64_t reserved4 : 1; + + /** + * [Bit 20] This control determines whether CET-related MSRs and SPP are loaded on VM entry. + */ + uint64_t load_cet_state : 1; +#define IA32_VMX_ENTRY_CTLS_LOAD_CET_STATE_BIT 20 +#define IA32_VMX_ENTRY_CTLS_LOAD_CET_STATE_FLAG 0x100000 +#define IA32_VMX_ENTRY_CTLS_LOAD_CET_STATE_MASK 0x01 +#define IA32_VMX_ENTRY_CTLS_LOAD_CET_STATE(_) (((_) >> 20) & 0x01) + uint64_t reserved5 : 43; + }; + + uint64_t flags; +} ia32_vmx_entry_ctls_register; + + +/** + * Reporting Register of Miscellaneous VMX Capabilities. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.6(MISCELLANEOUS DATA)] + * @see Vol3D[A.6(Miscellaneous Data)] (reference) + */ +#define IA32_VMX_MISC 0x00000485 +typedef union +{ + struct + { + /** + * @brief Relationship between the preemption timer and tsc; count down every time bit x of the tsc changes + * + * [Bits 4:0] Report a value X that specifies the relationship between the rate of the VMX-preemption timer and that of the + * timestamp counter (TSC). Specifically, the VMX-preemption timer (if it is active) counts down by 1 every time bit X in + * the TSC changes due to a TSC increment. + */ + uint64_t preemption_timer_tsc_relationship : 5; +#define IA32_VMX_MISC_PREEMPTION_TIMER_TSC_RELATIONSHIP_BIT 0 +#define IA32_VMX_MISC_PREEMPTION_TIMER_TSC_RELATIONSHIP_FLAG 0x1F +#define IA32_VMX_MISC_PREEMPTION_TIMER_TSC_RELATIONSHIP_MASK 0x1F +#define IA32_VMX_MISC_PREEMPTION_TIMER_TSC_RELATIONSHIP(_) (((_) >> 0) & 0x1F) + + /** + * @brief Whether VM-exit stores EFER.LMA into the "IA32e mode guest" field + * + * [Bit 5] When set to 1, VM exits store the value of IA32_EFER.LMA into the "IA-32e mode guest" VM-entry control. This bit + * is read as 1 on any logical processor that supports the 1-setting of the "unrestricted guest" VM-execution control. + * + * @see Vol3C[27.2(RECORDING VM-EXIT INFORMATION AND UPDATING VM-ENTRY CONTROL FIELDS)] + */ + uint64_t store_efer_lma_on_vmexit : 1; +#define IA32_VMX_MISC_STORE_EFER_LMA_ON_VMEXIT_BIT 5 +#define IA32_VMX_MISC_STORE_EFER_LMA_ON_VMEXIT_FLAG 0x20 +#define IA32_VMX_MISC_STORE_EFER_LMA_ON_VMEXIT_MASK 0x01 +#define IA32_VMX_MISC_STORE_EFER_LMA_ON_VMEXIT(_) (((_) >> 5) & 0x01) + + /** + * @brief Activity states supported by the implementation + * + * [Bits 8:6] Report, as a bitmap, the activity states supported by the implementation: + * - Bit 6 reports (if set) the support for activity state 1 (HLT). + * - Bit 7 reports (if set) the support for activity state 2 (shutdown). + * - Bit 8 reports (if set) the support for activity state 3 (wait-for-SIPI). + * If an activity state is not supported, the implementation causes a VM entry to fail if it attempts to establish that + * activity state. All implementations support VM entry to activity state 0 (active). + */ + uint64_t activity_states : 3; +#define IA32_VMX_MISC_ACTIVITY_STATES_BIT 6 +#define IA32_VMX_MISC_ACTIVITY_STATES_FLAG 0x1C0 +#define IA32_VMX_MISC_ACTIVITY_STATES_MASK 0x07 +#define IA32_VMX_MISC_ACTIVITY_STATES(_) (((_) >> 6) & 0x07) + uint64_t reserved1 : 5; + + /** + * @brief Intel Processor Trace (Intel PT) can be used in VMX operation + * + * [Bit 14] When set to 1, Intel(R) Processor Trace (Intel PT) can be used in VMX operation. If the processor supports Intel + * PT but does not allow it to be used in VMX operation, execution of VMXON clears IA32_RTIT_CTL.TraceEn; any attempt to + * write IA32_RTIT_CTL while in VMX operation (including VMX root operation) causes a general-protection exception. + * + * @see Vol3C[30.3(VMX INSTRUCTIONS | VMXON-Enter VMX Operation)] + */ + uint64_t intel_pt_available_in_vmx : 1; +#define IA32_VMX_MISC_INTEL_PT_AVAILABLE_IN_VMX_BIT 14 +#define IA32_VMX_MISC_INTEL_PT_AVAILABLE_IN_VMX_FLAG 0x4000 +#define IA32_VMX_MISC_INTEL_PT_AVAILABLE_IN_VMX_MASK 0x01 +#define IA32_VMX_MISC_INTEL_PT_AVAILABLE_IN_VMX(_) (((_) >> 14) & 0x01) + + /** + * @brief Whether RDMSR can be used to read IA32_SMBASE_MSR in SMM + * + * [Bit 15] When set to 1, the RDMSR instruction can be used in system-management mode (SMM) to read the IA32_SMBASE MSR + * (MSR address 9EH). + * + * @see Vol3C[34.15.6.3(Saving Guest State)] + */ + uint64_t rdmsr_can_read_ia32_smbase_msr_in_smm : 1; +#define IA32_VMX_MISC_RDMSR_CAN_READ_IA32_SMBASE_MSR_IN_SMM_BIT 15 +#define IA32_VMX_MISC_RDMSR_CAN_READ_IA32_SMBASE_MSR_IN_SMM_FLAG 0x8000 +#define IA32_VMX_MISC_RDMSR_CAN_READ_IA32_SMBASE_MSR_IN_SMM_MASK 0x01 +#define IA32_VMX_MISC_RDMSR_CAN_READ_IA32_SMBASE_MSR_IN_SMM(_) (((_) >> 15) & 0x01) + + /** + * @brief Number of CR3 target values supported by the processor (0-256) + * + * [Bits 24:16] Indicate the number of CR3-target values supported by the processor. This number is a value between 0 and + * 256, inclusive (bit 24 is set if and only if bits 23:16 are clear). + */ + uint64_t cr3_target_count : 9; +#define IA32_VMX_MISC_CR3_TARGET_COUNT_BIT 16 +#define IA32_VMX_MISC_CR3_TARGET_COUNT_FLAG 0x1FF0000 +#define IA32_VMX_MISC_CR3_TARGET_COUNT_MASK 0x1FF +#define IA32_VMX_MISC_CR3_TARGET_COUNT(_) (((_) >> 16) & 0x1FF) + + /** + * @brief Maximum number of MSRs in the VMCS. (N+1)*512 + * + * [Bits 27:25] Used to compute the recommended maximum number of MSRs that should appear in the VM-exit MSR-store list, + * the VM-exit MSR-load list, or the VM-entry MSR-load list. Specifically, if the value bits 27:25 of IA32_VMX_MISC is N, + * then 512 * (N + 1) is the recommended maximum number of MSRs to be included in each list. If the limit is exceeded, + * undefined processor behavior may result (including a machine check during the VMX transition). + */ + uint64_t max_number_of_msr : 3; +#define IA32_VMX_MISC_MAX_NUMBER_OF_MSR_BIT 25 +#define IA32_VMX_MISC_MAX_NUMBER_OF_MSR_FLAG 0xE000000 +#define IA32_VMX_MISC_MAX_NUMBER_OF_MSR_MASK 0x07 +#define IA32_VMX_MISC_MAX_NUMBER_OF_MSR(_) (((_) >> 25) & 0x07) + + /** + * @brief Whether bit 2 of IA32_SMM_MONITOR_CTL can be set to 1 + * + * [Bit 28] When set to 1, bit 2 of the IA32_SMM_MONITOR_CTL can be set to 1. VMXOFF unblocks SMIs unless + * IA32_SMM_MONITOR_CTL[bit 2] is 1. + * + * @see Vol3C[34.14.4(VMXOFF and SMI Unblocking)] + */ + uint64_t smm_monitor_ctl_b2 : 1; +#define IA32_VMX_MISC_SMM_MONITOR_CTL_B2_BIT 28 +#define IA32_VMX_MISC_SMM_MONITOR_CTL_B2_FLAG 0x10000000 +#define IA32_VMX_MISC_SMM_MONITOR_CTL_B2_MASK 0x01 +#define IA32_VMX_MISC_SMM_MONITOR_CTL_B2(_) (((_) >> 28) & 0x01) + + /** + * @brief Whether VMWRITE can be used to write VM-exit information fields + * + * [Bit 29] When set to 1, software can use VMWRITE to write to any supported field in the VMCS; otherwise, VMWRITE cannot + * be used to modify VM-exit information fields. + */ + uint64_t vmwrite_vmexit_info : 1; +#define IA32_VMX_MISC_VMWRITE_VMEXIT_INFO_BIT 29 +#define IA32_VMX_MISC_VMWRITE_VMEXIT_INFO_FLAG 0x20000000 +#define IA32_VMX_MISC_VMWRITE_VMEXIT_INFO_MASK 0x01 +#define IA32_VMX_MISC_VMWRITE_VMEXIT_INFO(_) (((_) >> 29) & 0x01) + + /** + * [Bit 30] When set to 1, VM entry allows injection of a software interrupt, software exception, or privileged software + * exception with an instruction length of 0. + */ + uint64_t zero_length_instruction_vmentry_injection : 1; +#define IA32_VMX_MISC_ZERO_LENGTH_INSTRUCTION_VMENTRY_INJECTION_BIT 30 +#define IA32_VMX_MISC_ZERO_LENGTH_INSTRUCTION_VMENTRY_INJECTION_FLAG 0x40000000 +#define IA32_VMX_MISC_ZERO_LENGTH_INSTRUCTION_VMENTRY_INJECTION_MASK 0x01 +#define IA32_VMX_MISC_ZERO_LENGTH_INSTRUCTION_VMENTRY_INJECTION(_) (((_) >> 30) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief MSEG revision identifier used by the processor + * + * [Bits 63:32] Report the 32-bit MSEG revision identifier used by the processor. + */ + uint64_t mseg_id : 32; +#define IA32_VMX_MISC_MSEG_ID_BIT 32 +#define IA32_VMX_MISC_MSEG_ID_FLAG 0xFFFFFFFF00000000 +#define IA32_VMX_MISC_MSEG_ID_MASK 0xFFFFFFFF +#define IA32_VMX_MISC_MSEG_ID(_) (((_) >> 32) & 0xFFFFFFFF) + }; + + uint64_t flags; +} ia32_vmx_misc_register; + + +/** + * Capability Reporting Register of CR0 Bits Fixed to 0. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.7(VMX-FIXED BITS IN CR0)] + * @see Vol3D[A.7(VMX-Fixed Bits in CR0)] (reference) + */ +#define IA32_VMX_CR0_FIXED0 0x00000486 + + /** + * Capability Reporting Register of CR0 Bits Fixed to 1. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.7(VMX-FIXED BITS IN CR0)] + * @see Vol3D[A.7(VMX-Fixed Bits in CR0)] (reference) + */ +#define IA32_VMX_CR0_FIXED1 0x00000487 + + /** + * Capability Reporting Register of CR4 Bits Fixed to 0. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.8(VMX-FIXED BITS IN CR4)] + * @see Vol3D[A.8(VMX-Fixed Bits in CR4)] (reference) + */ +#define IA32_VMX_CR4_FIXED0 0x00000488 + + /** + * Capability Reporting Register of CR4 Bits Fixed to 1. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.8(VMX-FIXED BITS IN CR4)] + * @see Vol3D[A.8(VMX-Fixed Bits in CR4)] (reference) + */ +#define IA32_VMX_CR4_FIXED1 0x00000489 + + /** + * Capability Reporting Register of VMCS Field Enumeration. + * + * @remarks If CPUID.01H:ECX.[5] = 1 + * @see Vol3D[A.9(VMCS ENUMERATION)] + * @see Vol3D[A.9(VMCS Enumeration)] (reference) + */ +#define IA32_VMX_VMCS_ENUM 0x0000048A +typedef union +{ + struct + { + /** + * [Bit 0] Indicates access type. + */ + uint64_t access_type : 1; +#define IA32_VMX_VMCS_ENUM_ACCESS_TYPE_BIT 0 +#define IA32_VMX_VMCS_ENUM_ACCESS_TYPE_FLAG 0x01 +#define IA32_VMX_VMCS_ENUM_ACCESS_TYPE_MASK 0x01 +#define IA32_VMX_VMCS_ENUM_ACCESS_TYPE(_) (((_) >> 0) & 0x01) + + /** + * [Bits 9:1] Highest index value used for any VMCS encoding. + */ + uint64_t highest_index_value : 9; +#define IA32_VMX_VMCS_ENUM_HIGHEST_INDEX_VALUE_BIT 1 +#define IA32_VMX_VMCS_ENUM_HIGHEST_INDEX_VALUE_FLAG 0x3FE +#define IA32_VMX_VMCS_ENUM_HIGHEST_INDEX_VALUE_MASK 0x1FF +#define IA32_VMX_VMCS_ENUM_HIGHEST_INDEX_VALUE(_) (((_) >> 1) & 0x1FF) + + /** + * [Bits 11:10] Indicate the field's type. + */ + uint64_t field_type : 2; +#define IA32_VMX_VMCS_ENUM_FIELD_TYPE_BIT 10 +#define IA32_VMX_VMCS_ENUM_FIELD_TYPE_FLAG 0xC00 +#define IA32_VMX_VMCS_ENUM_FIELD_TYPE_MASK 0x03 +#define IA32_VMX_VMCS_ENUM_FIELD_TYPE(_) (((_) >> 10) & 0x03) + uint64_t reserved1 : 1; + + /** + * [Bits 14:13] Indicate the field's width. + */ + uint64_t field_width : 2; +#define IA32_VMX_VMCS_ENUM_FIELD_WIDTH_BIT 13 +#define IA32_VMX_VMCS_ENUM_FIELD_WIDTH_FLAG 0x6000 +#define IA32_VMX_VMCS_ENUM_FIELD_WIDTH_MASK 0x03 +#define IA32_VMX_VMCS_ENUM_FIELD_WIDTH(_) (((_) >> 13) & 0x03) + uint64_t reserved2 : 49; + }; + + uint64_t flags; +} ia32_vmx_vmcs_enum_register; + + +/** + * Capability Reporting Register of Secondary Processor-Based VM-Execution Controls. + * + * @remarks If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_CTLS[63] ) + * @see Vol3D[A.3.3(Secondary Processor-Based VM-Execution Controls)] + * @see Vol3D[24.6.2(Processor-Based VM-Execution Controls)] (reference) + */ +#define IA32_VMX_PROCBASED_CTLS2 0x0000048B +typedef union +{ + struct + { + /** + * @brief Virtualize APIC access + * + * [Bit 0] If this control is 1, the logical processor treats specially accesses to the page with the APICaccess address. + * + * @see Vol3C[29.4(VIRTUALIZING MEMORY-MAPPED APIC ACCESSES)] + */ + uint64_t virtualize_apic_accesses : 1; +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_APIC_ACCESSES_BIT 0 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_APIC_ACCESSES_FLAG 0x01 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_APIC_ACCESSES_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_APIC_ACCESSES(_) (((_) >> 0) & 0x01) + + /** + * @brief EPT supported/enabled + * + * [Bit 1] If this control is 1, extended page tables (EPT) are enabled. + * + * @see Vol3C[28.2(THE EXTENDED PAGE TABLE MECHANISM (EPT))] + */ + uint64_t enable_ept : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_EPT_BIT 1 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_EPT_FLAG 0x02 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_EPT_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_EPT(_) (((_) >> 1) & 0x01) + + /** + * @brief Descriptor table instructions cause VM-exits + * + * [Bit 2] This control determines whether executions of LGDT, LIDT, LLDT, LTR, SGDT, SIDT, SLDT, and STR cause VM exits. + */ + uint64_t descriptor_table_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS2_DESCRIPTOR_TABLE_EXITING_BIT 2 +#define IA32_VMX_PROCBASED_CTLS2_DESCRIPTOR_TABLE_EXITING_FLAG 0x04 +#define IA32_VMX_PROCBASED_CTLS2_DESCRIPTOR_TABLE_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_DESCRIPTOR_TABLE_EXITING(_) (((_) >> 2) & 0x01) + + /** + * @brief RDTSCP supported/enabled + * + * [Bit 3] If this control is 0, any execution of RDTSCP causes an invalid-opcode exception (\#UD). + */ + uint64_t enable_rdtscp : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_RDTSCP_BIT 3 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_RDTSCP_FLAG 0x08 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_RDTSCP_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_RDTSCP(_) (((_) >> 3) & 0x01) + + /** + * @brief Virtualize x2APIC mode + * + * [Bit 4] If this control is 1, the logical processor treats specially RDMSR and WRMSR to APIC MSRs (in the range + * 800H-8FFH). + * + * @see Vol3C[29.5(VIRTUALIZING MSR-BASED APIC ACCESSES)] + */ + uint64_t virtualize_x2apic_mode : 1; +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_X2APIC_MODE_BIT 4 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_X2APIC_MODE_FLAG 0x10 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_X2APIC_MODE_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUALIZE_X2APIC_MODE(_) (((_) >> 4) & 0x01) + + /** + * @brief VPID supported/enabled + * + * [Bit 5] If this control is 1, cached translations of linear addresses are associated with a virtualprocessor identifier + * (VPID). + * + * @see Vol3C[28.1(VIRTUAL PROCESSOR IDENTIFIERS (VPIDS))] + */ + uint64_t enable_vpid : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VPID_BIT 5 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VPID_FLAG 0x20 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VPID_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VPID(_) (((_) >> 5) & 0x01) + + /** + * @brief VM-exit when executing the WBINVD instruction + * + * [Bit 6] This control determines whether executions of WBINVD cause VM exits. + */ + uint64_t wbinvd_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS2_WBINVD_EXITING_BIT 6 +#define IA32_VMX_PROCBASED_CTLS2_WBINVD_EXITING_FLAG 0x40 +#define IA32_VMX_PROCBASED_CTLS2_WBINVD_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_WBINVD_EXITING(_) (((_) >> 6) & 0x01) + + /** + * @brief Unrestricted guest execution + * + * [Bit 7] This control determines whether guest software may run in unpaged protected mode or in realaddress mode. + */ + uint64_t unrestricted_guest : 1; +#define IA32_VMX_PROCBASED_CTLS2_UNRESTRICTED_GUEST_BIT 7 +#define IA32_VMX_PROCBASED_CTLS2_UNRESTRICTED_GUEST_FLAG 0x80 +#define IA32_VMX_PROCBASED_CTLS2_UNRESTRICTED_GUEST_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_UNRESTRICTED_GUEST(_) (((_) >> 7) & 0x01) + + /** + * @brief APIC register virtualization + * + * [Bit 8] If this control is 1, the logical processor virtualizes certain APIC accesses. + * + * @see Vol3C[29.4(VIRTUALIZING MEMORY-MAPPED APIC ACCESSES)] + * @see Vol3C[29.5(VIRTUALIZING MSR-BASED APIC ACCESSES)] + */ + uint64_t apic_register_virtualization : 1; +#define IA32_VMX_PROCBASED_CTLS2_APIC_REGISTER_VIRTUALIZATION_BIT 8 +#define IA32_VMX_PROCBASED_CTLS2_APIC_REGISTER_VIRTUALIZATION_FLAG 0x100 +#define IA32_VMX_PROCBASED_CTLS2_APIC_REGISTER_VIRTUALIZATION_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_APIC_REGISTER_VIRTUALIZATION(_) (((_) >> 8) & 0x01) + + /** + * @brief Virtual-interrupt delivery + * + * [Bit 9] This controls enables the evaluation and delivery of pending virtual interrupts as well as the emulation of + * writes to the APIC registers that control interrupt prioritization. + */ + uint64_t virtual_interrupt_delivery : 1; +#define IA32_VMX_PROCBASED_CTLS2_VIRTUAL_INTERRUPT_DELIVERY_BIT 9 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUAL_INTERRUPT_DELIVERY_FLAG 0x200 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUAL_INTERRUPT_DELIVERY_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_VIRTUAL_INTERRUPT_DELIVERY(_) (((_) >> 9) & 0x01) + + /** + * @brief A specified number of pause loops cause a VM-exit + * + * [Bit 10] This control determines whether a series of executions of PAUSE can cause a VM exit. + * + * @see Vol3C[24.6.13(Controls for PAUSE-Loop Exiting)] + * @see Vol3C[25.1.3(Instructions That Cause VM Exits Conditionally)] + */ + uint64_t pause_loop_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS2_PAUSE_LOOP_EXITING_BIT 10 +#define IA32_VMX_PROCBASED_CTLS2_PAUSE_LOOP_EXITING_FLAG 0x400 +#define IA32_VMX_PROCBASED_CTLS2_PAUSE_LOOP_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_PAUSE_LOOP_EXITING(_) (((_) >> 10) & 0x01) + + /** + * @brief VM-exit when executing RDRAND instructions + * + * [Bit 11] This control determines whether executions of RDRAND cause VM exits. + */ + uint64_t rdrand_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS2_RDRAND_EXITING_BIT 11 +#define IA32_VMX_PROCBASED_CTLS2_RDRAND_EXITING_FLAG 0x800 +#define IA32_VMX_PROCBASED_CTLS2_RDRAND_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_RDRAND_EXITING(_) (((_) >> 11) & 0x01) + + /** + * @brief Enables INVPCID instructions + * + * [Bit 12] If this control is 0, any execution of INVPCID causes a \#UD. + */ + uint64_t enable_invpcid : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_INVPCID_BIT 12 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_INVPCID_FLAG 0x1000 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_INVPCID_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_INVPCID(_) (((_) >> 12) & 0x01) + + /** + * @brief Enables VMFUNC instructions + * + * [Bit 13] Setting this control to 1 enables use of the VMFUNC instruction in VMX non-root operation. + * + * @see Vol3C[25.5.5(VM Functions)] + */ + uint64_t enable_vm_functions : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VM_FUNCTIONS_BIT 13 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VM_FUNCTIONS_FLAG 0x2000 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VM_FUNCTIONS_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_VM_FUNCTIONS(_) (((_) >> 13) & 0x01) + + /** + * @brief Enables VMCS shadowing + * + * [Bit 14] If this control is 1, executions of VMREAD and VMWRITE in VMX non-root operation may access a shadow VMCS + * (instead of causing VM exits). + * + * @see {'Vol3C[24.10(VMCS TYPES': 'ORDINARY AND SHADOW)]'} + * @see Vol3C[30.3(VMX INSTRUCTIONS)] + */ + uint64_t vmcs_shadowing : 1; +#define IA32_VMX_PROCBASED_CTLS2_VMCS_SHADOWING_BIT 14 +#define IA32_VMX_PROCBASED_CTLS2_VMCS_SHADOWING_FLAG 0x4000 +#define IA32_VMX_PROCBASED_CTLS2_VMCS_SHADOWING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_VMCS_SHADOWING(_) (((_) >> 14) & 0x01) + + /** + * @brief Enables ENCLS VM-exits + * + * [Bit 15] If this control is 1, executions of ENCLS consult the ENCLS-exiting bitmap to determine whether the instruction + * causes a VM exit. + * + * @see Vol3C[24.6.16(ENCLS-Exiting Bitmap)] + * @see Vol3C[25.1.3(Instructions That Cause VM Exits Conditionally)] + */ + uint64_t enable_encls_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_ENCLS_EXITING_BIT 15 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_ENCLS_EXITING_FLAG 0x8000 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_ENCLS_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_ENCLS_EXITING(_) (((_) >> 15) & 0x01) + + /** + * @brief VM-exit when executing RDSEED + * + * [Bit 16] This control determines whether executions of RDSEED cause VM exits. + */ + uint64_t rdseed_exiting : 1; +#define IA32_VMX_PROCBASED_CTLS2_RDSEED_EXITING_BIT 16 +#define IA32_VMX_PROCBASED_CTLS2_RDSEED_EXITING_FLAG 0x10000 +#define IA32_VMX_PROCBASED_CTLS2_RDSEED_EXITING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_RDSEED_EXITING(_) (((_) >> 16) & 0x01) + + /** + * @brief Enables page-modification logging + * + * [Bit 17] If this control is 1, an access to a guest-physical address that sets an EPT dirty bit first adds an entry to + * the page-modification log. + * + * @see Vol3C[28.2.5(Page-Modification Logging)] + */ + uint64_t enable_pml : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_PML_BIT 17 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_PML_FLAG 0x20000 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_PML_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_PML(_) (((_) >> 17) & 0x01) + + /** + * @brief Controls whether EPT-violations may cause + * + * [Bit 18] If this control is 1, EPT violations may cause virtualization exceptions (\#VE) instead of VM exits. + * + * @see Vol3C[25.5.6(Virtualization Exceptions)] + */ + uint64_t ept_violation : 1; +#define IA32_VMX_PROCBASED_CTLS2_EPT_VIOLATION_BIT 18 +#define IA32_VMX_PROCBASED_CTLS2_EPT_VIOLATION_FLAG 0x40000 +#define IA32_VMX_PROCBASED_CTLS2_EPT_VIOLATION_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_EPT_VIOLATION(_) (((_) >> 18) & 0x01) + + /** + * @brief Conceal VMX non-root operation from Intel processor trace (PT) + * + * [Bit 19] If this control is 1, Intel Processor Trace suppresses from PIPs an indication that the processor was in VMX + * non-root operation and omits a VMCS packet from any PSB+ produced in VMX nonroot operation. + * + * @see Vol3C[35(INTEL(R) PROCESSOR TRACE)] + */ + uint64_t conceal_vmx_from_pt : 1; +#define IA32_VMX_PROCBASED_CTLS2_CONCEAL_VMX_FROM_PT_BIT 19 +#define IA32_VMX_PROCBASED_CTLS2_CONCEAL_VMX_FROM_PT_FLAG 0x80000 +#define IA32_VMX_PROCBASED_CTLS2_CONCEAL_VMX_FROM_PT_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_CONCEAL_VMX_FROM_PT(_) (((_) >> 19) & 0x01) + + /** + * @brief Enables XSAVES/XRSTORS instructions + * + * [Bit 20] If this control is 0, any execution of XSAVES or XRSTORS causes a \#UD. + */ + uint64_t enable_xsaves : 1; +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_XSAVES_BIT 20 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_XSAVES_FLAG 0x100000 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_XSAVES_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_ENABLE_XSAVES(_) (((_) >> 20) & 0x01) + uint64_t reserved1 : 1; + + /** + * [Bit 22] If this control is 1, EPT execute permissions are based on whether the linear address being accessed is + * supervisor mode or user mode. + * + * @see Vol3C[28(VMX SUPPORT FOR ADDRESS TRANSLATION)] + */ + uint64_t mode_based_execute_control_for_ept : 1; +#define IA32_VMX_PROCBASED_CTLS2_MODE_BASED_EXECUTE_CONTROL_FOR_EPT_BIT 22 +#define IA32_VMX_PROCBASED_CTLS2_MODE_BASED_EXECUTE_CONTROL_FOR_EPT_FLAG 0x400000 +#define IA32_VMX_PROCBASED_CTLS2_MODE_BASED_EXECUTE_CONTROL_FOR_EPT_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_MODE_BASED_EXECUTE_CONTROL_FOR_EPT(_) (((_) >> 22) & 0x01) + uint64_t reserved2 : 2; + + /** + * @brief Use TSC scaling + * + * [Bit 25] This control determines whether executions of RDTSC, executions of RDTSCP, and executions of RDMSR that read + * from the IA32_TIME_STAMP_COUNTER MSR return a value modified by the TSC multiplier field. + * + * @see Vol3C[24.6.5(Time-Stamp Counter Offset and Multiplier)] + * @see Vol3C[25.3(CHANGES TO INSTRUCTION BEHAVIOR IN VMX NON-ROOT OPERATION)] + */ + uint64_t use_tsc_scaling : 1; +#define IA32_VMX_PROCBASED_CTLS2_USE_TSC_SCALING_BIT 25 +#define IA32_VMX_PROCBASED_CTLS2_USE_TSC_SCALING_FLAG 0x2000000 +#define IA32_VMX_PROCBASED_CTLS2_USE_TSC_SCALING_MASK 0x01 +#define IA32_VMX_PROCBASED_CTLS2_USE_TSC_SCALING(_) (((_) >> 25) & 0x01) + uint64_t reserved3 : 38; + }; + + uint64_t flags; +} ia32_vmx_procbased_ctls2_register; + + +/** + * Capability Reporting Register of EPT and VPID. + * + * @remarks If ( CPUID.01H:ECX.[5] && IA32_VMX_PROCBASED_CTLS[63] && (IA32_VMX_PROCBASED_CTLS2[33] || + * IA32_VMX_PROCBASED_CTLS2[37]) ) + * @see Vol3D[A.10(VPID AND EPT CAPABILITIES)] + * @see Vol3D[A.10(VPID and EPT Capabilities)] (reference) + */ +#define IA32_VMX_EPT_VPID_CAP 0x0000048C +typedef union +{ + struct + { + /** + * [Bit 0] When set to 1, the processor supports execute-only translations by EPT. This support allows software to + * configure EPT paging-structure entries in which bits 1:0 are clear (indicating that data accesses are not allowed) and + * bit 2 is set (indicating that instruction fetches are allowed). + */ + uint64_t execute_only_pages : 1; +#define IA32_VMX_EPT_VPID_CAP_EXECUTE_ONLY_PAGES_BIT 0 +#define IA32_VMX_EPT_VPID_CAP_EXECUTE_ONLY_PAGES_FLAG 0x01 +#define IA32_VMX_EPT_VPID_CAP_EXECUTE_ONLY_PAGES_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_EXECUTE_ONLY_PAGES(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 5; + + /** + * [Bit 6] Indicates support for a page-walk length of 4. + */ + uint64_t page_walk_length_4 : 1; +#define IA32_VMX_EPT_VPID_CAP_PAGE_WALK_LENGTH_4_BIT 6 +#define IA32_VMX_EPT_VPID_CAP_PAGE_WALK_LENGTH_4_FLAG 0x40 +#define IA32_VMX_EPT_VPID_CAP_PAGE_WALK_LENGTH_4_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_PAGE_WALK_LENGTH_4(_) (((_) >> 6) & 0x01) + uint64_t reserved2 : 1; + + /** + * [Bit 8] When set to 1, the logical processor allows software to configure the EPT paging-structure memory type to be + * uncacheable (UC). + * + * @see Vol3C[24.6.11(Extended-Page-Table Pointer (EPTP))] + */ + uint64_t memory_type_uncacheable : 1; +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_UNCACHEABLE_BIT 8 +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_UNCACHEABLE_FLAG 0x100 +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_UNCACHEABLE_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_UNCACHEABLE(_) (((_) >> 8) & 0x01) + uint64_t reserved3 : 5; + + /** + * [Bit 14] When set to 1, the logical processor allows software to configure the EPT paging-structure memory type to be + * write-back (WB). + */ + uint64_t memory_type_write_back : 1; +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_WRITE_BACK_BIT 14 +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_WRITE_BACK_FLAG 0x4000 +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_WRITE_BACK_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_MEMORY_TYPE_WRITE_BACK(_) (((_) >> 14) & 0x01) + uint64_t reserved4 : 1; + + /** + * [Bit 16] When set to 1, the logical processor allows software to configure a EPT PDE to map a 2-Mbyte page (by setting + * bit 7 in the EPT PDE). + */ + uint64_t pde_2mb_pages : 1; +#define IA32_VMX_EPT_VPID_CAP_PDE_2MB_PAGES_BIT 16 +#define IA32_VMX_EPT_VPID_CAP_PDE_2MB_PAGES_FLAG 0x10000 +#define IA32_VMX_EPT_VPID_CAP_PDE_2MB_PAGES_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_PDE_2MB_PAGES(_) (((_) >> 16) & 0x01) + + /** + * [Bit 17] When set to 1, the logical processor allows software to configure a EPT PDPTE to map a 1-Gbyte page (by setting + * bit 7 in the EPT PDPTE). + */ + uint64_t pdpte_1gb_pages : 1; +#define IA32_VMX_EPT_VPID_CAP_PDPTE_1GB_PAGES_BIT 17 +#define IA32_VMX_EPT_VPID_CAP_PDPTE_1GB_PAGES_FLAG 0x20000 +#define IA32_VMX_EPT_VPID_CAP_PDPTE_1GB_PAGES_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_PDPTE_1GB_PAGES(_) (((_) >> 17) & 0x01) + uint64_t reserved5 : 2; + + /** + * [Bit 20] If bit 20 is read as 1, the INVEPT instruction is supported. + * + * @see Vol3C[30(VMX INSTRUCTION REFERENCE)] + * @see Vol3C[28.3.3.1(Operations that Invalidate Cached Mappings)] + */ + uint64_t invept : 1; +#define IA32_VMX_EPT_VPID_CAP_INVEPT_BIT 20 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_FLAG 0x100000 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVEPT(_) (((_) >> 20) & 0x01) + + /** + * [Bit 21] When set to 1, accessed and dirty flags for EPT are supported. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t ept_accessed_and_dirty_flags : 1; +#define IA32_VMX_EPT_VPID_CAP_EPT_ACCESSED_AND_DIRTY_FLAGS_BIT 21 +#define IA32_VMX_EPT_VPID_CAP_EPT_ACCESSED_AND_DIRTY_FLAGS_FLAG 0x200000 +#define IA32_VMX_EPT_VPID_CAP_EPT_ACCESSED_AND_DIRTY_FLAGS_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_EPT_ACCESSED_AND_DIRTY_FLAGS(_) (((_) >> 21) & 0x01) + + /** + * [Bit 22] When set to 1, the processor reports advanced VM-exit information for EPT violations. This reporting is done + * only if this bit is read as 1. + * + * @see Vol3C[27.2.1(Basic VM-Exit Information)] + */ + uint64_t advanced_vmexit_ept_violations_information : 1; +#define IA32_VMX_EPT_VPID_CAP_ADVANCED_VMEXIT_EPT_VIOLATIONS_INFORMATION_BIT 22 +#define IA32_VMX_EPT_VPID_CAP_ADVANCED_VMEXIT_EPT_VIOLATIONS_INFORMATION_FLAG 0x400000 +#define IA32_VMX_EPT_VPID_CAP_ADVANCED_VMEXIT_EPT_VIOLATIONS_INFORMATION_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_ADVANCED_VMEXIT_EPT_VIOLATIONS_INFORMATION(_) (((_) >> 22) & 0x01) + uint64_t reserved6 : 2; + + /** + * [Bit 25] When set to 1, the single-context INVEPT type is supported. + * + * @see Vol3C[30(VMX INSTRUCTION REFERENCE)] + * @see Vol3C[28.3.3.1(Operations that Invalidate Cached Mappings)] + */ + uint64_t invept_single_context : 1; +#define IA32_VMX_EPT_VPID_CAP_INVEPT_SINGLE_CONTEXT_BIT 25 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_SINGLE_CONTEXT_FLAG 0x2000000 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_SINGLE_CONTEXT_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_SINGLE_CONTEXT(_) (((_) >> 25) & 0x01) + + /** + * [Bit 26] When set to 1, the all-context INVEPT type is supported. + * + * @see Vol3C[30(VMX INSTRUCTION REFERENCE)] + * @see Vol3C[28.3.3.1(Operations that Invalidate Cached Mappings)] + */ + uint64_t invept_all_contexts : 1; +#define IA32_VMX_EPT_VPID_CAP_INVEPT_ALL_CONTEXTS_BIT 26 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_ALL_CONTEXTS_FLAG 0x4000000 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_ALL_CONTEXTS_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVEPT_ALL_CONTEXTS(_) (((_) >> 26) & 0x01) + uint64_t reserved7 : 5; + + /** + * [Bit 32] When set to 1, the INVVPID instruction is supported. + */ + uint64_t invvpid : 1; +#define IA32_VMX_EPT_VPID_CAP_INVVPID_BIT 32 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_FLAG 0x100000000 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVVPID(_) (((_) >> 32) & 0x01) + uint64_t reserved8 : 7; + + /** + * [Bit 40] When set to 1, the individual-address INVVPID type is supported. + */ + uint64_t invvpid_individual_address : 1; +#define IA32_VMX_EPT_VPID_CAP_INVVPID_INDIVIDUAL_ADDRESS_BIT 40 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_INDIVIDUAL_ADDRESS_FLAG 0x10000000000 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_INDIVIDUAL_ADDRESS_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_INDIVIDUAL_ADDRESS(_) (((_) >> 40) & 0x01) + + /** + * [Bit 41] When set to 1, the single-context INVVPID type is supported. + */ + uint64_t invvpid_single_context : 1; +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_BIT 41 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_FLAG 0x20000000000 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT(_) (((_) >> 41) & 0x01) + + /** + * [Bit 42] When set to 1, the all-context INVVPID type is supported. + */ + uint64_t invvpid_all_contexts : 1; +#define IA32_VMX_EPT_VPID_CAP_INVVPID_ALL_CONTEXTS_BIT 42 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_ALL_CONTEXTS_FLAG 0x40000000000 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_ALL_CONTEXTS_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_ALL_CONTEXTS(_) (((_) >> 42) & 0x01) + + /** + * [Bit 43] When set to 1, the single-context-retaining-globals INVVPID type is supported. + */ + uint64_t invvpid_single_context_retain_globals : 1; +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_RETAIN_GLOBALS_BIT 43 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_RETAIN_GLOBALS_FLAG 0x80000000000 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_RETAIN_GLOBALS_MASK 0x01 +#define IA32_VMX_EPT_VPID_CAP_INVVPID_SINGLE_CONTEXT_RETAIN_GLOBALS(_) (((_) >> 43) & 0x01) + uint64_t reserved9 : 20; + }; + + uint64_t flags; +} ia32_vmx_ept_vpid_cap_register; + +/** + * @defgroup ia32_vmx_true_ctls \ + * IA32_VMX_TRUE_(x)_CTLS + * + * Capability Reporting Register of Pin-Based VM-Execution Flex Controls, Primary Processor-Based VM-Execution Flex + * Controls, VM-Exit Flex Controls and VM-Entry Flex Controls. + * + * @remarks If ( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ) + * @see Vol3D[A.3.1(Pin-Based VM-Execution Controls)] + * @see Vol3D[A.3.2(Primary Processor-Based VM-Execution Controls)] + * @see Vol3D[A.4(VM-EXIT CONTROLS)] + * @see Vol3D[A.5(VM-ENTRY CONTROLS)] + * @see Vol3D[A.3.1(Pin-Based VMExecution Controls)] (reference) + * @see Vol3D[A.3.2(Primary Processor-Based VM-Execution Controls)] (reference) + * @see Vol3D[A.4(VM-Exit Controls)] (reference) + * @see Vol3D[A.5(VM-Entry Controls)] (reference) + * @{ + */ +#define IA32_VMX_TRUE_PINBASED_CTLS 0x0000048D +#define IA32_VMX_TRUE_PROCBASED_CTLS 0x0000048E +#define IA32_VMX_TRUE_EXIT_CTLS 0x0000048F +#define IA32_VMX_TRUE_ENTRY_CTLS 0x00000490 +typedef union +{ + struct + { + /** + * [Bits 31:0] Indicate the allowed 0-settings of these controls. VM entry allows control X to be 0 if bit X in the MSR is + * cleared to 0; if bit X in the MSR is set to 1, VM entry fails if control X is 0. + */ + uint64_t allowed_0_settings : 32; +#define IA32_VMX_TRUE_CTLS_ALLOWED_0_SETTINGS_BIT 0 +#define IA32_VMX_TRUE_CTLS_ALLOWED_0_SETTINGS_FLAG 0xFFFFFFFF +#define IA32_VMX_TRUE_CTLS_ALLOWED_0_SETTINGS_MASK 0xFFFFFFFF +#define IA32_VMX_TRUE_CTLS_ALLOWED_0_SETTINGS(_) (((_) >> 0) & 0xFFFFFFFF) + + /** + * [Bits 63:32] Indicate the allowed 1-settings of these controls. VM entry allows control X to be 1 if bit 32+X in the MSR + * is set to 1; if bit 32+X in the MSR is cleared to 0, VM entry fails if control X is 1. + */ + uint64_t allowed_1_settings : 32; +#define IA32_VMX_TRUE_CTLS_ALLOWED_1_SETTINGS_BIT 32 +#define IA32_VMX_TRUE_CTLS_ALLOWED_1_SETTINGS_FLAG 0xFFFFFFFF00000000 +#define IA32_VMX_TRUE_CTLS_ALLOWED_1_SETTINGS_MASK 0xFFFFFFFF +#define IA32_VMX_TRUE_CTLS_ALLOWED_1_SETTINGS(_) (((_) >> 32) & 0xFFFFFFFF) + }; + + uint64_t flags; +} ia32_vmx_true_ctls_register; + +/** + * @} + */ + + + /** + * Capability Reporting Register of VMFunction Controls. + * + * @remarks If ( CPUID.01H:ECX.[5] = 1 && IA32_VMX_BASIC[55] ) + * @see Vol3D[A.11(VM FUNCTIONS)] + * @see Vol3D[24.6.14(VM-Function Controls)] (reference) + */ +#define IA32_VMX_VMFUNC 0x00000491 +typedef union +{ + struct + { + /** + * [Bit 0] The EPTP-switching VM function changes the EPT pointer to a value chosen from the EPTP list. + * + * @see Vol3C[25.5.5.3(EPTP Switching)] + */ + uint64_t eptp_switching : 1; +#define IA32_VMX_VMFUNC_EPTP_SWITCHING_BIT 0 +#define IA32_VMX_VMFUNC_EPTP_SWITCHING_FLAG 0x01 +#define IA32_VMX_VMFUNC_EPTP_SWITCHING_MASK 0x01 +#define IA32_VMX_VMFUNC_EPTP_SWITCHING(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 63; + }; + + uint64_t flags; +} ia32_vmx_vmfunc_register; + +/** + * @defgroup ia32_a_pmc \ + * IA32_A_PMC(n) + * + * Full Width Writable IA32_PMC(n) Alias. + * + * @remarks (If CPUID.0AH: EAX[15:8] > 0) && IA32_PERF_CAPABILITIES[13] = 1 + * @{ + */ +#define IA32_A_PMC0 0x000004C1 +#define IA32_A_PMC1 0x000004C2 +#define IA32_A_PMC2 0x000004C3 +#define IA32_A_PMC3 0x000004C4 +#define IA32_A_PMC4 0x000004C5 +#define IA32_A_PMC5 0x000004C6 +#define IA32_A_PMC6 0x000004C7 +#define IA32_A_PMC7 0x000004C8 + /** + * @} + */ + + + /** + * Allows software to signal some MCEs to only a single logical processor in the system. + * + * @remarks If IA32_MCG_CAP.LMCE_P = 1 + * @see Vol3B[15.3.1.4(IA32_MCG_EXT_CTL MSR)] + */ +#define IA32_MCG_EXT_CTL 0x000004D0 +typedef union +{ + struct + { + uint64_t lmce_en : 1; +#define IA32_MCG_EXT_CTL_LMCE_EN_BIT 0 +#define IA32_MCG_EXT_CTL_LMCE_EN_FLAG 0x01 +#define IA32_MCG_EXT_CTL_LMCE_EN_MASK 0x01 +#define IA32_MCG_EXT_CTL_LMCE_EN(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 63; + }; + + uint64_t flags; +} ia32_mcg_ext_ctl_register; + + +/** + * @brief Status and SVN Threshold of SGX Support for ACM (RO) + * + * Intel SGX only allows launching ACMs with an Intel SGX SVN that is at the same level or higher than the expected Intel + * SGX SVN. The expected Intel SGX SVN is specified by BIOS and locked down by the processor on the first successful + * execution of an Intel SGX instruction that doesn't return an error code. Intel SGX provides interfaces for system + * software to discover whether a non faulting Intel SGX instruction has been executed, and evaluate the suitability of the + * Intel SGX SVN value of any ACM that is expected to be launched by the OS or the VMM. + * + * @remarks If CPUID.(EAX=07H, ECX=0H): EBX[2] = 1 + * @see Vol3D[41.11.3(Interactions with Authenticated Code Modules (ACMs))] (reference) + */ +#define IA32_SGX_SVN_STATUS 0x00000500 +typedef union +{ + struct + { + /** + * [Bit 0] - If 1, indicates that a non-faulting Intel SGX instruction has been executed, consequently, launching a + * properly signed ACM but with Intel SGX SVN value less than the BIOS specified Intel SGX SVN threshold would lead to an + * TXT shutdown. + * - If 0, indicates that the processor will allow a properly signed ACM to launch irrespective of the Intel SGX SVN value + * of the ACM. + * + * @see Vol3D[41.11.3(Interactions with Authenticated Code Modules (ACMs))] + */ + uint64_t lock : 1; +#define IA32_SGX_SVN_STATUS_LOCK_BIT 0 +#define IA32_SGX_SVN_STATUS_LOCK_FLAG 0x01 +#define IA32_SGX_SVN_STATUS_LOCK_MASK 0x01 +#define IA32_SGX_SVN_STATUS_LOCK(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 15; + + /** + * @brief Reflects the expected threshold of Intel SGX SVN for the SINIT ACM + * + * [Bits 23:16] - If CPUID.01H:ECX.SMX = 1, this field reflects the expected threshold of Intel SGX SVN for the SINIT ACM. + * - If CPUID.01H:ECX.SMX = 0, this field is reserved (0). + * + * @see Vol3D[41.11.3(Interactions with Authenticated Code Modules (ACMs))] + */ + uint64_t sgx_svn_sinit : 8; +#define IA32_SGX_SVN_STATUS_SGX_SVN_SINIT_BIT 16 +#define IA32_SGX_SVN_STATUS_SGX_SVN_SINIT_FLAG 0xFF0000 +#define IA32_SGX_SVN_STATUS_SGX_SVN_SINIT_MASK 0xFF +#define IA32_SGX_SVN_STATUS_SGX_SVN_SINIT(_) (((_) >> 16) & 0xFF) + uint64_t reserved2 : 40; + }; + + uint64_t flags; +} ia32_sgx_svn_status_register; + + +/** + * Trace Output Base Register. + * + * @remarks If ( (CPUID.(EAX=07H, ECX=0):EBX[25] = 1) && ( (CPUID.(EAX=14H,ECX=0): ECX[0] = 1) || + * (CPUID.(EAX=14H,ECX=0):ECX[2] = 1) ) ) + * @see Vol3C[35.2.7.7(IA32_RTIT_OUTPUT_BASE MSR)] (reference) + */ +#define IA32_RTIT_OUTPUT_BASE 0x00000560 +typedef union +{ + struct + { + uint64_t reserved1 : 7; + + /** + * @brief Base physical address + * + * [Bits 47:7] The base physical address. How this address is used depends on the value of IA32_RTIT_CTL.ToPA: + * - 0: This is the base physical address of a single, contiguous physical output region. This could be mapped to DRAM or + * to MMIO, depending on the value. The base address should be aligned with the size of the region, such that none of the + * 1s in the mask value overlap with 1s in the base address. If the base is not aligned, an operational error will result. + * - 1: The base physical address of the current ToPA table. The address must be 4K aligned. Writing an address in which + * bits 11:7 are non-zero will not cause a \#GP, but an operational error will be signaled once TraceEn is set. + * + * @see Vol3C[35.2.7.8(IA32_RTIT_OUTPUT_MASK_PTRS MSR)] + * @see Vol3C[35.3.9(Operational Errors)] + * @see Vol3C[35.2.6.2(Table of Physical Addresses (ToPA))] + */ + uint64_t base_physical_address : 41; +#define IA32_RTIT_OUTPUT_BASE_BASE_PHYSICAL_ADDRESS_BIT 7 +#define IA32_RTIT_OUTPUT_BASE_BASE_PHYSICAL_ADDRESS_FLAG 0xFFFFFFFFFF80 +#define IA32_RTIT_OUTPUT_BASE_BASE_PHYSICAL_ADDRESS_MASK 0x1FFFFFFFFFF +#define IA32_RTIT_OUTPUT_BASE_BASE_PHYSICAL_ADDRESS(_) (((_) >> 7) & 0x1FFFFFFFFFF) + uint64_t reserved2 : 16; + }; + + uint64_t flags; +} ia32_rtit_output_base_register; + + +/** + * Trace Output Mask Pointers Register. + * + * @remarks If ( (CPUID.(EAX=07H, ECX=0):EBX[25] = 1) && ( (CPUID.(EAX=14H,ECX=0):ECX[0] = 1) || + * (CPUID.(EAX=14H,ECX=0):ECX[2] = 1) ) ) + * @see Vol3C[35.2.7.8(IA32_RTIT_OUTPUT_MASK_PTRS MSR)] (reference) + */ +#define IA32_RTIT_OUTPUT_MASK_PTRS 0x00000561 +typedef union +{ + struct + { + /** + * [Bits 6:0] Forced to 1, writes are ignored. + */ + uint64_t lower_mask : 7; +#define IA32_RTIT_OUTPUT_MASK_PTRS_LOWER_MASK_BIT 0 +#define IA32_RTIT_OUTPUT_MASK_PTRS_LOWER_MASK_FLAG 0x7F +#define IA32_RTIT_OUTPUT_MASK_PTRS_LOWER_MASK_MASK 0x7F +#define IA32_RTIT_OUTPUT_MASK_PTRS_LOWER_MASK(_) (((_) >> 0) & 0x7F) + + /** + * @brief MaskOrTableOffset + * + * [Bits 31:7] The use of this field depends on the value of IA32_RTIT_CTL.ToPA: + * - 0: This field holds bits 31:7 of the mask value for the single, contiguous physical output region. The size of this + * field indicates that regions can be of size 128B up to 4GB. This value (combined with the lower 7 bits, which are + * reserved to 1) will be ANDed with the OutputOffset field to determine the next write address. All 1s in this field + * should be consecutive and starting at bit 7, otherwise the region will not be contiguous, and an operational error will + * be signaled when TraceEn is set. + * - 1: This field holds bits 27:3 of the offset pointer into the current ToPA table. This value can be added to the + * IA32_RTIT_OUTPUT_BASE value to produce a pointer to the current ToPA table entry, which itself is a pointer to the + * current output region. In this scenario, the lower 7 reserved bits are ignored. This field supports tables up to 256 + * MBytes in size. + * + * @see Vol3C[35.3.9(Operational Errors)] + */ + uint64_t mask_or_table_offset : 25; +#define IA32_RTIT_OUTPUT_MASK_PTRS_MASK_OR_TABLE_OFFSET_BIT 7 +#define IA32_RTIT_OUTPUT_MASK_PTRS_MASK_OR_TABLE_OFFSET_FLAG 0xFFFFFF80 +#define IA32_RTIT_OUTPUT_MASK_PTRS_MASK_OR_TABLE_OFFSET_MASK 0x1FFFFFF +#define IA32_RTIT_OUTPUT_MASK_PTRS_MASK_OR_TABLE_OFFSET(_) (((_) >> 7) & 0x1FFFFFF) + + /** + * @brief Output Offset + * + * [Bits 63:32] The use of this field depends on the value of IA32_RTIT_CTL.ToPA: + * - 0: This is bits 31:0 of the offset pointer into the single, contiguous physical output region. This value will be + * added to the IA32_RTIT_OUTPUT_BASE value to form the physical address at which the next byte of packet output data will + * be written. This value must be less than or equal to the MaskOrTableOffset field, otherwise an operational error will be + * signaled when TraceEn is set. + * - 1: This field holds bits 31:0 of the offset pointer into the current ToPA output region. This value will be added to + * the output region base field, found in the current ToPA table entry, to form the physical address at which the next byte + * of trace output data will be written. This value must be less than the ToPA entry size, otherwise an operational error + * will be signaled when TraceEn is set. + * + * @see Vol3C[35.3.9(Operational Errors)] + */ + uint64_t output_offset : 32; +#define IA32_RTIT_OUTPUT_MASK_PTRS_OUTPUT_OFFSET_BIT 32 +#define IA32_RTIT_OUTPUT_MASK_PTRS_OUTPUT_OFFSET_FLAG 0xFFFFFFFF00000000 +#define IA32_RTIT_OUTPUT_MASK_PTRS_OUTPUT_OFFSET_MASK 0xFFFFFFFF +#define IA32_RTIT_OUTPUT_MASK_PTRS_OUTPUT_OFFSET(_) (((_) >> 32) & 0xFFFFFFFF) + }; + + uint64_t flags; +} ia32_rtit_output_mask_ptrs_register; + + +/** + * Trace Control Register. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1) + * @see Vol3C[35.2.7.2(IA32_RTIT_CTL MSR)] (reference) + */ +#define IA32_RTIT_CTL 0x00000570 +typedef union +{ + struct + { + /** + * @brief TraceEn + * + * [Bit 0] If 1, enables tracing; else tracing is disabled. + * When this bit transitions from 1 to 0, all buffered packets are flushed out of internal buffers. A further store, fence, + * or architecturally serializing instruction may be required to ensure that packet data can be observed at the trace + * endpoint. + * Note that the processor will clear this bit on \#SMI (Section) and warm reset. Other MSR bits of IA32_RTIT_CTL (and + * other trace configuration MSRs) are not impacted by these events. + * + * @see Vol3C[35.2.7.3(Enabling and Disabling Packet Generation with TraceEn)] + */ + uint64_t trace_enabled : 1; +#define IA32_RTIT_CTL_TRACE_ENABLED_BIT 0 +#define IA32_RTIT_CTL_TRACE_ENABLED_FLAG 0x01 +#define IA32_RTIT_CTL_TRACE_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_TRACE_ENABLED(_) (((_) >> 0) & 0x01) + + /** + * @brief CYCEn + * + * [Bit 1] - 0: Disables CYC Packet. + * - 1: Enables CYC Packet. + * + * @remarks If CPUID.(EAX=14H, ECX=0):EBX.CPSB_CAM[bit 1] = 0 + * @see Vol3C[35.4.2.14(Cycle Count (CYC) Packet)] + */ + uint64_t cyc_enabled : 1; +#define IA32_RTIT_CTL_CYC_ENABLED_BIT 1 +#define IA32_RTIT_CTL_CYC_ENABLED_FLAG 0x02 +#define IA32_RTIT_CTL_CYC_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_CYC_ENABLED(_) (((_) >> 1) & 0x01) + + /** + * @brief OS + * + * [Bit 2] - 0: Packet generation is disabled when CPL = 0. + * - 1: Packet generation may be enabled when CPL = 0. + */ + uint64_t os : 1; +#define IA32_RTIT_CTL_OS_BIT 2 +#define IA32_RTIT_CTL_OS_FLAG 0x04 +#define IA32_RTIT_CTL_OS_MASK 0x01 +#define IA32_RTIT_CTL_OS(_) (((_) >> 2) & 0x01) + + /** + * @brief User + * + * [Bit 3] - 0: Packet generation is disabled when CPL > 0. + * - 1: Packet generation may be enabled when CPL > 0. + */ + uint64_t user : 1; +#define IA32_RTIT_CTL_USER_BIT 3 +#define IA32_RTIT_CTL_USER_FLAG 0x08 +#define IA32_RTIT_CTL_USER_MASK 0x01 +#define IA32_RTIT_CTL_USER(_) (((_) >> 3) & 0x01) + + /** + * @brief PwrEvtEn + * + * [Bit 4] - 0: Power Event Trace packets are disabled. + * - 1: Power Event Trace packets are enabled. + * + * @see Vol3C[35.2.3(Power Event Tracing)] + */ + uint64_t power_event_trace_enabled : 1; +#define IA32_RTIT_CTL_POWER_EVENT_TRACE_ENABLED_BIT 4 +#define IA32_RTIT_CTL_POWER_EVENT_TRACE_ENABLED_FLAG 0x10 +#define IA32_RTIT_CTL_POWER_EVENT_TRACE_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_POWER_EVENT_TRACE_ENABLED(_) (((_) >> 4) & 0x01) + + /** + * @brief FUPonPTW + * + * [Bit 5] - 0: PTW packets are not followed by FUPs. + * - 1: PTW packets are followed by FUPs. + */ + uint64_t fup_on_ptw : 1; +#define IA32_RTIT_CTL_FUP_ON_PTW_BIT 5 +#define IA32_RTIT_CTL_FUP_ON_PTW_FLAG 0x20 +#define IA32_RTIT_CTL_FUP_ON_PTW_MASK 0x01 +#define IA32_RTIT_CTL_FUP_ON_PTW(_) (((_) >> 5) & 0x01) + + /** + * @brief FabricEn + * + * [Bit 6] - 0: Trace output is directed to the memory subsystem, mechanism depends on IA32_RTIT_CTL.ToPA. + * - 1: Trace output is directed to the trace transport subsystem, IA32_RTIT_CTL.ToPA is ignored. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):ECX[3] = 1) Reserved if CPUID.(EAX=14H, ECX=0):ECX[bit 3] = 0 + */ + uint64_t fabric_enabled : 1; +#define IA32_RTIT_CTL_FABRIC_ENABLED_BIT 6 +#define IA32_RTIT_CTL_FABRIC_ENABLED_FLAG 0x40 +#define IA32_RTIT_CTL_FABRIC_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_FABRIC_ENABLED(_) (((_) >> 6) & 0x01) + + /** + * @brief CR3 filter + * + * [Bit 7] - 0: Disables CR3 filtering. + * - 1: Enables CR3 filtering. + */ + uint64_t cr3_filter : 1; +#define IA32_RTIT_CTL_CR3_FILTER_BIT 7 +#define IA32_RTIT_CTL_CR3_FILTER_FLAG 0x80 +#define IA32_RTIT_CTL_CR3_FILTER_MASK 0x01 +#define IA32_RTIT_CTL_CR3_FILTER(_) (((_) >> 7) & 0x01) + + /** + * @brief ToPA + * + * [Bit 8] - 0: Single-range output scheme enabled. + * - 1: ToPA output scheme enabled. + * + * @remarks 0: If CPUID.(EAX=14H, ECX=0):ECX.SNGLRGNOUT[bit 2] = 1 and IA32_RTIT_CTL.FabricEn=0 1: If CPUID.(EAX=14H, + * ECX=0):ECX.TOPA[bit 0] = 1, and IA32_RTIT_CTL.FabricEn=0 + * WRMSR to IA32_RTIT_CTL that sets TraceEn but clears this bit and FabricEn would cause \#GP: If CPUID.(EAX=14H, + * ECX=0):ECX.SNGLRGNOUT[bit 2] = 0 WRMSR to IA32_RTIT_CTL that sets this bit causes \#GP: If CPUID.(EAX=14H, + * ECX=0):ECX.TOPA[bit 0] = 0 + * @see Vol3C[35.2.6.2(Table of Physical Addresses (ToPA))] + */ + uint64_t topa : 1; +#define IA32_RTIT_CTL_TOPA_BIT 8 +#define IA32_RTIT_CTL_TOPA_FLAG 0x100 +#define IA32_RTIT_CTL_TOPA_MASK 0x01 +#define IA32_RTIT_CTL_TOPA(_) (((_) >> 8) & 0x01) + + /** + * @brief MTCEn + * + * [Bit 9] - 0: Disables MTC Packet. + * - 1: Enables MTC Packet. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1) Reserved if CPUID.(EAX=14H, ECX=0):EBX.MTC[bit 3] = 0 + * @see Vol3C[35.4.2.16(Overflow (OVF) Packet)] + */ + uint64_t mtc_enabled : 1; +#define IA32_RTIT_CTL_MTC_ENABLED_BIT 9 +#define IA32_RTIT_CTL_MTC_ENABLED_FLAG 0x200 +#define IA32_RTIT_CTL_MTC_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_MTC_ENABLED(_) (((_) >> 9) & 0x01) + + /** + * @brief TSCEn + * + * [Bit 10] - 0: Disable TSC packets. + * - 1: Enable TSC packets. + * + * @see Vol3C[35.4.2.11(Timestamp Counter (TSC) Packet)] + */ + uint64_t tsc_enabled : 1; +#define IA32_RTIT_CTL_TSC_ENABLED_BIT 10 +#define IA32_RTIT_CTL_TSC_ENABLED_FLAG 0x400 +#define IA32_RTIT_CTL_TSC_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_TSC_ENABLED(_) (((_) >> 10) & 0x01) + + /** + * @brief DisRETC + * + * [Bit 11] - 0: Enable RET compression. + * - 1: Disable RET compression. + * + * @see Vol3C[35.2.1.2(Indirect Transfer COFI)] + */ + uint64_t ret_compression_disabled : 1; +#define IA32_RTIT_CTL_RET_COMPRESSION_DISABLED_BIT 11 +#define IA32_RTIT_CTL_RET_COMPRESSION_DISABLED_FLAG 0x800 +#define IA32_RTIT_CTL_RET_COMPRESSION_DISABLED_MASK 0x01 +#define IA32_RTIT_CTL_RET_COMPRESSION_DISABLED(_) (((_) >> 11) & 0x01) + + /** + * @brief PTWEn + * + * [Bit 12] - 0: PTWRITE packet generation disabled. + * - 1: PTWRITE packet generation enabled. + */ + uint64_t ptw_enabled : 1; +#define IA32_RTIT_CTL_PTW_ENABLED_BIT 12 +#define IA32_RTIT_CTL_PTW_ENABLED_FLAG 0x1000 +#define IA32_RTIT_CTL_PTW_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_PTW_ENABLED(_) (((_) >> 12) & 0x01) + + /** + * @brief BranchEn + * + * [Bit 13] - 0: Disable COFI-based packets. + * - 1: Enable COFI-based packets: FUP, TIP, TIP.PGE, TIP.PGD, TNT, MODE.Exec, MODE.TSX. + * + * @see Vol3C[35.2.5.4(Branch Enable (BranchEn))] + */ + uint64_t branch_enabled : 1; +#define IA32_RTIT_CTL_BRANCH_ENABLED_BIT 13 +#define IA32_RTIT_CTL_BRANCH_ENABLED_FLAG 0x2000 +#define IA32_RTIT_CTL_BRANCH_ENABLED_MASK 0x01 +#define IA32_RTIT_CTL_BRANCH_ENABLED(_) (((_) >> 13) & 0x01) + + /** + * @brief MTCFreq + * + * [Bits 17:14] Defines MTC packet Frequency, which is based on the core crystal clock, or Always Running Timer (ART). MTC + * will be sent each time the selected ART bit toggles. The following Encodings are defined: + * 0: ART(0), 1: ART(1), 2: ART(2), 3: ART(3), 4: ART(4), 5: ART(5), 6: ART(6), 7: ART(7), 8: ART(8), 9: ART(9), 10: + * ART(10), 11: ART(11), 12: ART(12), 13: ART(13), 14: ART(14), 15: ART(15) + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[3] = 1) Reserved if CPUID.(EAX=14H, ECX=0):EBX.MTC[bit 3] = 0 + * @see Vol3C[35.3.1(Detection of Intel Processor Trace and Capability Enumeration)] + */ + uint64_t mtc_frequency : 4; +#define IA32_RTIT_CTL_MTC_FREQUENCY_BIT 14 +#define IA32_RTIT_CTL_MTC_FREQUENCY_FLAG 0x3C000 +#define IA32_RTIT_CTL_MTC_FREQUENCY_MASK 0x0F +#define IA32_RTIT_CTL_MTC_FREQUENCY(_) (((_) >> 14) & 0x0F) + uint64_t reserved1 : 1; + + /** + * @brief CYCThresh + * + * [Bits 22:19] CYC packet threshold. CYC packets will be sent with the first eligible packet after N cycles have passed + * since the last CYC packet. If CycThresh is 0 then N=0, otherwise N is defined as 2(CycThresh-1). The following Encodings + * are defined: + * 0: 0, 1: 1, 2: 2, 3: 4, 4: 8, 5: 16, 6: 32, 7: 64, 8: 128, 9: 256, 10: 512, 11: 1024, 12: 2048, 13: 4096, 14: 8192, 15: + * 16384 + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1) Reserved if CPUID.(EAX=14H, ECX=0):EBX.CPSB_CAM[bit 1] = 0 + * @see Vol3C[35.3.6(Cycle-Accurate Mode)] + * @see Vol3C[35.3.1(Detection of Intel Processor Trace and Capability Enumeration)] + */ + uint64_t cyc_threshold : 4; +#define IA32_RTIT_CTL_CYC_THRESHOLD_BIT 19 +#define IA32_RTIT_CTL_CYC_THRESHOLD_FLAG 0x780000 +#define IA32_RTIT_CTL_CYC_THRESHOLD_MASK 0x0F +#define IA32_RTIT_CTL_CYC_THRESHOLD(_) (((_) >> 19) & 0x0F) + uint64_t reserved2 : 1; + + /** + * @brief PSBFreq + * + * [Bits 27:24] Indicates the frequency of PSB packets. PSB packet frequency is based on the number of Intel PT packet + * bytes output, so this field allows the user to determine the increment of IA32_IA32_RTIT_STATUS.PacketByteCnt that + * should cause a PSB to be generated. Note that PSB insertion is not precise, but the average output bytes per PSB should + * approximate the SW selected period. The following Encodings are defined: + * 0: 2K, 1: 4K, 2: 8K, 3: 16K, 4: 32K, 5: 64K, 6: 128K, 7: 256K, 8: 512K, 9: 1M, 10: 2M, 11: 4M, 12: 8M, 13: 16M, 14: 32M, + * 15: 64M + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[1] = 1) Reserved if CPUID.(EAX=14H, ECX=0):EBX.CPSB_CAM[bit 1] = 0 + * @see Vol3C[35.3.1(Detection of Intel Processor Trace and Capability Enumeration)] + */ + uint64_t psb_frequency : 4; +#define IA32_RTIT_CTL_PSB_FREQUENCY_BIT 24 +#define IA32_RTIT_CTL_PSB_FREQUENCY_FLAG 0xF000000 +#define IA32_RTIT_CTL_PSB_FREQUENCY_MASK 0x0F +#define IA32_RTIT_CTL_PSB_FREQUENCY(_) (((_) >> 24) & 0x0F) + uint64_t reserved3 : 4; + + /** + * @brief ADDR0_CFG + * + * [Bits 35:32] Configures the base/limit register pair IA32_RTIT_ADDR0_A/B based on the following encodings: + * - 0: ADDR0 range unused. + * - 1: The [IA32_RTIT_ADDR0_A..IA32_RTIT_ADDR0_B] range defines a FilterEn range. FilterEn will only be set when the IP is + * within this range, though other FilterEn ranges can additionally be used. + * - 2: The [IA32_RTIT_ADDR0_A..IA32_RTIT_ADDR0_B] range defines a TraceStop range. TraceStop will be asserted if code + * branches into this range. + * - 3..15: Reserved (\#GP). + * + * @remarks If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 0) Reserved if CPUID.(EAX=14H, ECX=1):EBX.RANGECNT[2:0] >= 0 + * @see Vol3C[35.2.4.3(Filtering by IP)] + * @see Vol3C[35.4.2.10(Core:Bus Ratio (CBR) Packet)] + */ + uint64_t addr0_cfg : 4; +#define IA32_RTIT_CTL_ADDR0_CFG_BIT 32 +#define IA32_RTIT_CTL_ADDR0_CFG_FLAG 0xF00000000 +#define IA32_RTIT_CTL_ADDR0_CFG_MASK 0x0F +#define IA32_RTIT_CTL_ADDR0_CFG(_) (((_) >> 32) & 0x0F) + + /** + * @brief ADDR1_CFG + * + * [Bits 39:36] Configures the base/limit register pair IA32_RTIT_ADDR1_A/B based on the following encodings: + * - 0: ADDR1 range unused. + * - 1: The [IA32_RTIT_ADDR1_A..IA32_RTIT_ADDR1_B] range defines a FilterEn range. FilterEn will only be set when the IP is + * within this range, though other FilterEn ranges can additionally be used. + * - 2: The [IA32_RTIT_ADDR1_A..IA32_RTIT_ADDR1_B] range defines a TraceStop range. TraceStop will be asserted if code + * branches into this range. + * - 3..15: Reserved (\#GP). + * + * @remarks If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 1) Reserved if CPUID.(EAX=14H, ECX=1):EBX.RANGECNT[2:0] < 2 + * @see Vol3C[35.2.4.3(Filtering by IP)] + * @see Vol3C[35.4.2.10(Core:Bus Ratio (CBR) Packet)] + */ + uint64_t addr1_cfg : 4; +#define IA32_RTIT_CTL_ADDR1_CFG_BIT 36 +#define IA32_RTIT_CTL_ADDR1_CFG_FLAG 0xF000000000 +#define IA32_RTIT_CTL_ADDR1_CFG_MASK 0x0F +#define IA32_RTIT_CTL_ADDR1_CFG(_) (((_) >> 36) & 0x0F) + + /** + * @brief ADDR2_CFG + * + * [Bits 43:40] Configures the base/limit register pair IA32_RTIT_ADDR2_A/B based on the following encodings: + * - 0: ADDR2 range unused. + * - 1: The [IA32_RTIT_ADDR2_A..IA32_RTIT_ADDR2_B] range defines a FilterEn range. FilterEn will only be set when the IP is + * within this range, though other FilterEn ranges can additionally be used. + * - 2: The [IA32_RTIT_ADDR2_A..IA32_RTIT_ADDR2_B] range defines a TraceStop range. TraceStop will be asserted if code + * branches into this range. + * - 3..15: Reserved (\#GP). + * + * @remarks If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 2) Reserved if CPUID.(EAX=14H, ECX=1):EBX.RANGECNT[2:0] < 3 + * @see Vol3C[35.2.4.3(Filtering by IP)] + * @see Vol3C[35.4.2.10(Core:Bus Ratio (CBR) Packet)] + */ + uint64_t addr2_cfg : 4; +#define IA32_RTIT_CTL_ADDR2_CFG_BIT 40 +#define IA32_RTIT_CTL_ADDR2_CFG_FLAG 0xF0000000000 +#define IA32_RTIT_CTL_ADDR2_CFG_MASK 0x0F +#define IA32_RTIT_CTL_ADDR2_CFG(_) (((_) >> 40) & 0x0F) + + /** + * @brief ADDR3_CFG + * + * [Bits 47:44] Configures the base/limit register pair IA32_RTIT_ADDR3_A/B based on the following encodings: + * - 0: ADDR3 range unused. + * - 1: The [IA32_RTIT_ADDR3_A..IA32_RTIT_ADDR3_B] range defines a FilterEn range. FilterEn will only be set when the IP is + * within this range, though other FilterEn ranges can additionally be used. + * - 2: The [IA32_RTIT_ADDR3_A..IA32_RTIT_ADDR3_B] range defines a TraceStop range. TraceStop will be asserted if code + * branches into this range. + * - 3..15: Reserved (\#GP). + * + * @remarks If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > 3) Reserved if CPUID.(EAX=14H, ECX=1):EBX.RANGECNT[2:0] < 4 + * @see Vol3C[35.2.4.3(Filtering by IP)] + * @see Vol3C[35.4.2.10(Core:Bus Ratio (CBR) Packet)] + */ + uint64_t addr3_cfg : 4; +#define IA32_RTIT_CTL_ADDR3_CFG_BIT 44 +#define IA32_RTIT_CTL_ADDR3_CFG_FLAG 0xF00000000000 +#define IA32_RTIT_CTL_ADDR3_CFG_MASK 0x0F +#define IA32_RTIT_CTL_ADDR3_CFG(_) (((_) >> 44) & 0x0F) + uint64_t reserved4 : 8; + + /** + * @brief InjectPsbPmiOnEnable + * + * [Bit 56] - 1: Enables use of IA32_RTIT_STATUS bits PendPSB[6] and PendTopaPMI[7]. + * - 0: IA32_RTIT_STATUS bits 6 and 7 are ignored. + * + * @remarks Reserved if CPUID.(EAX=14H, ECX=0):EBX.INJECTPSBPMI[6] = 0 + * @see Vol3C[35.2.7.4(IA32_RTIT_STATUS MSR)] + */ + uint64_t inject_psb_pmi_on_enable : 1; +#define IA32_RTIT_CTL_INJECT_PSB_PMI_ON_ENABLE_BIT 56 +#define IA32_RTIT_CTL_INJECT_PSB_PMI_ON_ENABLE_FLAG 0x100000000000000 +#define IA32_RTIT_CTL_INJECT_PSB_PMI_ON_ENABLE_MASK 0x01 +#define IA32_RTIT_CTL_INJECT_PSB_PMI_ON_ENABLE(_) (((_) >> 56) & 0x01) + uint64_t reserved5 : 7; + }; + + uint64_t flags; +} ia32_rtit_ctl_register; + + +/** + * Tracing Status Register. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1) + */ +#define IA32_RTIT_STATUS 0x00000571 +typedef union +{ + struct + { + /** + * @brief FilterEn (writes ignored) + * + * [Bit 0] This bit is written by the processor, and indicates that tracing is allowed for the current IP. Writes are + * ignored. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[2] = 1) + * @see Vol3C[35.2.5.5(Filter Enable (FilterEn))] + */ + uint64_t filter_enabled : 1; +#define IA32_RTIT_STATUS_FILTER_ENABLED_BIT 0 +#define IA32_RTIT_STATUS_FILTER_ENABLED_FLAG 0x01 +#define IA32_RTIT_STATUS_FILTER_ENABLED_MASK 0x01 +#define IA32_RTIT_STATUS_FILTER_ENABLED(_) (((_) >> 0) & 0x01) + + /** + * @brief ContexEn (writes ignored) + * + * [Bit 1] The processor sets this bit to indicate that tracing is allowed for the current context. Writes are ignored. + * + * @see Vol3C[35.2.5.3(Context Enable (ContextEn))] + */ + uint64_t context_enabled : 1; +#define IA32_RTIT_STATUS_CONTEXT_ENABLED_BIT 1 +#define IA32_RTIT_STATUS_CONTEXT_ENABLED_FLAG 0x02 +#define IA32_RTIT_STATUS_CONTEXT_ENABLED_MASK 0x01 +#define IA32_RTIT_STATUS_CONTEXT_ENABLED(_) (((_) >> 1) & 0x01) + + /** + * @brief TriggerEn (writes ignored) + * + * [Bit 2] The processor sets this bit to indicate that tracing is enabled. Writes are ignored. + * + * @see Vol3C[35.2.5.2(Trigger Enable (TriggerEn))] + */ + uint64_t trigger_enabled : 1; +#define IA32_RTIT_STATUS_TRIGGER_ENABLED_BIT 2 +#define IA32_RTIT_STATUS_TRIGGER_ENABLED_FLAG 0x04 +#define IA32_RTIT_STATUS_TRIGGER_ENABLED_MASK 0x01 +#define IA32_RTIT_STATUS_TRIGGER_ENABLED(_) (((_) >> 2) & 0x01) + uint64_t reserved1 : 1; + + /** + * @brief Error + * + * [Bit 4] The processor sets this bit to indicate that an operational error has been encountered. When this bit is set, + * TriggerEn is cleared to 0 and packet generation is disabled. + * When TraceEn is cleared, software can write this bit. Once it is set, only software can clear it. It is not recommended + * that software ever set this bit, except in cases where it is restoring a prior saved state. + * + * @see Vol3C[35.2.6.2(Table of Physical Addresses (ToPA) | ToPA Errors)] + */ + uint64_t error : 1; +#define IA32_RTIT_STATUS_ERROR_BIT 4 +#define IA32_RTIT_STATUS_ERROR_FLAG 0x10 +#define IA32_RTIT_STATUS_ERROR_MASK 0x01 +#define IA32_RTIT_STATUS_ERROR(_) (((_) >> 4) & 0x01) + + /** + * @brief Stopped + * + * [Bit 5] The processor sets this bit to indicate that a ToPA Stop condition has been encountered. When this bit is set, + * TriggerEn is cleared to 0 and packet generation is disabled. + * When TraceEn is cleared, software can write this bit. Once it is set, only software can clear it. It is not recommended + * that software ever set this bit, except in cases where it is restoring a prior saved state. + * + * @see Vol3C[35.2.6.2(Table of Physical Addresses (ToPA) | ToPA STOP)] + */ + uint64_t stopped : 1; +#define IA32_RTIT_STATUS_STOPPED_BIT 5 +#define IA32_RTIT_STATUS_STOPPED_FLAG 0x20 +#define IA32_RTIT_STATUS_STOPPED_MASK 0x01 +#define IA32_RTIT_STATUS_STOPPED(_) (((_) >> 5) & 0x01) + + /** + * @brief Pend PSB + * + * [Bit 6] If IA32_RTIT_CTL.InjectPsbPmiOnEnable[56] = 1, the processor sets this bit when the threshold for a PSB+ to be + * inserted has been reached. The processor will clear this bit when the PSB+ has been inserted into the trace. If PendPSB + * = 1 and InjectPsbPmiOnEnable = 1 when IA32_RTIT_CTL.TraceEn[0] transitions from 0 to 1, a PSB+ will be inserted into the + * trace. + * + * @remarks If CPUID.(EAX=14H, ECX=0):EBX.INJECTPSBPMI[6] = 1 + */ + uint64_t pend_psb : 1; +#define IA32_RTIT_STATUS_PEND_PSB_BIT 6 +#define IA32_RTIT_STATUS_PEND_PSB_FLAG 0x40 +#define IA32_RTIT_STATUS_PEND_PSB_MASK 0x01 +#define IA32_RTIT_STATUS_PEND_PSB(_) (((_) >> 6) & 0x01) + + /** + * @brief Pend ToPA PMI + * + * [Bit 7] If IA32_RTIT_CTL.InjectPsbPmiOnEnable[56] = 1, the processor sets this bit when the threshold for a ToPA PMI to + * be inserted has been reached. Software should clear this bit once the ToPA PMI has been handled. If PendTopaPMI = 1 and + * InjectPsbPmiOnEnable = 1 when IA32_RTIT_CTL.TraceEn[0] transitions from 0 to 1, a PMI will be pended. + * + * @remarks If CPUID.(EAX=14H, ECX=0):EBX.INJECTPSBPMI[6] = 1 + * @see Vol3C[35.2.6.2(Table of Physical Addresses (ToPA) | ToPA PMI)] + */ + uint64_t pend_topa_pmi : 1; +#define IA32_RTIT_STATUS_PEND_TOPA_PMI_BIT 7 +#define IA32_RTIT_STATUS_PEND_TOPA_PMI_FLAG 0x80 +#define IA32_RTIT_STATUS_PEND_TOPA_PMI_MASK 0x01 +#define IA32_RTIT_STATUS_PEND_TOPA_PMI(_) (((_) >> 7) & 0x01) + uint64_t reserved2 : 24; + + /** + * @brief PacketByteCnt + * + * [Bits 48:32] This field is written by the processor, and holds a count of packet bytes that have been sent out. The + * processor also uses this field to determine when the next PSB packet should be inserted. Note that the processor may + * clear or modify this field at any time while IA32_RTIT_CTL.TraceEn=1. It will have a stable value when + * IA32_RTIT_CTL.TraceEn=0. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[1] > 3) + * @see Vol3C[35.4.2.17(Packet Stream Boundary (PSB) Packet)] + */ + uint64_t packet_byte_count : 17; +#define IA32_RTIT_STATUS_PACKET_BYTE_COUNT_BIT 32 +#define IA32_RTIT_STATUS_PACKET_BYTE_COUNT_FLAG 0x1FFFF00000000 +#define IA32_RTIT_STATUS_PACKET_BYTE_COUNT_MASK 0x1FFFF +#define IA32_RTIT_STATUS_PACKET_BYTE_COUNT(_) (((_) >> 32) & 0x1FFFF) + uint64_t reserved3 : 15; + }; + + uint64_t flags; +} ia32_rtit_status_register; + + +/** + * @brief Trace Filter CR3 Match Register (R/W) + * + * The IA32_RTIT_CR3_MATCH register is compared against CR3 when IA32_RTIT_CTL.CR3Filter is 1. Bits 63:5 hold the CR3 + * address value to match, bits 4:0 are reserved to 0. + * + * @remarks If (CPUID.(EAX=07H, ECX=0):EBX[25] = 1) + * @see Vol3C[35.2.4.2(Filtering by CR3)] + * @see Vol3C[35.2.7.6(IA32_RTIT_CR3_MATCH MSR)] (reference) + */ +#define IA32_RTIT_CR3_MATCH 0x00000572 +typedef union +{ + struct + { + uint64_t reserved1 : 5; + + /** + * [Bits 63:5] CR3[63:5] value to match. + */ + uint64_t cr3_value_to_match : 59; +#define IA32_RTIT_CR3_MATCH_CR3_VALUE_TO_MATCH_BIT 5 +#define IA32_RTIT_CR3_MATCH_CR3_VALUE_TO_MATCH_FLAG 0xFFFFFFFFFFFFFFE0 +#define IA32_RTIT_CR3_MATCH_CR3_VALUE_TO_MATCH_MASK 0x7FFFFFFFFFFFFFF +#define IA32_RTIT_CR3_MATCH_CR3_VALUE_TO_MATCH(_) (((_) >> 5) & 0x7FFFFFFFFFFFFFF) + }; + + uint64_t flags; +} ia32_rtit_cr3_match_register; + +/** + * @defgroup ia32_rtit_addr \ + * IA32_RTIT_ADDR(x) + * + * The role of the IA32_RTIT_ADDRn_A/B register pairs, for each n, is determined by the corresponding ADDRn_CFG fields in + * IA32_RTIT_CTL. The number of these register pairs is enumerated by CPUID.(EAX=14H, ECX=1):EAX.RANGECNT[2:0]. + * + * @remarks If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n) + * @see Vol3C[35.2.7.2(IA32_RTIT_CTL MSR)] + * @see Vol3C[35.2.7.5(IA32_RTIT_ADDRn_A and IA32_RTIT_ADDRn_B MSRs)] (reference) + * @{ + */ + /** + * @defgroup ia32_rtit_addr_a \ + * IA32_RTIT_ADDR(n)_A + * + * Region n Start Address. + * + * @remarks If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n) + * @{ + */ +#define IA32_RTIT_ADDR0_A 0x00000580 +#define IA32_RTIT_ADDR1_A 0x00000582 +#define IA32_RTIT_ADDR2_A 0x00000584 +#define IA32_RTIT_ADDR3_A 0x00000586 + /** + * @} + */ + + /** + * @defgroup ia32_rtit_addr_b \ + * IA32_RTIT_ADDR(n)_B + * + * Region n End Address. + * + * @remarks If (CPUID.(EAX=07H, ECX=1):EAX[2:0] > n) + * @{ + */ +#define IA32_RTIT_ADDR0_B 0x00000581 +#define IA32_RTIT_ADDR1_B 0x00000583 +#define IA32_RTIT_ADDR2_B 0x00000585 +#define IA32_RTIT_ADDR3_B 0x00000587 + /** + * @} + */ + +typedef union +{ + struct + { + /** + * [Bits 47:0] Virtual Address. + */ + uint64_t virtual_address : 48; +#define IA32_RTIT_ADDR_VIRTUAL_ADDRESS_BIT 0 +#define IA32_RTIT_ADDR_VIRTUAL_ADDRESS_FLAG 0xFFFFFFFFFFFF +#define IA32_RTIT_ADDR_VIRTUAL_ADDRESS_MASK 0xFFFFFFFFFFFF +#define IA32_RTIT_ADDR_VIRTUAL_ADDRESS(_) (((_) >> 0) & 0xFFFFFFFFFFFF) + + /** + * [Bits 63:48] SignExt_VA. + */ + uint64_t sign_ext_va : 16; +#define IA32_RTIT_ADDR_SIGN_EXT_VA_BIT 48 +#define IA32_RTIT_ADDR_SIGN_EXT_VA_FLAG 0xFFFF000000000000 +#define IA32_RTIT_ADDR_SIGN_EXT_VA_MASK 0xFFFF +#define IA32_RTIT_ADDR_SIGN_EXT_VA(_) (((_) >> 48) & 0xFFFF) + }; + + uint64_t flags; +} ia32_rtit_addr_register; + +/** + * @} + */ + + + /** + * DS Save Area. Points to the linear address of the first byte of the DS buffer management area, which is used to manage + * the BTS and PEBS buffers. + * Returns: + * - [63:0] The linear address of the first byte of the DS buffer management area, if IA-32e mode is active. + * - [31:0] The linear address of the first byte of the DS buffer management area, if not in IA-32e mode. + * - [63:32] Reserved if not in IA-32e mode. + * + * @remarks If CPUID.01H:EDX.DS[21] = 1 + * @see Vol3B[18.6.3.4(Debug Store (DS) Mechanism)] + */ +#define IA32_DS_AREA 0x00000600 + + /** + * TSC Target of Local APIC's TSC Deadline Mode. + * + * @remarks If CPUID.01H:ECX.[24] = 1 + */ +#define IA32_TSC_DEADLINE 0x000006E0 + + /** + * Enable/disable HWP. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + */ +#define IA32_PM_ENABLE 0x00000770 +typedef union +{ + struct + { + /** + * [Bit 0] HWP_ENABLE. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.2(Enabling HWP)] + */ + uint64_t hwp_enable : 1; +#define IA32_PM_ENABLE_HWP_ENABLE_BIT 0 +#define IA32_PM_ENABLE_HWP_ENABLE_FLAG 0x01 +#define IA32_PM_ENABLE_HWP_ENABLE_MASK 0x01 +#define IA32_PM_ENABLE_HWP_ENABLE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 63; + }; + + uint64_t flags; +} ia32_pm_enable_register; + + +/** + * HWP Performance Range Enumeration. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + */ +#define IA32_HWP_CAPABILITIES 0x00000771 +typedef union +{ + struct + { + /** + * [Bits 7:0] Highest_Performance. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.3(HWP Performance Range and Dynamic Capabilities)] + */ + uint64_t highest_performance : 8; +#define IA32_HWP_CAPABILITIES_HIGHEST_PERFORMANCE_BIT 0 +#define IA32_HWP_CAPABILITIES_HIGHEST_PERFORMANCE_FLAG 0xFF +#define IA32_HWP_CAPABILITIES_HIGHEST_PERFORMANCE_MASK 0xFF +#define IA32_HWP_CAPABILITIES_HIGHEST_PERFORMANCE(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 15:8] Guaranteed_Performance. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.3(HWP Performance Range and Dynamic Capabilities)] + */ + uint64_t guaranteed_performance : 8; +#define IA32_HWP_CAPABILITIES_GUARANTEED_PERFORMANCE_BIT 8 +#define IA32_HWP_CAPABILITIES_GUARANTEED_PERFORMANCE_FLAG 0xFF00 +#define IA32_HWP_CAPABILITIES_GUARANTEED_PERFORMANCE_MASK 0xFF +#define IA32_HWP_CAPABILITIES_GUARANTEED_PERFORMANCE(_) (((_) >> 8) & 0xFF) + + /** + * [Bits 23:16] Most_Efficient_Performance. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.3(HWP Performance Range and Dynamic Capabilities)] + */ + uint64_t most_efficient_performance : 8; +#define IA32_HWP_CAPABILITIES_MOST_EFFICIENT_PERFORMANCE_BIT 16 +#define IA32_HWP_CAPABILITIES_MOST_EFFICIENT_PERFORMANCE_FLAG 0xFF0000 +#define IA32_HWP_CAPABILITIES_MOST_EFFICIENT_PERFORMANCE_MASK 0xFF +#define IA32_HWP_CAPABILITIES_MOST_EFFICIENT_PERFORMANCE(_) (((_) >> 16) & 0xFF) + + /** + * [Bits 31:24] Lowest_Performance. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.3(HWP Performance Range and Dynamic Capabilities)] + */ + uint64_t lowest_performance : 8; +#define IA32_HWP_CAPABILITIES_LOWEST_PERFORMANCE_BIT 24 +#define IA32_HWP_CAPABILITIES_LOWEST_PERFORMANCE_FLAG 0xFF000000 +#define IA32_HWP_CAPABILITIES_LOWEST_PERFORMANCE_MASK 0xFF +#define IA32_HWP_CAPABILITIES_LOWEST_PERFORMANCE(_) (((_) >> 24) & 0xFF) + uint64_t reserved1 : 32; + }; + + uint64_t flags; +} ia32_hwp_capabilities_register; + + +/** + * Power Management Control Hints for All Logical Processors in a Package. + * + * @remarks If CPUID.06H:EAX.[11] = 1 + */ +#define IA32_HWP_REQUEST_PKG 0x00000772 +typedef union +{ + struct + { + /** + * [Bits 7:0] Minimum_Performance. + * + * @remarks If CPUID.06H:EAX.[11] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t minimum_performance : 8; +#define IA32_HWP_REQUEST_PKG_MINIMUM_PERFORMANCE_BIT 0 +#define IA32_HWP_REQUEST_PKG_MINIMUM_PERFORMANCE_FLAG 0xFF +#define IA32_HWP_REQUEST_PKG_MINIMUM_PERFORMANCE_MASK 0xFF +#define IA32_HWP_REQUEST_PKG_MINIMUM_PERFORMANCE(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 15:8] Maximum_Performance. + * + * @remarks If CPUID.06H:EAX.[11] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t maximum_performance : 8; +#define IA32_HWP_REQUEST_PKG_MAXIMUM_PERFORMANCE_BIT 8 +#define IA32_HWP_REQUEST_PKG_MAXIMUM_PERFORMANCE_FLAG 0xFF00 +#define IA32_HWP_REQUEST_PKG_MAXIMUM_PERFORMANCE_MASK 0xFF +#define IA32_HWP_REQUEST_PKG_MAXIMUM_PERFORMANCE(_) (((_) >> 8) & 0xFF) + + /** + * [Bits 23:16] Desired_Performance. + * + * @remarks If CPUID.06H:EAX.[11] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t desired_performance : 8; +#define IA32_HWP_REQUEST_PKG_DESIRED_PERFORMANCE_BIT 16 +#define IA32_HWP_REQUEST_PKG_DESIRED_PERFORMANCE_FLAG 0xFF0000 +#define IA32_HWP_REQUEST_PKG_DESIRED_PERFORMANCE_MASK 0xFF +#define IA32_HWP_REQUEST_PKG_DESIRED_PERFORMANCE(_) (((_) >> 16) & 0xFF) + + /** + * [Bits 31:24] Energy_Performance_Preference. + * + * @remarks If CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[10] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t energy_performance_preference : 8; +#define IA32_HWP_REQUEST_PKG_ENERGY_PERFORMANCE_PREFERENCE_BIT 24 +#define IA32_HWP_REQUEST_PKG_ENERGY_PERFORMANCE_PREFERENCE_FLAG 0xFF000000 +#define IA32_HWP_REQUEST_PKG_ENERGY_PERFORMANCE_PREFERENCE_MASK 0xFF +#define IA32_HWP_REQUEST_PKG_ENERGY_PERFORMANCE_PREFERENCE(_) (((_) >> 24) & 0xFF) + + /** + * [Bits 41:32] Activity_Window. + * + * @remarks If CPUID.06H:EAX.[11] = 1 && CPUID.06H:EAX.[9] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t activity_window : 10; +#define IA32_HWP_REQUEST_PKG_ACTIVITY_WINDOW_BIT 32 +#define IA32_HWP_REQUEST_PKG_ACTIVITY_WINDOW_FLAG 0x3FF00000000 +#define IA32_HWP_REQUEST_PKG_ACTIVITY_WINDOW_MASK 0x3FF +#define IA32_HWP_REQUEST_PKG_ACTIVITY_WINDOW(_) (((_) >> 32) & 0x3FF) + uint64_t reserved1 : 22; + }; + + uint64_t flags; +} ia32_hwp_request_pkg_register; + + +/** + * Control HWP Native Interrupts. + * + * @remarks If CPUID.06H:EAX.[8] = 1 + */ +#define IA32_HWP_INTERRUPT 0x00000773 +typedef union +{ + struct + { + /** + * [Bit 0] EN_Guaranteed_Performance_Change. + * + * @remarks If CPUID.06H:EAX.[8] = 1 + * @see Vol3B[14.4.6(HWP Notifications)] + */ + uint64_t en_guaranteed_performance_change : 1; +#define IA32_HWP_INTERRUPT_EN_GUARANTEED_PERFORMANCE_CHANGE_BIT 0 +#define IA32_HWP_INTERRUPT_EN_GUARANTEED_PERFORMANCE_CHANGE_FLAG 0x01 +#define IA32_HWP_INTERRUPT_EN_GUARANTEED_PERFORMANCE_CHANGE_MASK 0x01 +#define IA32_HWP_INTERRUPT_EN_GUARANTEED_PERFORMANCE_CHANGE(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] EN_Excursion_Minimum. + * + * @remarks If CPUID.06H:EAX.[8] = 1 + * @see Vol3B[14.4.6(HWP Notifications)] + */ + uint64_t en_excursion_minimum : 1; +#define IA32_HWP_INTERRUPT_EN_EXCURSION_MINIMUM_BIT 1 +#define IA32_HWP_INTERRUPT_EN_EXCURSION_MINIMUM_FLAG 0x02 +#define IA32_HWP_INTERRUPT_EN_EXCURSION_MINIMUM_MASK 0x01 +#define IA32_HWP_INTERRUPT_EN_EXCURSION_MINIMUM(_) (((_) >> 1) & 0x01) + uint64_t reserved1 : 62; + }; + + uint64_t flags; +} ia32_hwp_interrupt_register; + + +/** + * Power Management Control Hints to a Logical Processor. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + */ +#define IA32_HWP_REQUEST 0x00000774 +typedef union +{ + struct + { + /** + * [Bits 7:0] Minimum_Performance. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t minimum_performance : 8; +#define IA32_HWP_REQUEST_MINIMUM_PERFORMANCE_BIT 0 +#define IA32_HWP_REQUEST_MINIMUM_PERFORMANCE_FLAG 0xFF +#define IA32_HWP_REQUEST_MINIMUM_PERFORMANCE_MASK 0xFF +#define IA32_HWP_REQUEST_MINIMUM_PERFORMANCE(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 15:8] Maximum_Performance. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t maximum_performance : 8; +#define IA32_HWP_REQUEST_MAXIMUM_PERFORMANCE_BIT 8 +#define IA32_HWP_REQUEST_MAXIMUM_PERFORMANCE_FLAG 0xFF00 +#define IA32_HWP_REQUEST_MAXIMUM_PERFORMANCE_MASK 0xFF +#define IA32_HWP_REQUEST_MAXIMUM_PERFORMANCE(_) (((_) >> 8) & 0xFF) + + /** + * [Bits 23:16] Desired_Performance. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t desired_performance : 8; +#define IA32_HWP_REQUEST_DESIRED_PERFORMANCE_BIT 16 +#define IA32_HWP_REQUEST_DESIRED_PERFORMANCE_FLAG 0xFF0000 +#define IA32_HWP_REQUEST_DESIRED_PERFORMANCE_MASK 0xFF +#define IA32_HWP_REQUEST_DESIRED_PERFORMANCE(_) (((_) >> 16) & 0xFF) + + /** + * [Bits 31:24] Energy_Performance_Preference. + * + * @remarks If CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[10] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t energy_performance_preference : 8; +#define IA32_HWP_REQUEST_ENERGY_PERFORMANCE_PREFERENCE_BIT 24 +#define IA32_HWP_REQUEST_ENERGY_PERFORMANCE_PREFERENCE_FLAG 0xFF000000 +#define IA32_HWP_REQUEST_ENERGY_PERFORMANCE_PREFERENCE_MASK 0xFF +#define IA32_HWP_REQUEST_ENERGY_PERFORMANCE_PREFERENCE(_) (((_) >> 24) & 0xFF) + + /** + * [Bits 41:32] Activity_Window. + * + * @remarks If CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[9] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t activity_window : 10; +#define IA32_HWP_REQUEST_ACTIVITY_WINDOW_BIT 32 +#define IA32_HWP_REQUEST_ACTIVITY_WINDOW_FLAG 0x3FF00000000 +#define IA32_HWP_REQUEST_ACTIVITY_WINDOW_MASK 0x3FF +#define IA32_HWP_REQUEST_ACTIVITY_WINDOW(_) (((_) >> 32) & 0x3FF) + + /** + * [Bit 42] Package_Control. + * + * @remarks If CPUID.06H:EAX.[7] = 1 && CPUID.06H:EAX.[11] = 1 + * @see Vol3B[14.4.4(Managing HWP)] + */ + uint64_t package_control : 1; +#define IA32_HWP_REQUEST_PACKAGE_CONTROL_BIT 42 +#define IA32_HWP_REQUEST_PACKAGE_CONTROL_FLAG 0x40000000000 +#define IA32_HWP_REQUEST_PACKAGE_CONTROL_MASK 0x01 +#define IA32_HWP_REQUEST_PACKAGE_CONTROL(_) (((_) >> 42) & 0x01) + uint64_t reserved1 : 21; + }; + + uint64_t flags; +} ia32_hwp_request_register; + + +/** + * Log bits indicating changes to Guaranteed & excursions to Minimum. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + */ +#define IA32_HWP_STATUS 0x00000777 +typedef union +{ + struct + { + /** + * [Bit 0] Guaranteed_Performance_Change. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.5(HWP Feedback)] + */ + uint64_t guaranteed_performance_change : 1; +#define IA32_HWP_STATUS_GUARANTEED_PERFORMANCE_CHANGE_BIT 0 +#define IA32_HWP_STATUS_GUARANTEED_PERFORMANCE_CHANGE_FLAG 0x01 +#define IA32_HWP_STATUS_GUARANTEED_PERFORMANCE_CHANGE_MASK 0x01 +#define IA32_HWP_STATUS_GUARANTEED_PERFORMANCE_CHANGE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 1; + + /** + * [Bit 2] Excursion_To_Minimum. + * + * @remarks If CPUID.06H:EAX.[7] = 1 + * @see Vol3B[14.4.5(HWP Feedback)] + */ + uint64_t excursion_to_minimum : 1; +#define IA32_HWP_STATUS_EXCURSION_TO_MINIMUM_BIT 2 +#define IA32_HWP_STATUS_EXCURSION_TO_MINIMUM_FLAG 0x04 +#define IA32_HWP_STATUS_EXCURSION_TO_MINIMUM_MASK 0x01 +#define IA32_HWP_STATUS_EXCURSION_TO_MINIMUM(_) (((_) >> 2) & 0x01) + uint64_t reserved2 : 61; + }; + + uint64_t flags; +} ia32_hwp_status_register; + + +/** + * x2APIC ID Register. + * + * @remarks If CPUID.01H:ECX[21] = 1 && IA32_APIC_BASE.[10] = 1 + * @see Vol3A[10.12(EXTENDED XAPIC (X2APIC))] + */ +#define IA32_X2APIC_APICID 0x00000802 + + /** + * x2APIC Version Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_VERSION 0x00000803 + + /** + * x2APIC Task Priority Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_TPR 0x00000808 + + /** + * x2APIC Processor Priority Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_PPR 0x0000080A + + /** + * x2APIC EOI Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_EOI 0x0000080B + + /** + * x2APIC Logical Destination Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LDR 0x0000080D + + /** + * x2APIC Spurious Interrupt Vector Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_SIVR 0x0000080F + /** + * @defgroup ia32_x2apic_isr \ + * IA32_X2APIC_ISR(n) + * + * x2APIC In-Service Register Bits (n * 32 + 31):(n * 32). + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + * @{ + */ +#define IA32_X2APIC_ISR0 0x00000810 +#define IA32_X2APIC_ISR1 0x00000811 +#define IA32_X2APIC_ISR2 0x00000812 +#define IA32_X2APIC_ISR3 0x00000813 +#define IA32_X2APIC_ISR4 0x00000814 +#define IA32_X2APIC_ISR5 0x00000815 +#define IA32_X2APIC_ISR6 0x00000816 +#define IA32_X2APIC_ISR7 0x00000817 + /** + * @} + */ + + /** + * @defgroup ia32_x2apic_tmr \ + * IA32_X2APIC_TMR(n) + * + * x2APIC Trigger Mode Register Bits (n * 32 + 31):(n * 32). + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + * @{ + */ +#define IA32_X2APIC_TMR0 0x00000818 +#define IA32_X2APIC_TMR1 0x00000819 +#define IA32_X2APIC_TMR2 0x0000081A +#define IA32_X2APIC_TMR3 0x0000081B +#define IA32_X2APIC_TMR4 0x0000081C +#define IA32_X2APIC_TMR5 0x0000081D +#define IA32_X2APIC_TMR6 0x0000081E +#define IA32_X2APIC_TMR7 0x0000081F + /** + * @} + */ + + /** + * @defgroup ia32_x2apic_irr \ + * IA32_X2APIC_IRR(n) + * + * x2APIC Interrupt Request Register Bits (n * 32 + 31):(n * 32). + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + * @{ + */ +#define IA32_X2APIC_IRR0 0x00000820 +#define IA32_X2APIC_IRR1 0x00000821 +#define IA32_X2APIC_IRR2 0x00000822 +#define IA32_X2APIC_IRR3 0x00000823 +#define IA32_X2APIC_IRR4 0x00000824 +#define IA32_X2APIC_IRR5 0x00000825 +#define IA32_X2APIC_IRR6 0x00000826 +#define IA32_X2APIC_IRR7 0x00000827 + /** + * @} + */ + + + /** + * x2APIC Error Status Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_ESR 0x00000828 + + /** + * x2APIC LVT Corrected Machine Check Interrupt Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LVT_CMCI 0x0000082F + + /** + * x2APIC Interrupt Command Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_ICR 0x00000830 + + /** + * x2APIC LVT Timer Interrupt Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LVT_TIMER 0x00000832 + + /** + * x2APIC LVT Thermal Sensor Interrupt Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LVT_THERMAL 0x00000833 + + /** + * x2APIC LVT Performance Monitor Interrupt Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LVT_PMI 0x00000834 + + /** + * x2APIC LVT LINT0 Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LVT_LINT0 0x00000835 + + /** + * x2APIC LVT LINT1 Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LVT_LINT1 0x00000836 + + /** + * x2APIC LVT Error Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_LVT_ERROR 0x00000837 + + /** + * x2APIC Initial Count Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_INIT_COUNT 0x00000838 + + /** + * x2APIC Current Count Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_CUR_COUNT 0x00000839 + + /** + * x2APIC Divide Configuration Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_DIV_CONF 0x0000083E + + /** + * x2APIC Self IPI Register. + * + * @remarks If CPUID.01H:ECX.[21] = 1 && IA32_APIC_BASE.[10] = 1 + */ +#define IA32_X2APIC_SELF_IPI 0x0000083F + + /** + * Silicon Debug Feature Control. + * + * @remarks If CPUID.01H:ECX.[11] = 1 + */ +#define IA32_DEBUG_INTERFACE 0x00000C80 +typedef union +{ + struct + { + /** + * @brief Enable (R/W) + * + * [Bit 0] BIOS set 1 to enable Silicon debug features. Default is 0. + * + * @remarks If CPUID.01H:ECX.[11] = 1 + */ + uint64_t enable : 1; +#define IA32_DEBUG_INTERFACE_ENABLE_BIT 0 +#define IA32_DEBUG_INTERFACE_ENABLE_FLAG 0x01 +#define IA32_DEBUG_INTERFACE_ENABLE_MASK 0x01 +#define IA32_DEBUG_INTERFACE_ENABLE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 29; + + /** + * @brief Lock (R/W) + * + * [Bit 30] If 1, locks any further change to the MSR. The lock bit is set automatically on the first SMI assertion even if + * not explicitly set by BIOS. Default is 0. + * + * @remarks If CPUID.01H:ECX.[11] = 1 + */ + uint64_t lock : 1; +#define IA32_DEBUG_INTERFACE_LOCK_BIT 30 +#define IA32_DEBUG_INTERFACE_LOCK_FLAG 0x40000000 +#define IA32_DEBUG_INTERFACE_LOCK_MASK 0x01 +#define IA32_DEBUG_INTERFACE_LOCK(_) (((_) >> 30) & 0x01) + + /** + * @brief Debug Occurred (R/O) + * + * [Bit 31] This "sticky bit" is set by hardware to indicate the status of bit 0. Default is 0. + * + * @remarks If CPUID.01H:ECX.[11] = 1 + */ + uint64_t debug_occurred : 1; +#define IA32_DEBUG_INTERFACE_DEBUG_OCCURRED_BIT 31 +#define IA32_DEBUG_INTERFACE_DEBUG_OCCURRED_FLAG 0x80000000 +#define IA32_DEBUG_INTERFACE_DEBUG_OCCURRED_MASK 0x01 +#define IA32_DEBUG_INTERFACE_DEBUG_OCCURRED(_) (((_) >> 31) & 0x01) + uint64_t reserved2 : 32; + }; + + uint64_t flags; +} ia32_debug_interface_register; + + +/** + * L3 QOS Configuration. + * + * @remarks If ( CPUID.(EAX=10H, ECX=1):ECX.[2] = 1 ) + */ +#define IA32_L3_QOS_CFG 0x00000C81 +typedef union +{ + struct + { + /** + * @brief Enable (R/W) + * + * [Bit 0] Set 1 to enable L3 CAT masks and COS to operate in Code and Data Prioritization (CDP) mode. + */ + uint64_t enable : 1; +#define IA32_L3_QOS_CFG_ENABLE_BIT 0 +#define IA32_L3_QOS_CFG_ENABLE_FLAG 0x01 +#define IA32_L3_QOS_CFG_ENABLE_MASK 0x01 +#define IA32_L3_QOS_CFG_ENABLE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 63; + }; + + uint64_t flags; +} ia32_l3_qos_cfg_register; + + +/** + * L2 QOS Configuration. + * + * @remarks If ( CPUID.(EAX=10H, ECX=2):ECX.[2] = 1 ) + */ +#define IA32_L2_QOS_CFG 0x00000C82 +typedef union +{ + struct + { + /** + * @brief Enable (R/W) + * + * [Bit 0] Set 1 to enable L2 CAT masks and COS to operate in Code and Data Prioritization (CDP) mode. + */ + uint64_t enable : 1; +#define IA32_L2_QOS_CFG_ENABLE_BIT 0 +#define IA32_L2_QOS_CFG_ENABLE_FLAG 0x01 +#define IA32_L2_QOS_CFG_ENABLE_MASK 0x01 +#define IA32_L2_QOS_CFG_ENABLE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 63; + }; + + uint64_t flags; +} ia32_l2_qos_cfg_register; + + +/** + * Monitoring Event Select Register. + * + * @remarks If ( CPUID.(EAX=07H, ECX=0):EBX.[12] = 1 ) + */ +#define IA32_QM_EVTSEL 0x00000C8D +typedef union +{ + struct + { + /** + * @brief Event ID + * + * [Bits 7:0] ID of a supported monitoring event to report via IA32_QM_CTR. + */ + uint64_t event_id : 8; +#define IA32_QM_EVTSEL_EVENT_ID_BIT 0 +#define IA32_QM_EVTSEL_EVENT_ID_FLAG 0xFF +#define IA32_QM_EVTSEL_EVENT_ID_MASK 0xFF +#define IA32_QM_EVTSEL_EVENT_ID(_) (((_) >> 0) & 0xFF) + uint64_t reserved1 : 24; + + /** + * @brief Resource Monitoring ID + * + * [Bits 63:32] ID for monitoring hardware to report monitored data via IA32_QM_CTR. + * + * @remarks Bits [N+31:32] N = Ceil (Log2 (CPUID.(EAX= 0FH,ECX=0H).EBX[31:0] + 1)) + */ + uint64_t resource_monitoring_id : 32; +#define IA32_QM_EVTSEL_RESOURCE_MONITORING_ID_BIT 32 +#define IA32_QM_EVTSEL_RESOURCE_MONITORING_ID_FLAG 0xFFFFFFFF00000000 +#define IA32_QM_EVTSEL_RESOURCE_MONITORING_ID_MASK 0xFFFFFFFF +#define IA32_QM_EVTSEL_RESOURCE_MONITORING_ID(_) (((_) >> 32) & 0xFFFFFFFF) + }; + + uint64_t flags; +} ia32_qm_evtsel_register; + + +/** + * Monitoring Counter Register. + * + * @remarks If ( CPUID.(EAX=07H, ECX=0):EBX.[12] = 1 ) + */ +#define IA32_QM_CTR 0x00000C8E +typedef union +{ + struct + { + /** + * [Bits 61:0] Resource Monitored Data. + */ + uint64_t resource_monitored_data : 62; +#define IA32_QM_CTR_RESOURCE_MONITORED_DATA_BIT 0 +#define IA32_QM_CTR_RESOURCE_MONITORED_DATA_FLAG 0x3FFFFFFFFFFFFFFF +#define IA32_QM_CTR_RESOURCE_MONITORED_DATA_MASK 0x3FFFFFFFFFFFFFFF +#define IA32_QM_CTR_RESOURCE_MONITORED_DATA(_) (((_) >> 0) & 0x3FFFFFFFFFFFFFFF) + + /** + * @brief Unavailable + * + * [Bit 62] If 1, indicates data for this RMID is not available or not monitored for this resource or RMID. + */ + uint64_t unavailable : 1; +#define IA32_QM_CTR_UNAVAILABLE_BIT 62 +#define IA32_QM_CTR_UNAVAILABLE_FLAG 0x4000000000000000 +#define IA32_QM_CTR_UNAVAILABLE_MASK 0x01 +#define IA32_QM_CTR_UNAVAILABLE(_) (((_) >> 62) & 0x01) + + /** + * @brief Error + * + * [Bit 63] If 1, indicates an unsupported RMID or event type was written to IA32_PQR_QM_EVTSEL. + */ + uint64_t error : 1; +#define IA32_QM_CTR_ERROR_BIT 63 +#define IA32_QM_CTR_ERROR_FLAG 0x8000000000000000 +#define IA32_QM_CTR_ERROR_MASK 0x01 +#define IA32_QM_CTR_ERROR(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} ia32_qm_ctr_register; + + +/** + * Resource Association Register. + * + * @remarks If ( (CPUID.(EAX=07H, ECX=0):EBX[12] = 1) or (CPUID.(EAX=07H, ECX=0):EBX[15] = 1 ) ) + */ +#define IA32_PQR_ASSOC 0x00000C8F +typedef union +{ + struct + { + /** + * @brief Resource Monitoring ID (R/W) + * + * [Bits 31:0] ID for monitoring hardware to track internal operation, e.g., memory access. + * + * @remarks Bits [N-1:0] N = Ceil (Log2 (CPUID.(EAX= 0FH, ECX=0H).EBX[31:0] +1)) 31:N Reserved + */ + uint64_t resource_monitoring_id : 32; +#define IA32_PQR_ASSOC_RESOURCE_MONITORING_ID_BIT 0 +#define IA32_PQR_ASSOC_RESOURCE_MONITORING_ID_FLAG 0xFFFFFFFF +#define IA32_PQR_ASSOC_RESOURCE_MONITORING_ID_MASK 0xFFFFFFFF +#define IA32_PQR_ASSOC_RESOURCE_MONITORING_ID(_) (((_) >> 0) & 0xFFFFFFFF) + + /** + * @brief COS (R/W) + * + * [Bits 63:32] The class of service (COS) to enforce (on writes); returns the current COS when read. + * + * @remarks If ( CPUID.(EAX=07H, ECX=0):EBX.[15] = 1 ) + */ + uint64_t cos : 32; +#define IA32_PQR_ASSOC_COS_BIT 32 +#define IA32_PQR_ASSOC_COS_FLAG 0xFFFFFFFF00000000 +#define IA32_PQR_ASSOC_COS_MASK 0xFFFFFFFF +#define IA32_PQR_ASSOC_COS(_) (((_) >> 32) & 0xFFFFFFFF) + }; + + uint64_t flags; +} ia32_pqr_assoc_register; + + +/** + * Supervisor State of MPX Configuration. + * + * @remarks If (CPUID.(EAX=07H, ECX=0H):EBX[14] = 1) + */ +#define IA32_BNDCFGS 0x00000D90 +typedef union +{ + struct + { + /** + * [Bit 0] Enable Intel MPX in supervisor mode. + */ + uint64_t enable : 1; +#define IA32_BNDCFGS_ENABLE_BIT 0 +#define IA32_BNDCFGS_ENABLE_FLAG 0x01 +#define IA32_BNDCFGS_ENABLE_MASK 0x01 +#define IA32_BNDCFGS_ENABLE(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Preserve the bounds registers for near branch instructions in the absence of the BND prefix. + */ + uint64_t bnd_preserve : 1; +#define IA32_BNDCFGS_BND_PRESERVE_BIT 1 +#define IA32_BNDCFGS_BND_PRESERVE_FLAG 0x02 +#define IA32_BNDCFGS_BND_PRESERVE_MASK 0x01 +#define IA32_BNDCFGS_BND_PRESERVE(_) (((_) >> 1) & 0x01) + uint64_t reserved1 : 10; + + /** + * [Bits 63:12] Base Address of Bound Directory. + */ + uint64_t bound_directory_base_address : 52; +#define IA32_BNDCFGS_BOUND_DIRECTORY_BASE_ADDRESS_BIT 12 +#define IA32_BNDCFGS_BOUND_DIRECTORY_BASE_ADDRESS_FLAG 0xFFFFFFFFFFFFF000 +#define IA32_BNDCFGS_BOUND_DIRECTORY_BASE_ADDRESS_MASK 0xFFFFFFFFFFFFF +#define IA32_BNDCFGS_BOUND_DIRECTORY_BASE_ADDRESS(_) (((_) >> 12) & 0xFFFFFFFFFFFFF) + }; + + uint64_t flags; +} ia32_bndcfgs_register; + + +/** + * Extended Supervisor State Mask. + * + * @remarks If ( CPUID.(0DH, 1):EAX.[3] = 1 + */ +#define IA32_XSS 0x00000DA0 +typedef union +{ + struct + { + uint64_t reserved1 : 8; + + /** + * [Bit 8] Trace Packet Configuration State. + */ + uint64_t trace_packet_configuration_state : 1; +#define IA32_XSS_TRACE_PACKET_CONFIGURATION_STATE_BIT 8 +#define IA32_XSS_TRACE_PACKET_CONFIGURATION_STATE_FLAG 0x100 +#define IA32_XSS_TRACE_PACKET_CONFIGURATION_STATE_MASK 0x01 +#define IA32_XSS_TRACE_PACKET_CONFIGURATION_STATE(_) (((_) >> 8) & 0x01) + uint64_t reserved2 : 55; + }; + + uint64_t flags; +} ia32_xss_register; + + +/** + * Package Level Enable/disable HDC. + * + * @remarks If CPUID.06H:EAX.[13] = 1 + */ +#define IA32_PKG_HDC_CTL 0x00000DB0 +typedef union +{ + struct + { + /** + * @brief HDC_Pkg_Enable (R/W) + * + * [Bit 0] Force HDC idling or wake up HDC-idled logical processors in the package. + * + * @remarks If CPUID.06H:EAX.[13] = 1 + * @see Vol3B[14.5.2(Package level Enabling HDC)] + */ + uint64_t hdc_pkg_enable : 1; +#define IA32_PKG_HDC_CTL_HDC_PKG_ENABLE_BIT 0 +#define IA32_PKG_HDC_CTL_HDC_PKG_ENABLE_FLAG 0x01 +#define IA32_PKG_HDC_CTL_HDC_PKG_ENABLE_MASK 0x01 +#define IA32_PKG_HDC_CTL_HDC_PKG_ENABLE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 63; + }; + + uint64_t flags; +} ia32_pkg_hdc_ctl_register; + + +/** + * Enable/disable HWP. + * + * @remarks If CPUID.06H:EAX.[13] = 1 + */ +#define IA32_PM_CTL1 0x00000DB1 +typedef union +{ + struct + { + /** + * @brief HDC_Allow_Block (R/W) + * + * [Bit 0] Allow/Block this logical processor for package level HDC control. + * + * @remarks If CPUID.06H:EAX.[13] = 1 + * @see Vol3B[14.5.3(Logical-Processor Level HDC Control)] + */ + uint64_t hdc_allow_block : 1; +#define IA32_PM_CTL1_HDC_ALLOW_BLOCK_BIT 0 +#define IA32_PM_CTL1_HDC_ALLOW_BLOCK_FLAG 0x01 +#define IA32_PM_CTL1_HDC_ALLOW_BLOCK_MASK 0x01 +#define IA32_PM_CTL1_HDC_ALLOW_BLOCK(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 63; + }; + + uint64_t flags; +} ia32_pm_ctl1_register; + + +/** + * Per-Logical_Processor HDC Idle Residency. + * + * @remarks If CPUID.06H:EAX.[13] = 1 + */ +#define IA32_THREAD_STALL 0x00000DB2 +typedef struct +{ + /** + * @brief Stall_Cycle_Cnt (R/W) + * + * Stalled cycles due to HDC forced idle on this logical processor. + * + * @remarks If CPUID.06H:EAX.[13] = 1 + * @see Vol3B[14.5.4.1(IA32_THREAD_STALL)] + */ + uint64_t stall_cycle_count; +} ia32_thread_stall_register; + + +/** + * Extended Feature Enables. + * + * @remarks If CPUID.06H:EAX.[13] = 1 + */ +#define IA32_EFER 0xC0000080 +typedef union +{ + struct + { + /** + * @brief SYSCALL Enable (R/W) + * + * [Bit 0] Enables SYSCALL/SYSRET instructions in 64-bit mode. + */ + uint64_t syscall_enable : 1; +#define IA32_EFER_SYSCALL_ENABLE_BIT 0 +#define IA32_EFER_SYSCALL_ENABLE_FLAG 0x01 +#define IA32_EFER_SYSCALL_ENABLE_MASK 0x01 +#define IA32_EFER_SYSCALL_ENABLE(_) (((_) >> 0) & 0x01) + uint64_t reserved1 : 7; + + /** + * @brief IA-32e Mode Enable (R/W) + * + * [Bit 8] Enables IA-32e mode operation. + */ + uint64_t ia32e_mode_enable : 1; +#define IA32_EFER_IA32E_MODE_ENABLE_BIT 8 +#define IA32_EFER_IA32E_MODE_ENABLE_FLAG 0x100 +#define IA32_EFER_IA32E_MODE_ENABLE_MASK 0x01 +#define IA32_EFER_IA32E_MODE_ENABLE(_) (((_) >> 8) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief IA-32e Mode Active (R) + * + * [Bit 10] Indicates IA-32e mode is active when set. + */ + uint64_t ia32e_mode_active : 1; +#define IA32_EFER_IA32E_MODE_ACTIVE_BIT 10 +#define IA32_EFER_IA32E_MODE_ACTIVE_FLAG 0x400 +#define IA32_EFER_IA32E_MODE_ACTIVE_MASK 0x01 +#define IA32_EFER_IA32E_MODE_ACTIVE(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] Execute Disable Bit Enable. + */ + uint64_t execute_disable_bit_enable : 1; +#define IA32_EFER_EXECUTE_DISABLE_BIT_ENABLE_BIT 11 +#define IA32_EFER_EXECUTE_DISABLE_BIT_ENABLE_FLAG 0x800 +#define IA32_EFER_EXECUTE_DISABLE_BIT_ENABLE_MASK 0x01 +#define IA32_EFER_EXECUTE_DISABLE_BIT_ENABLE(_) (((_) >> 11) & 0x01) + uint64_t reserved3 : 52; + }; + + uint64_t flags; +} ia32_efer_register; + + +/** + * System Call Target Address. + * + * @remarks If CPUID.80000001:EDX.[29] = 1 + */ +#define IA32_STAR 0xC0000081 + + /** + * @brief IA-32e Mode System Call Target Address (R/W) + * + * Target RIP for the called procedure when SYSCALL is executed in 64-bit mode. + * + * @remarks If CPUID.80000001:EDX.[29] = 1 + */ +#define IA32_LSTAR 0xC0000082 + + /** + * @brief IA-32e Mode System Call Target Address (R/W) + * + * Not used, as the SYSCALL instruction is not recognized in compatibility mode. + * + * @remarks If CPUID.80000001:EDX.[29] = 1 + */ +#define IA32_CSTAR 0xC0000083 + + /** + * System Call Flag Mask. + * + * @remarks If CPUID.80000001:EDX.[29] = 1 + */ +#define IA32_FMASK 0xC0000084 + + /** + * Map of BASE Address of FS. + * + * @remarks If CPUID.80000001:EDX.[29] = 1 + */ +#define IA32_FS_BASE 0xC0000100 + + /** + * Map of BASE Address of GS. + * + * @remarks If CPUID.80000001:EDX.[29] = 1 + */ +#define IA32_GS_BASE 0xC0000101 + + /** + * Swap Target of BASE Address of GS. + * + * @remarks If CPUID.80000001:EDX.[29] = 1 + */ +#define IA32_KERNEL_GS_BASE 0xC0000102 + + /** + * Auxiliary TSC. + * + * @remarks If CPUID.80000001H: EDX[27] = 1 or CPUID.(EAX=7,ECX=0):ECX[bit 22] = 1 + */ +#define IA32_TSC_AUX 0xC0000103 +typedef union +{ + struct + { + /** + * [Bits 31:0] AUX. Auxiliary signature of TSC. + */ + uint64_t tsc_auxiliary_signature : 32; +#define IA32_TSC_AUX_TSC_AUXILIARY_SIGNATURE_BIT 0 +#define IA32_TSC_AUX_TSC_AUXILIARY_SIGNATURE_FLAG 0xFFFFFFFF +#define IA32_TSC_AUX_TSC_AUXILIARY_SIGNATURE_MASK 0xFFFFFFFF +#define IA32_TSC_AUX_TSC_AUXILIARY_SIGNATURE(_) (((_) >> 0) & 0xFFFFFFFF) + uint64_t reserved1 : 32; + }; + + uint64_t flags; +} ia32_tsc_aux_register; + +/** + * @} + */ + + /** + * @defgroup paging \ + * Paging + * @{ + */ + /** + * @defgroup paging_32 \ + * 32-Bit Paging + * + * A logical processor uses 32-bit paging if CR0.PG = 1 and CR4.PAE = 0. 32-bit paging translates 32-bit linear addresses + * to 40-bit physical addresses. Although 40 bits corresponds to 1 TByte, linear addresses are limited to 32 bits; at most + * 4 GBytes of linear-address space may be accessed at any given time. + * 32-bit paging uses a hierarchy of paging structures to produce a translation for a linear address. CR3 is used to locate + * the first paging-structure, the page directory. 32-bit paging may map linear addresses to either 4-KByte pages or + * 4-MByte pages. + * + * @see Vol3A[4.5(4-LEVEL PAGING)] (reference) + * @{ + */ + /** + * @brief Format of a 32-Bit Page-Directory Entry that Maps a 4-MByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to map a 4-MByte page. + */ + uint32_t present : 1; +#define PDE_4MB_32_PRESENT_BIT 0 +#define PDE_4MB_32_PRESENT_FLAG 0x01 +#define PDE_4MB_32_PRESENT_MASK 0x01 +#define PDE_4MB_32_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 4-MByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint32_t write : 1; +#define PDE_4MB_32_WRITE_BIT 1 +#define PDE_4MB_32_WRITE_FLAG 0x02 +#define PDE_4MB_32_WRITE_MASK 0x01 +#define PDE_4MB_32_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 4-MByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint32_t supervisor : 1; +#define PDE_4MB_32_SUPERVISOR_BIT 2 +#define PDE_4MB_32_SUPERVISOR_FLAG 0x04 +#define PDE_4MB_32_SUPERVISOR_MASK 0x01 +#define PDE_4MB_32_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the 4-MByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t page_level_write_through : 1; +#define PDE_4MB_32_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PDE_4MB_32_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PDE_4MB_32_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PDE_4MB_32_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the 4-MByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t page_level_cache_disable : 1; +#define PDE_4MB_32_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PDE_4MB_32_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PDE_4MB_32_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PDE_4MB_32_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether software has accessed the 4-MByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint32_t accessed : 1; +#define PDE_4MB_32_ACCESSED_BIT 5 +#define PDE_4MB_32_ACCESSED_FLAG 0x20 +#define PDE_4MB_32_ACCESSED_MASK 0x01 +#define PDE_4MB_32_ACCESSED(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Dirty; indicates whether software has written to the 4-MByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint32_t dirty : 1; +#define PDE_4MB_32_DIRTY_BIT 6 +#define PDE_4MB_32_DIRTY_FLAG 0x40 +#define PDE_4MB_32_DIRTY_MASK 0x01 +#define PDE_4MB_32_DIRTY(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Page size; must be 1 (otherwise, this entry references a page table). + */ + uint32_t large_page : 1; +#define PDE_4MB_32_LARGE_PAGE_BIT 7 +#define PDE_4MB_32_LARGE_PAGE_FLAG 0x80 +#define PDE_4MB_32_LARGE_PAGE_MASK 0x01 +#define PDE_4MB_32_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] Global; if CR4.PGE = 1, determines whether the translation is global; ignored otherwise. + * + * @see Vol3A[4.10(Caching Translation Information)] + */ + uint32_t global : 1; +#define PDE_4MB_32_GLOBAL_BIT 8 +#define PDE_4MB_32_GLOBAL_FLAG 0x100 +#define PDE_4MB_32_GLOBAL_MASK 0x01 +#define PDE_4MB_32_GLOBAL(_) (((_) >> 8) & 0x01) + + /** + * [Bits 11:9] Ignored. + */ + uint32_t ignored_1 : 3; +#define PDE_4MB_32_IGNORED_1_BIT 9 +#define PDE_4MB_32_IGNORED_1_FLAG 0xE00 +#define PDE_4MB_32_IGNORED_1_MASK 0x07 +#define PDE_4MB_32_IGNORED_1(_) (((_) >> 9) & 0x07) + + /** + * [Bit 12] Indirectly determines the memory type used to access the 4-MByte page referenced by this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t pat : 1; +#define PDE_4MB_32_PAT_BIT 12 +#define PDE_4MB_32_PAT_FLAG 0x1000 +#define PDE_4MB_32_PAT_MASK 0x01 +#define PDE_4MB_32_PAT(_) (((_) >> 12) & 0x01) + + /** + * [Bits 20:13] Bits (M-1):32 of physical address of the 4-MByte page referenced by this entry. + */ + uint32_t page_frame_number_low : 8; +#define PDE_4MB_32_PAGE_FRAME_NUMBER_LOW_BIT 13 +#define PDE_4MB_32_PAGE_FRAME_NUMBER_LOW_FLAG 0x1FE000 +#define PDE_4MB_32_PAGE_FRAME_NUMBER_LOW_MASK 0xFF +#define PDE_4MB_32_PAGE_FRAME_NUMBER_LOW(_) (((_) >> 13) & 0xFF) + uint32_t reserved1 : 1; + + /** + * [Bits 31:22] Bits 31:22 of physical address of the 4-MByte page referenced by this entry. + */ + uint32_t page_frame_number_high : 10; +#define PDE_4MB_32_PAGE_FRAME_NUMBER_HIGH_BIT 22 +#define PDE_4MB_32_PAGE_FRAME_NUMBER_HIGH_FLAG 0xFFC00000 +#define PDE_4MB_32_PAGE_FRAME_NUMBER_HIGH_MASK 0x3FF +#define PDE_4MB_32_PAGE_FRAME_NUMBER_HIGH(_) (((_) >> 22) & 0x3FF) + }; + + uint32_t flags; +} pde_4mb_32; + +/** + * @brief Format of a 32-Bit Page-Directory Entry that References a Page Table + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to reference a page table. + */ + uint32_t present : 1; +#define PDE_32_PRESENT_BIT 0 +#define PDE_32_PRESENT_FLAG 0x01 +#define PDE_32_PRESENT_MASK 0x01 +#define PDE_32_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 4-MByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint32_t write : 1; +#define PDE_32_WRITE_BIT 1 +#define PDE_32_WRITE_FLAG 0x02 +#define PDE_32_WRITE_MASK 0x01 +#define PDE_32_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 4-MByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint32_t supervisor : 1; +#define PDE_32_SUPERVISOR_BIT 2 +#define PDE_32_SUPERVISOR_FLAG 0x04 +#define PDE_32_SUPERVISOR_MASK 0x01 +#define PDE_32_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the page table referenced by this + * entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t page_level_write_through : 1; +#define PDE_32_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PDE_32_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PDE_32_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PDE_32_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the page table referenced by this + * entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t page_level_cache_disable : 1; +#define PDE_32_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PDE_32_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PDE_32_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PDE_32_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether this entry has been used for linear-address translation. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint32_t accessed : 1; +#define PDE_32_ACCESSED_BIT 5 +#define PDE_32_ACCESSED_FLAG 0x20 +#define PDE_32_ACCESSED_MASK 0x01 +#define PDE_32_ACCESSED(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Ignored. + */ + uint32_t ignored_1 : 1; +#define PDE_32_IGNORED_1_BIT 6 +#define PDE_32_IGNORED_1_FLAG 0x40 +#define PDE_32_IGNORED_1_MASK 0x01 +#define PDE_32_IGNORED_1(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] If CR4.PSE = 1, must be 0 (otherwise, this entry maps a 4-MByte page); otherwise, ignored. + */ + uint32_t large_page : 1; +#define PDE_32_LARGE_PAGE_BIT 7 +#define PDE_32_LARGE_PAGE_FLAG 0x80 +#define PDE_32_LARGE_PAGE_MASK 0x01 +#define PDE_32_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bits 11:8] Ignored. + */ + uint32_t ignored_2 : 4; +#define PDE_32_IGNORED_2_BIT 8 +#define PDE_32_IGNORED_2_FLAG 0xF00 +#define PDE_32_IGNORED_2_MASK 0x0F +#define PDE_32_IGNORED_2(_) (((_) >> 8) & 0x0F) + + /** + * [Bits 31:12] Physical address of 4-KByte aligned page table referenced by this entry. + */ + uint32_t page_frame_number : 20; +#define PDE_32_PAGE_FRAME_NUMBER_BIT 12 +#define PDE_32_PAGE_FRAME_NUMBER_FLAG 0xFFFFF000 +#define PDE_32_PAGE_FRAME_NUMBER_MASK 0xFFFFF +#define PDE_32_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFF) + }; + + uint32_t flags; +} pde_32; + +/** + * @brief Format of a 32-Bit Page-Table Entry that Maps a 4-KByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to map a 4-KByte page. + */ + uint32_t present : 1; +#define PTE_32_PRESENT_BIT 0 +#define PTE_32_PRESENT_FLAG 0x01 +#define PTE_32_PRESENT_MASK 0x01 +#define PTE_32_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint32_t write : 1; +#define PTE_32_WRITE_BIT 1 +#define PTE_32_WRITE_FLAG 0x02 +#define PTE_32_WRITE_MASK 0x01 +#define PTE_32_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint32_t supervisor : 1; +#define PTE_32_SUPERVISOR_BIT 2 +#define PTE_32_SUPERVISOR_FLAG 0x04 +#define PTE_32_SUPERVISOR_MASK 0x01 +#define PTE_32_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the 4-KByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t page_level_write_through : 1; +#define PTE_32_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PTE_32_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PTE_32_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PTE_32_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the 4-KByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t page_level_cache_disable : 1; +#define PTE_32_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PTE_32_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PTE_32_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PTE_32_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether software has accessed the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint32_t accessed : 1; +#define PTE_32_ACCESSED_BIT 5 +#define PTE_32_ACCESSED_FLAG 0x20 +#define PTE_32_ACCESSED_MASK 0x01 +#define PTE_32_ACCESSED(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Dirty; indicates whether software has written to the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint32_t dirty : 1; +#define PTE_32_DIRTY_BIT 6 +#define PTE_32_DIRTY_FLAG 0x40 +#define PTE_32_DIRTY_MASK 0x01 +#define PTE_32_DIRTY(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Indirectly determines the memory type used to access the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint32_t pat : 1; +#define PTE_32_PAT_BIT 7 +#define PTE_32_PAT_FLAG 0x80 +#define PTE_32_PAT_MASK 0x01 +#define PTE_32_PAT(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] Global; if CR4.PGE = 1, determines whether the translation is global; ignored otherwise. + * + * @see Vol3A[4.10(Caching Translation Information)] + */ + uint32_t global : 1; +#define PTE_32_GLOBAL_BIT 8 +#define PTE_32_GLOBAL_FLAG 0x100 +#define PTE_32_GLOBAL_MASK 0x01 +#define PTE_32_GLOBAL(_) (((_) >> 8) & 0x01) + + /** + * [Bits 11:9] Ignored. + */ + uint32_t ignored_1 : 3; +#define PTE_32_IGNORED_1_BIT 9 +#define PTE_32_IGNORED_1_FLAG 0xE00 +#define PTE_32_IGNORED_1_MASK 0x07 +#define PTE_32_IGNORED_1(_) (((_) >> 9) & 0x07) + + /** + * [Bits 31:12] Physical address of 4-KByte aligned page table referenced by this entry. + */ + uint32_t page_frame_number : 20; +#define PTE_32_PAGE_FRAME_NUMBER_BIT 12 +#define PTE_32_PAGE_FRAME_NUMBER_FLAG 0xFFFFF000 +#define PTE_32_PAGE_FRAME_NUMBER_MASK 0xFFFFF +#define PTE_32_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFF) + }; + + uint32_t flags; +} pte_32; + +/** + * @brief Format of a common Page-Table Entry + */ +typedef union +{ + struct + { + uint32_t present : 1; +#define PT_ENTRY_32_PRESENT_BIT 0 +#define PT_ENTRY_32_PRESENT_FLAG 0x01 +#define PT_ENTRY_32_PRESENT_MASK 0x01 +#define PT_ENTRY_32_PRESENT(_) (((_) >> 0) & 0x01) + uint32_t write : 1; +#define PT_ENTRY_32_WRITE_BIT 1 +#define PT_ENTRY_32_WRITE_FLAG 0x02 +#define PT_ENTRY_32_WRITE_MASK 0x01 +#define PT_ENTRY_32_WRITE(_) (((_) >> 1) & 0x01) + uint32_t supervisor : 1; +#define PT_ENTRY_32_SUPERVISOR_BIT 2 +#define PT_ENTRY_32_SUPERVISOR_FLAG 0x04 +#define PT_ENTRY_32_SUPERVISOR_MASK 0x01 +#define PT_ENTRY_32_SUPERVISOR(_) (((_) >> 2) & 0x01) + uint32_t page_level_write_through : 1; +#define PT_ENTRY_32_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PT_ENTRY_32_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PT_ENTRY_32_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PT_ENTRY_32_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + uint32_t page_level_cache_disable : 1; +#define PT_ENTRY_32_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PT_ENTRY_32_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PT_ENTRY_32_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PT_ENTRY_32_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + uint32_t accessed : 1; +#define PT_ENTRY_32_ACCESSED_BIT 5 +#define PT_ENTRY_32_ACCESSED_FLAG 0x20 +#define PT_ENTRY_32_ACCESSED_MASK 0x01 +#define PT_ENTRY_32_ACCESSED(_) (((_) >> 5) & 0x01) + uint32_t dirty : 1; +#define PT_ENTRY_32_DIRTY_BIT 6 +#define PT_ENTRY_32_DIRTY_FLAG 0x40 +#define PT_ENTRY_32_DIRTY_MASK 0x01 +#define PT_ENTRY_32_DIRTY(_) (((_) >> 6) & 0x01) + uint32_t large_page : 1; +#define PT_ENTRY_32_LARGE_PAGE_BIT 7 +#define PT_ENTRY_32_LARGE_PAGE_FLAG 0x80 +#define PT_ENTRY_32_LARGE_PAGE_MASK 0x01 +#define PT_ENTRY_32_LARGE_PAGE(_) (((_) >> 7) & 0x01) + uint32_t global : 1; +#define PT_ENTRY_32_GLOBAL_BIT 8 +#define PT_ENTRY_32_GLOBAL_FLAG 0x100 +#define PT_ENTRY_32_GLOBAL_MASK 0x01 +#define PT_ENTRY_32_GLOBAL(_) (((_) >> 8) & 0x01) + + /** + * [Bits 11:9] Ignored. + */ + uint32_t ignored_1 : 3; +#define PT_ENTRY_32_IGNORED_1_BIT 9 +#define PT_ENTRY_32_IGNORED_1_FLAG 0xE00 +#define PT_ENTRY_32_IGNORED_1_MASK 0x07 +#define PT_ENTRY_32_IGNORED_1(_) (((_) >> 9) & 0x07) + + /** + * [Bits 31:12] Physical address of the 4-KByte page referenced by this entry. + */ + uint32_t page_frame_number : 20; +#define PT_ENTRY_32_PAGE_FRAME_NUMBER_BIT 12 +#define PT_ENTRY_32_PAGE_FRAME_NUMBER_FLAG 0xFFFFF000 +#define PT_ENTRY_32_PAGE_FRAME_NUMBER_MASK 0xFFFFF +#define PT_ENTRY_32_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFF) + }; + + uint32_t flags; +} pt_entry_32; + +/** + * @defgroup paging_structures_entry_count_32 \ + * Paging structures entry counts + * + * Paging structures entry counts. + * @{ + */ +#define PDE_ENTRY_COUNT_32 0x00000400 +#define PTE_ENTRY_COUNT_32 0x00000400 + /** + * @} + */ + + /** + * @} + */ + + /** + * @defgroup paging_64 \ + * 64-Bit (4-Level) Paging + * + * A logical processor uses 4-level paging if CR0.PG = 1, CR4.PAE = 1, and IA32_EFER.LME = 1. With 4-level paging, linear + * address are translated using a hierarchy of in-memory paging structures located using the contents of CR3. 4-level + * paging translates 48-bit linear addresses to 52-bit physical addresses. Although 52 bits corresponds to 4 PBytes, linear + * addresses are limited to 48 bits; at most 256 TBytes of linear-address space may be accessed at any given time. + * 4-level paging uses a hierarchy of paging structures to produce a translation for a linear address. CR3 is used to + * locate the first paging-structure, the PML4 table. Use of CR3 with 4-level paging depends on whether processcontext + * identifiers (PCIDs) have been enabled by setting CR4.PCIDE. + * + * @see Vol3A[4.5(4-LEVEL PAGING)] (reference) + * @{ + */ + /** + * @brief Format of a 4-Level PML4 Entry (PML4E) that References a Page-Directory-Pointer Table + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to reference a page-directory-pointer table. + */ + uint64_t present : 1; +#define PML4E_64_PRESENT_BIT 0 +#define PML4E_64_PRESENT_FLAG 0x01 +#define PML4E_64_PRESENT_MASK 0x01 +#define PML4E_64_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 512-GByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t write : 1; +#define PML4E_64_WRITE_BIT 1 +#define PML4E_64_WRITE_FLAG 0x02 +#define PML4E_64_WRITE_MASK 0x01 +#define PML4E_64_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 512-GByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t supervisor : 1; +#define PML4E_64_SUPERVISOR_BIT 2 +#define PML4E_64_SUPERVISOR_FLAG 0x04 +#define PML4E_64_SUPERVISOR_MASK 0x01 +#define PML4E_64_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the page-directory-pointer table + * referenced by this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_write_through : 1; +#define PML4E_64_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PML4E_64_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PML4E_64_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PML4E_64_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the page-directory-pointer table + * referenced by this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_cache_disable : 1; +#define PML4E_64_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PML4E_64_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PML4E_64_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PML4E_64_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether this entry has been used for linear-address translation. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t accessed : 1; +#define PML4E_64_ACCESSED_BIT 5 +#define PML4E_64_ACCESSED_FLAG 0x20 +#define PML4E_64_ACCESSED_MASK 0x01 +#define PML4E_64_ACCESSED(_) (((_) >> 5) & 0x01) + uint64_t reserved1 : 1; + + /** + * [Bit 7] Reserved (must be 0). + */ + uint64_t must_be_zero : 1; +#define PML4E_64_MUST_BE_ZERO_BIT 7 +#define PML4E_64_MUST_BE_ZERO_FLAG 0x80 +#define PML4E_64_MUST_BE_ZERO_MASK 0x01 +#define PML4E_64_MUST_BE_ZERO(_) (((_) >> 7) & 0x01) + + /** + * [Bits 11:8] Ignored. + */ + uint64_t ignored_1 : 4; +#define PML4E_64_IGNORED_1_BIT 8 +#define PML4E_64_IGNORED_1_FLAG 0xF00 +#define PML4E_64_IGNORED_1_MASK 0x0F +#define PML4E_64_IGNORED_1(_) (((_) >> 8) & 0x0F) + + /** + * [Bits 47:12] Physical address of 4-KByte aligned page-directory-pointer table referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define PML4E_64_PAGE_FRAME_NUMBER_BIT 12 +#define PML4E_64_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define PML4E_64_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define PML4E_64_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved2 : 4; + + /** + * [Bits 62:52] Ignored. + */ + uint64_t ignored_2 : 11; +#define PML4E_64_IGNORED_2_BIT 52 +#define PML4E_64_IGNORED_2_FLAG 0x7FF0000000000000 +#define PML4E_64_IGNORED_2_MASK 0x7FF +#define PML4E_64_IGNORED_2(_) (((_) >> 52) & 0x7FF) + + /** + * [Bit 63] If IA32_EFER.NXE = 1, execute-disable (if 1, instruction fetches are not allowed from the 512-GByte region + * controlled by this entry); otherwise, reserved (must be 0). + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t execute_disable : 1; +#define PML4E_64_EXECUTE_DISABLE_BIT 63 +#define PML4E_64_EXECUTE_DISABLE_FLAG 0x8000000000000000 +#define PML4E_64_EXECUTE_DISABLE_MASK 0x01 +#define PML4E_64_EXECUTE_DISABLE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} pml4e_64; + +/** + * @brief Format of a 4-Level Page-Directory-Pointer-Table Entry (PDPTE) that Maps a 1-GByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to map a 1-GByte page. + */ + uint64_t present : 1; +#define PDPTE_1GB_64_PRESENT_BIT 0 +#define PDPTE_1GB_64_PRESENT_FLAG 0x01 +#define PDPTE_1GB_64_PRESENT_MASK 0x01 +#define PDPTE_1GB_64_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 1-GByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t write : 1; +#define PDPTE_1GB_64_WRITE_BIT 1 +#define PDPTE_1GB_64_WRITE_FLAG 0x02 +#define PDPTE_1GB_64_WRITE_MASK 0x01 +#define PDPTE_1GB_64_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 1-GByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t supervisor : 1; +#define PDPTE_1GB_64_SUPERVISOR_BIT 2 +#define PDPTE_1GB_64_SUPERVISOR_FLAG 0x04 +#define PDPTE_1GB_64_SUPERVISOR_MASK 0x01 +#define PDPTE_1GB_64_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the 1-GByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_write_through : 1; +#define PDPTE_1GB_64_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PDPTE_1GB_64_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PDPTE_1GB_64_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PDPTE_1GB_64_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the 1-GByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_cache_disable : 1; +#define PDPTE_1GB_64_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PDPTE_1GB_64_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PDPTE_1GB_64_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PDPTE_1GB_64_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether software has accessed the 1-GByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t accessed : 1; +#define PDPTE_1GB_64_ACCESSED_BIT 5 +#define PDPTE_1GB_64_ACCESSED_FLAG 0x20 +#define PDPTE_1GB_64_ACCESSED_MASK 0x01 +#define PDPTE_1GB_64_ACCESSED(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Dirty; indicates whether software has written to the 1-GByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t dirty : 1; +#define PDPTE_1GB_64_DIRTY_BIT 6 +#define PDPTE_1GB_64_DIRTY_FLAG 0x40 +#define PDPTE_1GB_64_DIRTY_MASK 0x01 +#define PDPTE_1GB_64_DIRTY(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Page size; must be 1 (otherwise, this entry references a page directory). + */ + uint64_t large_page : 1; +#define PDPTE_1GB_64_LARGE_PAGE_BIT 7 +#define PDPTE_1GB_64_LARGE_PAGE_FLAG 0x80 +#define PDPTE_1GB_64_LARGE_PAGE_MASK 0x01 +#define PDPTE_1GB_64_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] Global; if CR4.PGE = 1, determines whether the translation is global; ignored otherwise. + * + * @see Vol3A[4.10(Caching Translation Information)] + */ + uint64_t global : 1; +#define PDPTE_1GB_64_GLOBAL_BIT 8 +#define PDPTE_1GB_64_GLOBAL_FLAG 0x100 +#define PDPTE_1GB_64_GLOBAL_MASK 0x01 +#define PDPTE_1GB_64_GLOBAL(_) (((_) >> 8) & 0x01) + + /** + * [Bits 11:9] Ignored. + */ + uint64_t ignored_1 : 3; +#define PDPTE_1GB_64_IGNORED_1_BIT 9 +#define PDPTE_1GB_64_IGNORED_1_FLAG 0xE00 +#define PDPTE_1GB_64_IGNORED_1_MASK 0x07 +#define PDPTE_1GB_64_IGNORED_1(_) (((_) >> 9) & 0x07) + + /** + * [Bit 12] Indirectly determines the memory type used to access the 1-GByte page referenced by this entry. + * + * @note The PAT is supported on all processors that support 4-level paging. + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t pat : 1; +#define PDPTE_1GB_64_PAT_BIT 12 +#define PDPTE_1GB_64_PAT_FLAG 0x1000 +#define PDPTE_1GB_64_PAT_MASK 0x01 +#define PDPTE_1GB_64_PAT(_) (((_) >> 12) & 0x01) + uint64_t reserved1 : 17; + + /** + * [Bits 47:30] Physical address of the 1-GByte page referenced by this entry. + */ + uint64_t page_frame_number : 18; +#define PDPTE_1GB_64_PAGE_FRAME_NUMBER_BIT 30 +#define PDPTE_1GB_64_PAGE_FRAME_NUMBER_FLAG 0xFFFFC0000000 +#define PDPTE_1GB_64_PAGE_FRAME_NUMBER_MASK 0x3FFFF +#define PDPTE_1GB_64_PAGE_FRAME_NUMBER(_) (((_) >> 30) & 0x3FFFF) + uint64_t reserved2 : 4; + + /** + * [Bits 58:52] Ignored. + */ + uint64_t ignored_2 : 7; +#define PDPTE_1GB_64_IGNORED_2_BIT 52 +#define PDPTE_1GB_64_IGNORED_2_FLAG 0x7F0000000000000 +#define PDPTE_1GB_64_IGNORED_2_MASK 0x7F +#define PDPTE_1GB_64_IGNORED_2(_) (((_) >> 52) & 0x7F) + + /** + * [Bits 62:59] Protection key; if CR4.PKE = 1, determines the protection key of the page; ignored otherwise. + * + * @see Vol3A[4.6.2(Protection Keys)] + */ + uint64_t protection_key : 4; +#define PDPTE_1GB_64_PROTECTION_KEY_BIT 59 +#define PDPTE_1GB_64_PROTECTION_KEY_FLAG 0x7800000000000000 +#define PDPTE_1GB_64_PROTECTION_KEY_MASK 0x0F +#define PDPTE_1GB_64_PROTECTION_KEY(_) (((_) >> 59) & 0x0F) + + /** + * [Bit 63] If IA32_EFER.NXE = 1, execute-disable (if 1, instruction fetches are not allowed from the 1-GByte page + * controlled by this entry); otherwise, reserved (must be 0). + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t execute_disable : 1; +#define PDPTE_1GB_64_EXECUTE_DISABLE_BIT 63 +#define PDPTE_1GB_64_EXECUTE_DISABLE_FLAG 0x8000000000000000 +#define PDPTE_1GB_64_EXECUTE_DISABLE_MASK 0x01 +#define PDPTE_1GB_64_EXECUTE_DISABLE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} pdpte_1gb_64; + +/** + * @brief Format of a 4-Level Page-Directory-Pointer-Table Entry (PDPTE) that References a Page Directory + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to reference a page directory. + */ + uint64_t present : 1; +#define PDPTE_64_PRESENT_BIT 0 +#define PDPTE_64_PRESENT_FLAG 0x01 +#define PDPTE_64_PRESENT_MASK 0x01 +#define PDPTE_64_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 1-GByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t write : 1; +#define PDPTE_64_WRITE_BIT 1 +#define PDPTE_64_WRITE_FLAG 0x02 +#define PDPTE_64_WRITE_MASK 0x01 +#define PDPTE_64_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 1-GByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t supervisor : 1; +#define PDPTE_64_SUPERVISOR_BIT 2 +#define PDPTE_64_SUPERVISOR_FLAG 0x04 +#define PDPTE_64_SUPERVISOR_MASK 0x01 +#define PDPTE_64_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the page directory referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_write_through : 1; +#define PDPTE_64_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PDPTE_64_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PDPTE_64_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PDPTE_64_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the page directory referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_cache_disable : 1; +#define PDPTE_64_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PDPTE_64_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PDPTE_64_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PDPTE_64_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether this entry has been used for linear-address translation. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t accessed : 1; +#define PDPTE_64_ACCESSED_BIT 5 +#define PDPTE_64_ACCESSED_FLAG 0x20 +#define PDPTE_64_ACCESSED_MASK 0x01 +#define PDPTE_64_ACCESSED(_) (((_) >> 5) & 0x01) + uint64_t reserved1 : 1; + + /** + * [Bit 7] Page size; must be 0 (otherwise, this entry maps a 1-GByte page). + */ + uint64_t large_page : 1; +#define PDPTE_64_LARGE_PAGE_BIT 7 +#define PDPTE_64_LARGE_PAGE_FLAG 0x80 +#define PDPTE_64_LARGE_PAGE_MASK 0x01 +#define PDPTE_64_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bits 11:8] Ignored. + */ + uint64_t ignored_1 : 4; +#define PDPTE_64_IGNORED_1_BIT 8 +#define PDPTE_64_IGNORED_1_FLAG 0xF00 +#define PDPTE_64_IGNORED_1_MASK 0x0F +#define PDPTE_64_IGNORED_1(_) (((_) >> 8) & 0x0F) + + /** + * [Bits 47:12] Physical address of 4-KByte aligned page directory referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define PDPTE_64_PAGE_FRAME_NUMBER_BIT 12 +#define PDPTE_64_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define PDPTE_64_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define PDPTE_64_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved2 : 4; + + /** + * [Bits 62:52] Ignored. + */ + uint64_t ignored_2 : 11; +#define PDPTE_64_IGNORED_2_BIT 52 +#define PDPTE_64_IGNORED_2_FLAG 0x7FF0000000000000 +#define PDPTE_64_IGNORED_2_MASK 0x7FF +#define PDPTE_64_IGNORED_2(_) (((_) >> 52) & 0x7FF) + + /** + * [Bit 63] If IA32_EFER.NXE = 1, execute-disable (if 1, instruction fetches are not allowed from the 1-GByte region + * controlled by this entry); otherwise, reserved (must be 0). + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t execute_disable : 1; +#define PDPTE_64_EXECUTE_DISABLE_BIT 63 +#define PDPTE_64_EXECUTE_DISABLE_FLAG 0x8000000000000000 +#define PDPTE_64_EXECUTE_DISABLE_MASK 0x01 +#define PDPTE_64_EXECUTE_DISABLE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} pdpte_64; + +/** + * @brief Format of a 4-Level Page-Directory Entry that Maps a 2-MByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to map a 2-MByte page. + */ + uint64_t present : 1; +#define PDE_2MB_64_PRESENT_BIT 0 +#define PDE_2MB_64_PRESENT_FLAG 0x01 +#define PDE_2MB_64_PRESENT_MASK 0x01 +#define PDE_2MB_64_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 2-MByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t write : 1; +#define PDE_2MB_64_WRITE_BIT 1 +#define PDE_2MB_64_WRITE_FLAG 0x02 +#define PDE_2MB_64_WRITE_MASK 0x01 +#define PDE_2MB_64_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 2-MByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t supervisor : 1; +#define PDE_2MB_64_SUPERVISOR_BIT 2 +#define PDE_2MB_64_SUPERVISOR_FLAG 0x04 +#define PDE_2MB_64_SUPERVISOR_MASK 0x01 +#define PDE_2MB_64_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the 2-MByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_write_through : 1; +#define PDE_2MB_64_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PDE_2MB_64_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PDE_2MB_64_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PDE_2MB_64_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the 2-MByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_cache_disable : 1; +#define PDE_2MB_64_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PDE_2MB_64_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PDE_2MB_64_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PDE_2MB_64_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether software has accessed the 2-MByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t accessed : 1; +#define PDE_2MB_64_ACCESSED_BIT 5 +#define PDE_2MB_64_ACCESSED_FLAG 0x20 +#define PDE_2MB_64_ACCESSED_MASK 0x01 +#define PDE_2MB_64_ACCESSED(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Dirty; indicates whether software has written to the 2-MByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t dirty : 1; +#define PDE_2MB_64_DIRTY_BIT 6 +#define PDE_2MB_64_DIRTY_FLAG 0x40 +#define PDE_2MB_64_DIRTY_MASK 0x01 +#define PDE_2MB_64_DIRTY(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Page size; must be 1 (otherwise, this entry references a page directory). + */ + uint64_t large_page : 1; +#define PDE_2MB_64_LARGE_PAGE_BIT 7 +#define PDE_2MB_64_LARGE_PAGE_FLAG 0x80 +#define PDE_2MB_64_LARGE_PAGE_MASK 0x01 +#define PDE_2MB_64_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] Global; if CR4.PGE = 1, determines whether the translation is global; ignored otherwise. + * + * @see Vol3A[4.10(Caching Translation Information)] + */ + uint64_t global : 1; +#define PDE_2MB_64_GLOBAL_BIT 8 +#define PDE_2MB_64_GLOBAL_FLAG 0x100 +#define PDE_2MB_64_GLOBAL_MASK 0x01 +#define PDE_2MB_64_GLOBAL(_) (((_) >> 8) & 0x01) + + /** + * [Bits 11:9] Ignored. + */ + uint64_t ignored_1 : 3; +#define PDE_2MB_64_IGNORED_1_BIT 9 +#define PDE_2MB_64_IGNORED_1_FLAG 0xE00 +#define PDE_2MB_64_IGNORED_1_MASK 0x07 +#define PDE_2MB_64_IGNORED_1(_) (((_) >> 9) & 0x07) + + /** + * [Bit 12] Indirectly determines the memory type used to access the 2-MByte page referenced by this entry. + * + * @note The PAT is supported on all processors that support 4-level paging. + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t pat : 1; +#define PDE_2MB_64_PAT_BIT 12 +#define PDE_2MB_64_PAT_FLAG 0x1000 +#define PDE_2MB_64_PAT_MASK 0x01 +#define PDE_2MB_64_PAT(_) (((_) >> 12) & 0x01) + uint64_t reserved1 : 8; + + /** + * [Bits 47:21] Physical address of the 2-MByte page referenced by this entry. + */ + uint64_t page_frame_number : 27; +#define PDE_2MB_64_PAGE_FRAME_NUMBER_BIT 21 +#define PDE_2MB_64_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFE00000 +#define PDE_2MB_64_PAGE_FRAME_NUMBER_MASK 0x7FFFFFF +#define PDE_2MB_64_PAGE_FRAME_NUMBER(_) (((_) >> 21) & 0x7FFFFFF) + uint64_t reserved2 : 4; + + /** + * [Bits 58:52] Ignored. + */ + uint64_t ignored_2 : 7; +#define PDE_2MB_64_IGNORED_2_BIT 52 +#define PDE_2MB_64_IGNORED_2_FLAG 0x7F0000000000000 +#define PDE_2MB_64_IGNORED_2_MASK 0x7F +#define PDE_2MB_64_IGNORED_2(_) (((_) >> 52) & 0x7F) + + /** + * [Bits 62:59] Protection key; if CR4.PKE = 1, determines the protection key of the page; ignored otherwise. + * + * @see Vol3A[4.6.2(Protection Keys)] + */ + uint64_t protection_key : 4; +#define PDE_2MB_64_PROTECTION_KEY_BIT 59 +#define PDE_2MB_64_PROTECTION_KEY_FLAG 0x7800000000000000 +#define PDE_2MB_64_PROTECTION_KEY_MASK 0x0F +#define PDE_2MB_64_PROTECTION_KEY(_) (((_) >> 59) & 0x0F) + + /** + * [Bit 63] If IA32_EFER.NXE = 1, execute-disable (if 1, instruction fetches are not allowed from the 2-MByte page + * controlled by this entry); otherwise, reserved (must be 0). + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t execute_disable : 1; +#define PDE_2MB_64_EXECUTE_DISABLE_BIT 63 +#define PDE_2MB_64_EXECUTE_DISABLE_FLAG 0x8000000000000000 +#define PDE_2MB_64_EXECUTE_DISABLE_MASK 0x01 +#define PDE_2MB_64_EXECUTE_DISABLE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} pde_2mb_64; + +/** + * @brief Format of a 4-Level Page-Directory Entry that References a Page Table + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to reference a page table. + */ + uint64_t present : 1; +#define PDE_64_PRESENT_BIT 0 +#define PDE_64_PRESENT_FLAG 0x01 +#define PDE_64_PRESENT_MASK 0x01 +#define PDE_64_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 2-MByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t write : 1; +#define PDE_64_WRITE_BIT 1 +#define PDE_64_WRITE_FLAG 0x02 +#define PDE_64_WRITE_MASK 0x01 +#define PDE_64_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 2-MByte region controlled by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t supervisor : 1; +#define PDE_64_SUPERVISOR_BIT 2 +#define PDE_64_SUPERVISOR_FLAG 0x04 +#define PDE_64_SUPERVISOR_MASK 0x01 +#define PDE_64_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the page table referenced by this + * entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_write_through : 1; +#define PDE_64_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PDE_64_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PDE_64_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PDE_64_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the page table referenced by this + * entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_cache_disable : 1; +#define PDE_64_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PDE_64_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PDE_64_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PDE_64_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether this entry has been used for linear-address translation. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t accessed : 1; +#define PDE_64_ACCESSED_BIT 5 +#define PDE_64_ACCESSED_FLAG 0x20 +#define PDE_64_ACCESSED_MASK 0x01 +#define PDE_64_ACCESSED(_) (((_) >> 5) & 0x01) + uint64_t reserved1 : 1; + + /** + * [Bit 7] Page size; must be 0 (otherwise, this entry maps a 2-MByte page). + */ + uint64_t large_page : 1; +#define PDE_64_LARGE_PAGE_BIT 7 +#define PDE_64_LARGE_PAGE_FLAG 0x80 +#define PDE_64_LARGE_PAGE_MASK 0x01 +#define PDE_64_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bits 11:8] Ignored. + */ + uint64_t ignored_1 : 4; +#define PDE_64_IGNORED_1_BIT 8 +#define PDE_64_IGNORED_1_FLAG 0xF00 +#define PDE_64_IGNORED_1_MASK 0x0F +#define PDE_64_IGNORED_1(_) (((_) >> 8) & 0x0F) + + /** + * [Bits 47:12] Physical address of 4-KByte aligned page table referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define PDE_64_PAGE_FRAME_NUMBER_BIT 12 +#define PDE_64_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define PDE_64_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define PDE_64_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved2 : 4; + + /** + * [Bits 62:52] Ignored. + */ + uint64_t ignored_2 : 11; +#define PDE_64_IGNORED_2_BIT 52 +#define PDE_64_IGNORED_2_FLAG 0x7FF0000000000000 +#define PDE_64_IGNORED_2_MASK 0x7FF +#define PDE_64_IGNORED_2(_) (((_) >> 52) & 0x7FF) + + /** + * [Bit 63] If IA32_EFER.NXE = 1, execute-disable (if 1, instruction fetches are not allowed from the 2-MByte region + * controlled by this entry); otherwise, reserved (must be 0). + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t execute_disable : 1; +#define PDE_64_EXECUTE_DISABLE_BIT 63 +#define PDE_64_EXECUTE_DISABLE_FLAG 0x8000000000000000 +#define PDE_64_EXECUTE_DISABLE_MASK 0x01 +#define PDE_64_EXECUTE_DISABLE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} pde_64; + +/** + * @brief Format of a 4-Level Page-Table Entry that Maps a 4-KByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Present; must be 1 to map a 4-KByte page. + */ + uint64_t present : 1; +#define PTE_64_PRESENT_BIT 0 +#define PTE_64_PRESENT_FLAG 0x01 +#define PTE_64_PRESENT_MASK 0x01 +#define PTE_64_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Read/write; if 0, writes may not be allowed to the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t write : 1; +#define PTE_64_WRITE_BIT 1 +#define PTE_64_WRITE_FLAG 0x02 +#define PTE_64_WRITE_MASK 0x01 +#define PTE_64_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] User/supervisor; if 0, user-mode accesses are not allowed to the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t supervisor : 1; +#define PTE_64_SUPERVISOR_BIT 2 +#define PTE_64_SUPERVISOR_FLAG 0x04 +#define PTE_64_SUPERVISOR_MASK 0x01 +#define PTE_64_SUPERVISOR(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Page-level write-through; indirectly determines the memory type used to access the 4-KByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_write_through : 1; +#define PTE_64_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PTE_64_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PTE_64_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PTE_64_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] Page-level cache disable; indirectly determines the memory type used to access the 4-KByte page referenced by + * this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t page_level_cache_disable : 1; +#define PTE_64_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PTE_64_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PTE_64_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PTE_64_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] Accessed; indicates whether software has accessed the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t accessed : 1; +#define PTE_64_ACCESSED_BIT 5 +#define PTE_64_ACCESSED_FLAG 0x20 +#define PTE_64_ACCESSED_MASK 0x01 +#define PTE_64_ACCESSED(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] Dirty; indicates whether software has written to the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.8(Accessed and Dirty Flags)] + */ + uint64_t dirty : 1; +#define PTE_64_DIRTY_BIT 6 +#define PTE_64_DIRTY_FLAG 0x40 +#define PTE_64_DIRTY_MASK 0x01 +#define PTE_64_DIRTY(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Indirectly determines the memory type used to access the 4-KByte page referenced by this entry. + * + * @see Vol3A[4.9.2(Paging and Memory Typing When the PAT is Supported (Pentium III and More Recent Processor Families))] + */ + uint64_t pat : 1; +#define PTE_64_PAT_BIT 7 +#define PTE_64_PAT_FLAG 0x80 +#define PTE_64_PAT_MASK 0x01 +#define PTE_64_PAT(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] Global; if CR4.PGE = 1, determines whether the translation is global; ignored otherwise. + * + * @see Vol3A[4.10(Caching Translation Information)] + */ + uint64_t global : 1; +#define PTE_64_GLOBAL_BIT 8 +#define PTE_64_GLOBAL_FLAG 0x100 +#define PTE_64_GLOBAL_MASK 0x01 +#define PTE_64_GLOBAL(_) (((_) >> 8) & 0x01) + + /** + * [Bits 11:9] Ignored. + */ + uint64_t ignored_1 : 3; +#define PTE_64_IGNORED_1_BIT 9 +#define PTE_64_IGNORED_1_FLAG 0xE00 +#define PTE_64_IGNORED_1_MASK 0x07 +#define PTE_64_IGNORED_1(_) (((_) >> 9) & 0x07) + + /** + * [Bits 47:12] Physical address of the 4-KByte page referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define PTE_64_PAGE_FRAME_NUMBER_BIT 12 +#define PTE_64_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define PTE_64_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define PTE_64_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved1 : 4; + + /** + * [Bits 58:52] Ignored. + */ + uint64_t ignored_2 : 7; +#define PTE_64_IGNORED_2_BIT 52 +#define PTE_64_IGNORED_2_FLAG 0x7F0000000000000 +#define PTE_64_IGNORED_2_MASK 0x7F +#define PTE_64_IGNORED_2(_) (((_) >> 52) & 0x7F) + + /** + * [Bits 62:59] Protection key; if CR4.PKE = 1, determines the protection key of the page; ignored otherwise. + * + * @see Vol3A[4.6.2(Protection Keys)] + */ + uint64_t protection_key : 4; +#define PTE_64_PROTECTION_KEY_BIT 59 +#define PTE_64_PROTECTION_KEY_FLAG 0x7800000000000000 +#define PTE_64_PROTECTION_KEY_MASK 0x0F +#define PTE_64_PROTECTION_KEY(_) (((_) >> 59) & 0x0F) + + /** + * [Bit 63] If IA32_EFER.NXE = 1, execute-disable (if 1, instruction fetches are not allowed from the 1-GByte page + * controlled by this entry); otherwise, reserved (must be 0). + * + * @see Vol3A[4.6(Access Rights)] + */ + uint64_t execute_disable : 1; +#define PTE_64_EXECUTE_DISABLE_BIT 63 +#define PTE_64_EXECUTE_DISABLE_FLAG 0x8000000000000000 +#define PTE_64_EXECUTE_DISABLE_MASK 0x01 +#define PTE_64_EXECUTE_DISABLE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} pte_64; + +/** + * @brief Format of a common Page-Table Entry + */ +typedef union +{ + struct + { + uint64_t present : 1; +#define PT_ENTRY_64_PRESENT_BIT 0 +#define PT_ENTRY_64_PRESENT_FLAG 0x01 +#define PT_ENTRY_64_PRESENT_MASK 0x01 +#define PT_ENTRY_64_PRESENT(_) (((_) >> 0) & 0x01) + uint64_t write : 1; +#define PT_ENTRY_64_WRITE_BIT 1 +#define PT_ENTRY_64_WRITE_FLAG 0x02 +#define PT_ENTRY_64_WRITE_MASK 0x01 +#define PT_ENTRY_64_WRITE(_) (((_) >> 1) & 0x01) + uint64_t supervisor : 1; +#define PT_ENTRY_64_SUPERVISOR_BIT 2 +#define PT_ENTRY_64_SUPERVISOR_FLAG 0x04 +#define PT_ENTRY_64_SUPERVISOR_MASK 0x01 +#define PT_ENTRY_64_SUPERVISOR(_) (((_) >> 2) & 0x01) + uint64_t page_level_write_through : 1; +#define PT_ENTRY_64_PAGE_LEVEL_WRITE_THROUGH_BIT 3 +#define PT_ENTRY_64_PAGE_LEVEL_WRITE_THROUGH_FLAG 0x08 +#define PT_ENTRY_64_PAGE_LEVEL_WRITE_THROUGH_MASK 0x01 +#define PT_ENTRY_64_PAGE_LEVEL_WRITE_THROUGH(_) (((_) >> 3) & 0x01) + uint64_t page_level_cache_disable : 1; +#define PT_ENTRY_64_PAGE_LEVEL_CACHE_DISABLE_BIT 4 +#define PT_ENTRY_64_PAGE_LEVEL_CACHE_DISABLE_FLAG 0x10 +#define PT_ENTRY_64_PAGE_LEVEL_CACHE_DISABLE_MASK 0x01 +#define PT_ENTRY_64_PAGE_LEVEL_CACHE_DISABLE(_) (((_) >> 4) & 0x01) + uint64_t accessed : 1; +#define PT_ENTRY_64_ACCESSED_BIT 5 +#define PT_ENTRY_64_ACCESSED_FLAG 0x20 +#define PT_ENTRY_64_ACCESSED_MASK 0x01 +#define PT_ENTRY_64_ACCESSED(_) (((_) >> 5) & 0x01) + uint64_t dirty : 1; +#define PT_ENTRY_64_DIRTY_BIT 6 +#define PT_ENTRY_64_DIRTY_FLAG 0x40 +#define PT_ENTRY_64_DIRTY_MASK 0x01 +#define PT_ENTRY_64_DIRTY(_) (((_) >> 6) & 0x01) + uint64_t large_page : 1; +#define PT_ENTRY_64_LARGE_PAGE_BIT 7 +#define PT_ENTRY_64_LARGE_PAGE_FLAG 0x80 +#define PT_ENTRY_64_LARGE_PAGE_MASK 0x01 +#define PT_ENTRY_64_LARGE_PAGE(_) (((_) >> 7) & 0x01) + uint64_t global : 1; +#define PT_ENTRY_64_GLOBAL_BIT 8 +#define PT_ENTRY_64_GLOBAL_FLAG 0x100 +#define PT_ENTRY_64_GLOBAL_MASK 0x01 +#define PT_ENTRY_64_GLOBAL(_) (((_) >> 8) & 0x01) + + /** + * [Bits 11:9] Ignored. + */ + uint64_t ignored_1 : 3; +#define PT_ENTRY_64_IGNORED_1_BIT 9 +#define PT_ENTRY_64_IGNORED_1_FLAG 0xE00 +#define PT_ENTRY_64_IGNORED_1_MASK 0x07 +#define PT_ENTRY_64_IGNORED_1(_) (((_) >> 9) & 0x07) + + /** + * [Bits 47:12] Physical address of the 4-KByte page referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define PT_ENTRY_64_PAGE_FRAME_NUMBER_BIT 12 +#define PT_ENTRY_64_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define PT_ENTRY_64_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define PT_ENTRY_64_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved1 : 4; + + /** + * [Bits 58:52] Ignored. + */ + uint64_t ignored_2 : 7; +#define PT_ENTRY_64_IGNORED_2_BIT 52 +#define PT_ENTRY_64_IGNORED_2_FLAG 0x7F0000000000000 +#define PT_ENTRY_64_IGNORED_2_MASK 0x7F +#define PT_ENTRY_64_IGNORED_2(_) (((_) >> 52) & 0x7F) + uint64_t protection_key : 4; +#define PT_ENTRY_64_PROTECTION_KEY_BIT 59 +#define PT_ENTRY_64_PROTECTION_KEY_FLAG 0x7800000000000000 +#define PT_ENTRY_64_PROTECTION_KEY_MASK 0x0F +#define PT_ENTRY_64_PROTECTION_KEY(_) (((_) >> 59) & 0x0F) + uint64_t execute_disable : 1; +#define PT_ENTRY_64_EXECUTE_DISABLE_BIT 63 +#define PT_ENTRY_64_EXECUTE_DISABLE_FLAG 0x8000000000000000 +#define PT_ENTRY_64_EXECUTE_DISABLE_MASK 0x01 +#define PT_ENTRY_64_EXECUTE_DISABLE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} pt_entry_64; + +/** + * @defgroup paging_structures_entry_count_64 \ + * Paging structures entry counts + * + * Paging structures entry counts. + * @{ + */ +#define PML4E_ENTRY_COUNT_64 0x00000200 +#define PDPTE_ENTRY_COUNT_64 0x00000200 +#define PDE_ENTRY_COUNT_64 0x00000200 +#define PTE_ENTRY_COUNT_64 0x00000200 + /** + * @} + */ + + /** + * @} + */ + + /** + * @} + */ + + /** + * @defgroup segment_descriptors \ + * Segment descriptors + * @{ + */ + /** + * @brief Pseudo-Descriptor Format (32-bit) + * + * @see Vol3A[3.5.1(Segment Descriptor Tables)] (reference) + */ +#pragma pack(push, 1) +typedef struct +{ + /** + * Limit. + */ + uint16_t limit; + + /** + * Base Address. + */ + uint32_t base_address; +} segment_descriptor_register_32; +#pragma pack(pop) + +/** + * @brief Pseudo-Descriptor Format (64-bit) + * + * @see Vol3A[3.5.1(Segment Descriptor Tables)] (reference) + */ +#pragma pack(push, 1) +typedef struct +{ + /** + * Limit. + */ + uint16_t limit; + + /** + * Base Address. + */ + uint64_t base_address; +} segment_descriptor_register_64; +#pragma pack(pop) + +/** + * @brief Segment access rights + * + * @see Vol2A[3.2(Instructions (A-L) | LAR-Load Access Rights Byte)] (reference) + */ +typedef union +{ + struct + { + uint32_t reserved1 : 8; + + /** + * @brief Type field + * + * [Bits 11:8] Indicates the segment or gate type and specifies the kinds of access that can be made to the segment and the + * direction of growth. The interpretation of this field depends on whether the descriptor type flag specifies an + * application (code or data) descriptor or a system descriptor. The encoding of the type field is different for code, + * data, and system descriptors. + * + * @see Vol3A[3.4.5.1(Code- and Data-Segment Descriptor Types)] + */ + uint32_t exec_type : 4; +#define SEGMENT_ACCESS_RIGHTS_TYPE_BIT 8 +#define SEGMENT_ACCESS_RIGHTS_TYPE_FLAG 0xF00 +#define SEGMENT_ACCESS_RIGHTS_TYPE_MASK 0x0F +#define SEGMENT_ACCESS_RIGHTS_TYPE(_) (((_) >> 8) & 0x0F) + + /** + * @brief S (descriptor type) flag + * + * [Bit 12] Specifies whether the segment descriptor is for a system segment (S flag is clear) or a code or data segment (S + * flag is set). + */ + uint32_t descriptor_type : 1; +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE_BIT 12 +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE_FLAG 0x1000 +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE_MASK 0x01 +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE(_) (((_) >> 12) & 0x01) + + /** + * @brief DPL (descriptor privilege level) field + * + * [Bits 14:13] Specifies the privilege level of the segment. The privilege level can range from 0 to 3, with 0 being the + * most privileged level. The DPL is used to control access to the segment. See Section 5.5, "Privilege Levels", for a + * description of the relationship of the DPL to the CPL of the executing code segment and the RPL of a segment selector. + */ + uint32_t descriptor_privilege_level : 2; +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_BIT 13 +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_FLAG 0x6000 +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_MASK 0x03 +#define SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL(_) (((_) >> 13) & 0x03) + + /** + * @brief P (segment-present) flag + * + * [Bit 15] Indicates whether the segment is present in memory (set) or not present (clear). If this flag is clear, the + * processor generates a segment-not-present exception (\#NP) when a segment selector that points to the segment descriptor + * is loaded into a segment register. Memory management software can use this flag to control which segments are actually + * loaded into physical memory at a given time. It offers a control in addition to paging for managing virtual memory. + */ + uint32_t present : 1; +#define SEGMENT_ACCESS_RIGHTS_PRESENT_BIT 15 +#define SEGMENT_ACCESS_RIGHTS_PRESENT_FLAG 0x8000 +#define SEGMENT_ACCESS_RIGHTS_PRESENT_MASK 0x01 +#define SEGMENT_ACCESS_RIGHTS_PRESENT(_) (((_) >> 15) & 0x01) + uint32_t reserved2 : 4; + + /** + * @brief Available bit + * + * [Bit 20] Bit 20 of the second doubleword of the segment descriptor is available for use by system software. + */ + uint32_t system : 1; +#define SEGMENT_ACCESS_RIGHTS_SYSTEM_BIT 20 +#define SEGMENT_ACCESS_RIGHTS_SYSTEM_FLAG 0x100000 +#define SEGMENT_ACCESS_RIGHTS_SYSTEM_MASK 0x01 +#define SEGMENT_ACCESS_RIGHTS_SYSTEM(_) (((_) >> 20) & 0x01) + + /** + * @brief L (64-bit code segment) flag + * + * [Bit 21] In IA-32e mode, bit 21 of the second doubleword of the segment descriptor indicates whether a code segment + * contains native 64-bit code. A value of 1 indicates instructions in this code segment are executed in 64-bit mode. A + * value of 0 indicates the instructions in this code segment are executed in compatibility mode. If L-bit is set, then + * D-bit must be cleared. When not in IA-32e mode or for non-code segments, bit 21 is reserved and should always be set to + * 0. + */ + uint32_t long_mode : 1; +#define SEGMENT_ACCESS_RIGHTS_LONG_MODE_BIT 21 +#define SEGMENT_ACCESS_RIGHTS_LONG_MODE_FLAG 0x200000 +#define SEGMENT_ACCESS_RIGHTS_LONG_MODE_MASK 0x01 +#define SEGMENT_ACCESS_RIGHTS_LONG_MODE(_) (((_) >> 21) & 0x01) + + /** + * @brief D/B (default operation size/default stack pointer size and/or upper bound) flag + * + * [Bit 22] Performs different functions depending on whether the segment descriptor is an executable code segment, an + * expand-down data segment, or a stack segment. (This flag should always be set to 1 for 32-bit code and data segments and + * to 0 for 16-bit code and data segments.) + * - Executable code segment. The flag is called the D flag and it indicates the default length for effective addresses and + * operands referenced by instructions in the segment. If the flag is set, 32-bit addresses and 32-bit or 8-bit operands + * are assumed; if it is clear, 16-bit addresses and 16-bit or 8-bit operands are assumed. The instruction prefix 66H can + * be used to select an operand size other than the default, and the prefix 67H can be used select an address size other + * than the default. + * - Stack segment (data segment pointed to by the SS register). The flag is called the B (big) flag and it specifies the + * size of the stack pointer used for implicit stack operations (such as pushes, pops, and calls). If the flag is set, a + * 32-bit stack pointer is used, which is stored in the 32-bit ESP register; if the flag is clear, a 16-bit stack pointer + * is used, which is stored in the 16- bit SP register. If the stack segment is set up to be an expand-down data segment + * (described in the next paragraph), the B flag also specifies the upper bound of the stack segment. + * - Expand-down data segment. The flag is called the B flag and it specifies the upper bound of the segment. If the flag + * is set, the upper bound is FFFFFFFFH (4 GBytes); if the flag is clear, the upper bound is FFFFH (64 KBytes). + */ + uint32_t default_big : 1; +#define SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG_BIT 22 +#define SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG_FLAG 0x400000 +#define SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG_MASK 0x01 +#define SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG(_) (((_) >> 22) & 0x01) + + /** + * @brief G (granularity) flag + * + * [Bit 23] Determines the scaling of the segment limit field. When the granularity flag is clear, the segment limit is + * interpreted in byte units; when flag is set, the segment limit is interpreted in 4-KByte units. (This flag does not + * affect the granularity of the base address; it is always byte granular.) When the granularity flag is set, the twelve + * least significant bits of an offset are not tested when checking the offset against the segment limit. For example, when + * the granularity flag is set, a limit of 0 results in valid offsets from 0 to 4095. + */ + uint32_t granularity : 1; +#define SEGMENT_ACCESS_RIGHTS_GRANULARITY_BIT 23 +#define SEGMENT_ACCESS_RIGHTS_GRANULARITY_FLAG 0x800000 +#define SEGMENT_ACCESS_RIGHTS_GRANULARITY_MASK 0x01 +#define SEGMENT_ACCESS_RIGHTS_GRANULARITY(_) (((_) >> 23) & 0x01) + uint32_t reserved3 : 8; + }; + + uint32_t flags; +} segment_access_rights; + +/** + * @brief General Segment Descriptor (32-bit) + * + * A segment descriptor is a data structure in a GDT or LDT that provides the processor with the size and location of a + * segment, as well as access control and status information. Segment descriptors are typically created by compilers, + * linkers, loaders, or the operating system or executive, but not application programs. + * + * @see Vol3A[5.2(FIELDS AND FLAGS USED FOR SEGMENT-LEVEL AND PAGE-LEVEL PROTECTION)] + * @see Vol3A[5.2.1(Code-Segment Descriptor in 64-bit Mode)] + * @see Vol3A[5.8.3(Call Gates)] + * @see Vol3A[6.11(IDT DESCRIPTORS)] + * @see Vol3A[6.14.1(64-Bit Mode IDT)] + * @see Vol3A[7.2.2(TSS Descriptor)] + * @see Vol3A[7.2.3(TSS Descriptor in 64-bit mode)] + * @see Vol3A[7.2.5(Task-Gate Descriptor)] + * @see Vol3A[3.4.5(Segment Descriptors)] (reference) + */ +typedef struct +{ + /** + * @brief Segment limit field (15:00) + * + * Specifies the size of the segment. The processor puts together the two segment limit fields to form a 20-bit value. The + * processor interprets the segment limit in one of two ways, depending on the setting of the G (granularity) flag: + * - If the granularity flag is clear, the segment size can range from 1 byte to 1 MByte, in byte increments. + * - If the granularity flag is set, the segment size can range from 4 KBytes to 4 GBytes, in 4-KByte increments. + * The processor uses the segment limit in two different ways, depending on whether the segment is an expand-up or an + * expand-down segment. For expand-up segments, the offset in a logical address can range from 0 to the segment limit. + * Offsets greater than the segment limit generate general-protection exceptions (\#GP, for all segments other than SS) or + * stack-fault exceptions (\#SS for the SS segment). For expand-down segments, the segment limit has the reverse function; + * the offset can range from the segment limit plus 1 to FFFFFFFFH or FFFFH, depending on the setting of the B flag. + * Offsets less than or equal to the segment limit generate general-protection exceptions or stack-fault exceptions. + * Decreasing the value in the segment limit field for an expanddown segment allocates new memory at the bottom of the + * segment's address space, rather than at the top. IA-32 architecture stacks always grow downwards, making this mechanism + * convenient for expandable stacks. + * + * @see Vol3A[3.4.5.1(Code- and Data-Segment Descriptor Types)] + */ + uint16_t segment_limit_low; + + /** + * @brief Base address field (15:00) + * + * Defines the location of byte 0 of the segment within the 4-GByte linear address space. The processor puts together the + * three base address fields to form a single 32-bit value. Segment base addresses should be aligned to 16-byte boundaries. + * Although 16-byte alignment is not required, this alignment allows programs to maximize performance by aligning code and + * data on 16-byte boundaries. + */ + uint16_t base_address_low; + /** + * @brief Segment descriptor fields + */ + union + { + struct + { + /** + * [Bits 7:0] Base address field (23:16); see description of $BASE_LOW for more details. + */ + uint32_t base_address_middle : 8; +#define SEGMENT__BASE_ADDRESS_MIDDLE_BIT 0 +#define SEGMENT__BASE_ADDRESS_MIDDLE_FLAG 0xFF +#define SEGMENT__BASE_ADDRESS_MIDDLE_MASK 0xFF +#define SEGMENT__BASE_ADDRESS_MIDDLE(_) (((_) >> 0) & 0xFF) + + /** + * @brief Type field + * + * [Bits 11:8] Indicates the segment or gate type and specifies the kinds of access that can be made to the segment and the + * direction of growth. The interpretation of this field depends on whether the descriptor type flag specifies an + * application (code or data) descriptor or a system descriptor. The encoding of the type field is different for code, + * data, and system descriptors. + * + * @see Vol3A[3.4.5.1(Code- and Data-Segment Descriptor Types)] + */ + uint32_t exec_type : 4; +#define SEGMENT__TYPE_BIT 8 +#define SEGMENT__TYPE_FLAG 0xF00 +#define SEGMENT__TYPE_MASK 0x0F +#define SEGMENT__TYPE(_) (((_) >> 8) & 0x0F) + + /** + * @brief S (descriptor type) flag + * + * [Bit 12] Specifies whether the segment descriptor is for a system segment (S flag is clear) or a code or data segment (S + * flag is set). + */ + uint32_t descriptor_type : 1; +#define SEGMENT__DESCRIPTOR_TYPE_BIT 12 +#define SEGMENT__DESCRIPTOR_TYPE_FLAG 0x1000 +#define SEGMENT__DESCRIPTOR_TYPE_MASK 0x01 +#define SEGMENT__DESCRIPTOR_TYPE(_) (((_) >> 12) & 0x01) + + /** + * @brief DPL (descriptor privilege level) field + * + * [Bits 14:13] Specifies the privilege level of the segment. The privilege level can range from 0 to 3, with 0 being the + * most privileged level. The DPL is used to control access to the segment. See Section 5.5, "Privilege Levels", for a + * description of the relationship of the DPL to the CPL of the executing code segment and the RPL of a segment selector. + */ + uint32_t descriptor_privilege_level : 2; +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL_BIT 13 +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL_FLAG 0x6000 +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL_MASK 0x03 +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL(_) (((_) >> 13) & 0x03) + + /** + * @brief P (segment-present) flag + * + * [Bit 15] Indicates whether the segment is present in memory (set) or not present (clear). If this flag is clear, the + * processor generates a segment-not-present exception (\#NP) when a segment selector that points to the segment descriptor + * is loaded into a segment register. Memory management software can use this flag to control which segments are actually + * loaded into physical memory at a given time. It offers a control in addition to paging for managing virtual memory. + */ + uint32_t present : 1; +#define SEGMENT__PRESENT_BIT 15 +#define SEGMENT__PRESENT_FLAG 0x8000 +#define SEGMENT__PRESENT_MASK 0x01 +#define SEGMENT__PRESENT(_) (((_) >> 15) & 0x01) + + /** + * [Bits 19:16] Segment limit field (19:16); see description of $LIMIT_LOW for more details. + */ + uint32_t segment_limit_high : 4; +#define SEGMENT__SEGMENT_LIMIT_HIGH_BIT 16 +#define SEGMENT__SEGMENT_LIMIT_HIGH_FLAG 0xF0000 +#define SEGMENT__SEGMENT_LIMIT_HIGH_MASK 0x0F +#define SEGMENT__SEGMENT_LIMIT_HIGH(_) (((_) >> 16) & 0x0F) + + /** + * @brief Available bit + * + * [Bit 20] Bit 20 of the second doubleword of the segment descriptor is available for use by system software. + */ + uint32_t system : 1; +#define SEGMENT__SYSTEM_BIT 20 +#define SEGMENT__SYSTEM_FLAG 0x100000 +#define SEGMENT__SYSTEM_MASK 0x01 +#define SEGMENT__SYSTEM(_) (((_) >> 20) & 0x01) + + /** + * @brief L (64-bit code segment) flag + * + * [Bit 21] In IA-32e mode, bit 21 of the second doubleword of the segment descriptor indicates whether a code segment + * contains native 64-bit code. A value of 1 indicates instructions in this code segment are executed in 64-bit mode. A + * value of 0 indicates the instructions in this code segment are executed in compatibility mode. If L-bit is set, then + * D-bit must be cleared. When not in IA-32e mode or for non-code segments, bit 21 is reserved and should always be set to + * 0. + */ + uint32_t long_mode : 1; +#define SEGMENT__LONG_MODE_BIT 21 +#define SEGMENT__LONG_MODE_FLAG 0x200000 +#define SEGMENT__LONG_MODE_MASK 0x01 +#define SEGMENT__LONG_MODE(_) (((_) >> 21) & 0x01) + + /** + * @brief D/B (default operation size/default stack pointer size and/or upper bound) flag + * + * [Bit 22] Performs different functions depending on whether the segment descriptor is an executable code segment, an + * expand-down data segment, or a stack segment. (This flag should always be set to 1 for 32-bit code and data segments and + * to 0 for 16-bit code and data segments.) + * - Executable code segment. The flag is called the D flag and it indicates the default length for effective addresses and + * operands referenced by instructions in the segment. If the flag is set, 32-bit addresses and 32-bit or 8-bit operands + * are assumed; if it is clear, 16-bit addresses and 16-bit or 8-bit operands are assumed. The instruction prefix 66H can + * be used to select an operand size other than the default, and the prefix 67H can be used select an address size other + * than the default. + * - Stack segment (data segment pointed to by the SS register). The flag is called the B (big) flag and it specifies the + * size of the stack pointer used for implicit stack operations (such as pushes, pops, and calls). If the flag is set, a + * 32-bit stack pointer is used, which is stored in the 32-bit ESP register; if the flag is clear, a 16-bit stack pointer + * is used, which is stored in the 16- bit SP register. If the stack segment is set up to be an expand-down data segment + * (described in the next paragraph), the B flag also specifies the upper bound of the stack segment. + * - Expand-down data segment. The flag is called the B flag and it specifies the upper bound of the segment. If the flag + * is set, the upper bound is FFFFFFFFH (4 GBytes); if the flag is clear, the upper bound is FFFFH (64 KBytes). + */ + uint32_t default_big : 1; +#define SEGMENT__DEFAULT_BIG_BIT 22 +#define SEGMENT__DEFAULT_BIG_FLAG 0x400000 +#define SEGMENT__DEFAULT_BIG_MASK 0x01 +#define SEGMENT__DEFAULT_BIG(_) (((_) >> 22) & 0x01) + + /** + * @brief G (granularity) flag + * + * [Bit 23] Determines the scaling of the segment limit field. When the granularity flag is clear, the segment limit is + * interpreted in byte units; when flag is set, the segment limit is interpreted in 4-KByte units. (This flag does not + * affect the granularity of the base address; it is always byte granular.) When the granularity flag is set, the twelve + * least significant bits of an offset are not tested when checking the offset against the segment limit. For example, when + * the granularity flag is set, a limit of 0 results in valid offsets from 0 to 4095. + */ + uint32_t granularity : 1; +#define SEGMENT__GRANULARITY_BIT 23 +#define SEGMENT__GRANULARITY_FLAG 0x800000 +#define SEGMENT__GRANULARITY_MASK 0x01 +#define SEGMENT__GRANULARITY(_) (((_) >> 23) & 0x01) + + /** + * [Bits 31:24] Base address field (31:24); see description of $BASE_LOW for more details. + */ + uint32_t base_address_high : 8; +#define SEGMENT__BASE_ADDRESS_HIGH_BIT 24 +#define SEGMENT__BASE_ADDRESS_HIGH_FLAG 0xFF000000 +#define SEGMENT__BASE_ADDRESS_HIGH_MASK 0xFF +#define SEGMENT__BASE_ADDRESS_HIGH(_) (((_) >> 24) & 0xFF) + }; + + uint32_t flags; + }; + +} segment_descriptor_32; + +/** + * @brief General Segment Descriptor (64-bit) + * + * A segment descriptor is a data structure in a GDT or LDT that provides the processor with the size and location of a + * segment, as well as access control and status information. Segment descriptors are typically created by compilers, + * linkers, loaders, or the operating system or executive, but not application programs. + * + * @see Vol3A[3.4.5(Segment Descriptors)] (reference) + */ +typedef struct +{ + /** + * @brief Segment limit field (15:00) + * + * Specifies the size of the segment. The processor puts together the two segment limit fields to form a 20-bit value. The + * processor interprets the segment limit in one of two ways, depending on the setting of the G (granularity) flag: + * - If the granularity flag is clear, the segment size can range from 1 byte to 1 MByte, in byte increments. + * - If the granularity flag is set, the segment size can range from 4 KBytes to 4 GBytes, in 4-KByte increments. + * The processor uses the segment limit in two different ways, depending on whether the segment is an expand-up or an + * expand-down segment. For expand-up segments, the offset in a logical address can range from 0 to the segment limit. + * Offsets greater than the segment limit generate general-protection exceptions (\#GP, for all segments other than SS) or + * stack-fault exceptions (\#SS for the SS segment). For expand-down segments, the segment limit has the reverse function; + * the offset can range from the segment limit plus 1 to FFFFFFFFH or FFFFH, depending on the setting of the B flag. + * Offsets less than or equal to the segment limit generate general-protection exceptions or stack-fault exceptions. + * Decreasing the value in the segment limit field for an expanddown segment allocates new memory at the bottom of the + * segment's address space, rather than at the top. IA-32 architecture stacks always grow downwards, making this mechanism + * convenient for expandable stacks. + * + * @see Vol3A[3.4.5.1(Code- and Data-Segment Descriptor Types)] + */ + uint16_t segment_limit_low; + + /** + * @brief Base address field (15:00) + * + * Defines the location of byte 0 of the segment within the 4-GByte linear address space. The processor puts together the + * three base address fields to form a single 32-bit value. Segment base addresses should be aligned to 16-byte boundaries. + * Although 16-byte alignment is not required, this alignment allows programs to maximize performance by aligning code and + * data on 16-byte boundaries. + */ + uint16_t base_address_low; + /** + * @brief Segment descriptor fields + */ + union + { + struct + { + /** + * [Bits 7:0] Base address field (23:16); see description of $BASE_LOW for more details. + */ + uint32_t base_address_middle : 8; +#define SEGMENT__BASE_ADDRESS_MIDDLE_BIT 0 +#define SEGMENT__BASE_ADDRESS_MIDDLE_FLAG 0xFF +#define SEGMENT__BASE_ADDRESS_MIDDLE_MASK 0xFF +#define SEGMENT__BASE_ADDRESS_MIDDLE(_) (((_) >> 0) & 0xFF) + + /** + * @brief Type field + * + * [Bits 11:8] Indicates the segment or gate type and specifies the kinds of access that can be made to the segment and the + * direction of growth. The interpretation of this field depends on whether the descriptor type flag specifies an + * application (code or data) descriptor or a system descriptor. The encoding of the type field is different for code, + * data, and system descriptors. + * + * @see Vol3A[3.4.5.1(Code- and Data-Segment Descriptor Types)] + */ + uint32_t exec_type : 4; +#define SEGMENT__TYPE_BIT 8 +#define SEGMENT__TYPE_FLAG 0xF00 +#define SEGMENT__TYPE_MASK 0x0F +#define SEGMENT__TYPE(_) (((_) >> 8) & 0x0F) + + /** + * @brief S (descriptor type) flag + * + * [Bit 12] Specifies whether the segment descriptor is for a system segment (S flag is clear) or a code or data segment (S + * flag is set). + */ + uint32_t descriptor_type : 1; +#define SEGMENT__DESCRIPTOR_TYPE_BIT 12 +#define SEGMENT__DESCRIPTOR_TYPE_FLAG 0x1000 +#define SEGMENT__DESCRIPTOR_TYPE_MASK 0x01 +#define SEGMENT__DESCRIPTOR_TYPE(_) (((_) >> 12) & 0x01) + + /** + * @brief DPL (descriptor privilege level) field + * + * [Bits 14:13] Specifies the privilege level of the segment. The privilege level can range from 0 to 3, with 0 being the + * most privileged level. The DPL is used to control access to the segment. See Section 5.5, "Privilege Levels", for a + * description of the relationship of the DPL to the CPL of the executing code segment and the RPL of a segment selector. + */ + uint32_t descriptor_privilege_level : 2; +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL_BIT 13 +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL_FLAG 0x6000 +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL_MASK 0x03 +#define SEGMENT__DESCRIPTOR_PRIVILEGE_LEVEL(_) (((_) >> 13) & 0x03) + + /** + * @brief P (segment-present) flag + * + * [Bit 15] Indicates whether the segment is present in memory (set) or not present (clear). If this flag is clear, the + * processor generates a segment-not-present exception (\#NP) when a segment selector that points to the segment descriptor + * is loaded into a segment register. Memory management software can use this flag to control which segments are actually + * loaded into physical memory at a given time. It offers a control in addition to paging for managing virtual memory. + */ + uint32_t present : 1; +#define SEGMENT__PRESENT_BIT 15 +#define SEGMENT__PRESENT_FLAG 0x8000 +#define SEGMENT__PRESENT_MASK 0x01 +#define SEGMENT__PRESENT(_) (((_) >> 15) & 0x01) + + /** + * [Bits 19:16] Segment limit field (19:16); see description of $LIMIT_LOW for more details. + */ + uint32_t segment_limit_high : 4; +#define SEGMENT__SEGMENT_LIMIT_HIGH_BIT 16 +#define SEGMENT__SEGMENT_LIMIT_HIGH_FLAG 0xF0000 +#define SEGMENT__SEGMENT_LIMIT_HIGH_MASK 0x0F +#define SEGMENT__SEGMENT_LIMIT_HIGH(_) (((_) >> 16) & 0x0F) + + /** + * @brief Available bit + * + * [Bit 20] Bit 20 of the second doubleword of the segment descriptor is available for use by system software. + */ + uint32_t system : 1; +#define SEGMENT__SYSTEM_BIT 20 +#define SEGMENT__SYSTEM_FLAG 0x100000 +#define SEGMENT__SYSTEM_MASK 0x01 +#define SEGMENT__SYSTEM(_) (((_) >> 20) & 0x01) + + /** + * @brief L (64-bit code segment) flag + * + * [Bit 21] In IA-32e mode, bit 21 of the second doubleword of the segment descriptor indicates whether a code segment + * contains native 64-bit code. A value of 1 indicates instructions in this code segment are executed in 64-bit mode. A + * value of 0 indicates the instructions in this code segment are executed in compatibility mode. If L-bit is set, then + * D-bit must be cleared. When not in IA-32e mode or for non-code segments, bit 21 is reserved and should always be set to + * 0. + */ + uint32_t long_mode : 1; +#define SEGMENT__LONG_MODE_BIT 21 +#define SEGMENT__LONG_MODE_FLAG 0x200000 +#define SEGMENT__LONG_MODE_MASK 0x01 +#define SEGMENT__LONG_MODE(_) (((_) >> 21) & 0x01) + + /** + * @brief D/B (default operation size/default stack pointer size and/or upper bound) flag + * + * [Bit 22] Performs different functions depending on whether the segment descriptor is an executable code segment, an + * expand-down data segment, or a stack segment. (This flag should always be set to 1 for 32-bit code and data segments and + * to 0 for 16-bit code and data segments.) + * - Executable code segment. The flag is called the D flag and it indicates the default length for effective addresses and + * operands referenced by instructions in the segment. If the flag is set, 32-bit addresses and 32-bit or 8-bit operands + * are assumed; if it is clear, 16-bit addresses and 16-bit or 8-bit operands are assumed. The instruction prefix 66H can + * be used to select an operand size other than the default, and the prefix 67H can be used select an address size other + * than the default. + * - Stack segment (data segment pointed to by the SS register). The flag is called the B (big) flag and it specifies the + * size of the stack pointer used for implicit stack operations (such as pushes, pops, and calls). If the flag is set, a + * 32-bit stack pointer is used, which is stored in the 32-bit ESP register; if the flag is clear, a 16-bit stack pointer + * is used, which is stored in the 16- bit SP register. If the stack segment is set up to be an expand-down data segment + * (described in the next paragraph), the B flag also specifies the upper bound of the stack segment. + * - Expand-down data segment. The flag is called the B flag and it specifies the upper bound of the segment. If the flag + * is set, the upper bound is FFFFFFFFH (4 GBytes); if the flag is clear, the upper bound is FFFFH (64 KBytes). + */ + uint32_t default_big : 1; +#define SEGMENT__DEFAULT_BIG_BIT 22 +#define SEGMENT__DEFAULT_BIG_FLAG 0x400000 +#define SEGMENT__DEFAULT_BIG_MASK 0x01 +#define SEGMENT__DEFAULT_BIG(_) (((_) >> 22) & 0x01) + + /** + * @brief G (granularity) flag + * + * [Bit 23] Determines the scaling of the segment limit field. When the granularity flag is clear, the segment limit is + * interpreted in byte units; when flag is set, the segment limit is interpreted in 4-KByte units. (This flag does not + * affect the granularity of the base address; it is always byte granular.) When the granularity flag is set, the twelve + * least significant bits of an offset are not tested when checking the offset against the segment limit. For example, when + * the granularity flag is set, a limit of 0 results in valid offsets from 0 to 4095. + */ + uint32_t granularity : 1; +#define SEGMENT__GRANULARITY_BIT 23 +#define SEGMENT__GRANULARITY_FLAG 0x800000 +#define SEGMENT__GRANULARITY_MASK 0x01 +#define SEGMENT__GRANULARITY(_) (((_) >> 23) & 0x01) + + /** + * [Bits 31:24] Base address field (31:24); see description of $BASE_LOW for more details. + */ + uint32_t base_address_high : 8; +#define SEGMENT__BASE_ADDRESS_HIGH_BIT 24 +#define SEGMENT__BASE_ADDRESS_HIGH_FLAG 0xFF000000 +#define SEGMENT__BASE_ADDRESS_HIGH_MASK 0xFF +#define SEGMENT__BASE_ADDRESS_HIGH(_) (((_) >> 24) & 0xFF) + }; + + uint32_t flags; + }; + + + /** + * Base address field (32:63); see description of $BASE_LOW for more details. + */ + uint32_t base_address_upper; + + /** + * Base address field (32:63); see description of $BASE_LOW for more details. + */ + uint32_t must_be_zero; +} segment_descriptor_64; + +#define SEGMENT_DESCRIPTOR_TYPE_SYSTEM 0x00000000 +#define SEGMENT_DESCRIPTOR_TYPE_CODE_OR_DATA 0x00000001 +/** + * @defgroup segment_descriptor_code_and_data_type \ + * Code- and Data-Segment Descriptor Types + * + * When the S (descriptor type) flag in a segment descriptor is set, the descriptor is for either a code or a data segment. + * The highest order bit of the type field (bit 11 of the second double word of the segment descriptor) then determines + * whether the descriptor is for a data segment (clear) or a code segment (set). For data segments, the three low-order + * bits of the type field (bits 8, 9, and 10) are interpreted as accessed (A), write-enable (W), and expansion-direction + * (E). See Table 3-1 for a description of the encoding of the bits in the type field for code and data segments. Data + * segments can be read-only or read/write segments, depending on the setting of the write-enable bit. + * + * @see Vol3A[3.4.5.1(Code- and Data-Segment Descriptor Types)] (reference) + * @{ + */ + /** + * Read-Only. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_ONLY 0x00000000 + + /** + * Data Read-Only, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_ONLY_ACCESSED 0x00000001 + + /** + * Data Read/Write. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_WRITE 0x00000002 + + /** + * Data Read/Write, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_WRITE_ACCESSED 0x00000003 + + /** + * Data Read-Only, expand-down. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_ONLY_EXPAND_DOWN 0x00000004 + + /** + * Data Read-Only, expand-down, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_ONLY_EXPAND_DOWN_ACCESSED 0x00000005 + + /** + * Data Read/Write, expand-down. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_WRITE_EXPAND_DOWN 0x00000006 + + /** + * Data Read/Write, expand-down, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_DATA_READ_WRITE_EXPAND_DOWN_ACCESSED 0x00000007 + + /** + * Code Execute-Only. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_ONLY 0x00000008 + + /** + * Code Execute-Only, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_ONLY_ACCESSED 0x00000009 + + /** + * Code Execute/Read. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_READ 0x0000000A + + /** + * Code Execute/Read, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_READ_ACCESSED 0x0000000B + + /** + * Code Execute-Only, conforming. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_ONLY_CONFORMING 0x0000000C + + /** + * Code Execute-Only, conforming, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_ONLY_CONFORMING_ACCESSED 0x0000000D + + /** + * Code Execute/Read, conforming. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_READ_CONFORMING 0x0000000E + + /** + * Code Execute/Read, conforming, accessed. + */ +#define SEGMENT_DESCRIPTOR_TYPE_CODE_EXECUTE_READ_CONFORMING_ACCESSED 0x0000000F + /** + * @} + */ + + /** + * @defgroup segment_descriptor_system_type \ + * System Descriptor Types + * + * When the S (descriptor type) flag in a segment descriptor is clear, the descriptor type is a system descriptor. The + * processor recognizes the following types of system descriptors: + * - Local descriptor-table (LDT) segment descriptor. + * - Task-state segment (TSS) descriptor. + * - Call-gate descriptor. + * - Interrupt-gate descriptor. + * - Trap-gate descriptor. + * - Task-gate descriptor. + * These descriptor types fall into two categories: system-segment descriptors and gate descriptors. Systemsegment + * descriptors point to system segments (LDT and TSS segments). Gate descriptors are in themselves "gates," which hold + * pointers to procedure entry points in code segments (call, interrupt, and trap gates) or which hold segment selectors + * for TSS's (task gates). + * + * @see Vol3A[3.5(SYSTEM DESCRIPTOR TYPES)] (reference) + * @{ + */ + /** + * - 32-Bit Mode: Reserved + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_RESERVED_1 0x00000000 + + /** + * - 32-Bit Mode: 16-bit TSS (Available) + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_TSS_16_AVAILABLE 0x00000001 + + /** + * - 32-Bit Mode: LDT + * - IA-32e Mode: LDT + */ +#define SEGMENT_DESCRIPTOR_TYPE_LDT 0x00000002 + + /** + * - 32-Bit Mode: 16-bit TSS (Busy) + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_TSS_16_BUSY 0x00000003 + + /** + * - 32-Bit Mode: 16-bit Call Gate + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_CALL_GATE_16 0x00000004 + + /** + * - 32-Bit Mode: Task Gate + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_TASK_GATE 0x00000005 + + /** + * - 32-Bit Mode: 16-bit Interrupt Gate + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_INTERRUPT_GATE_16 0x00000006 + + /** + * - 32-Bit Mode: 16-bit Trap Gate + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_TRAP_GATE_16 0x00000007 + + /** + * - 32-Bit Mode: Reserved + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_RESERVED_2 0x00000008 + + /** + * - 32-Bit Mode: 32-bit TSS (Available) + * - IA-32e Mode: 64-bit TSS (Available) + */ +#define SEGMENT_DESCRIPTOR_TYPE_TSS_AVAILABLE 0x00000009 + + /** + * - 32-Bit Mode: Reserved + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_RESERVED_3 0x0000000A + + /** + * - 32-Bit Mode: 32-bit TSS (Busy) + * - IA-32e Mode: 64-bit TSS (Busy) + */ +#define SEGMENT_DESCRIPTOR_TYPE_TSS_BUSY 0x0000000B + + /** + * - 32-Bit Mode: 32-bit Call Gate + * - IA-32e Mode: 64-bit Call Gate + */ +#define SEGMENT_DESCRIPTOR_TYPE_CALL_GATE 0x0000000C + + /** + * - 32-Bit Mode: Reserved + * - IA-32e Mode: Reserved + */ +#define SEGMENT_DESCRIPTOR_TYPE_RESERVED_4 0x0000000D + + /** + * - 32-Bit Mode: 32-bit Interrupt Gate + * - IA-32e Mode: 64-bit Interrupt Gate + */ +#define SEGMENT_DESCRIPTOR_TYPE_INTERRUPT_GATE 0x0000000E + + /** + * - 32-Bit Mode: 32-bit Trap Gate + * - IA-32e Mode: 64-bit Trap Gate + */ +#define SEGMENT_DESCRIPTOR_TYPE_TRAP_GATE 0x0000000F + /** + * @} + */ + + /** + * @brief A segment selector is a 16-bit identifier for a segment. It does not point directly to the segment, but instead + * points to the segment descriptor that defines the segment + * + * @see Vol3A[3.4.2(Segment Selectors)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bits 1:0] Specifies the privilege level of the selector. The privilege level can range from 0 to 3, with 0 being the + * most privileged level. + * + * @see Vol3A[5.5(Privilege Levels)] + */ + uint16_t request_privilege_level : 2; +#define SEGMENT_SELECTOR_REQUEST_PRIVILEGE_LEVEL_BIT 0 +#define SEGMENT_SELECTOR_REQUEST_PRIVILEGE_LEVEL_FLAG 0x03 +#define SEGMENT_SELECTOR_REQUEST_PRIVILEGE_LEVEL_MASK 0x03 +#define SEGMENT_SELECTOR_REQUEST_PRIVILEGE_LEVEL(_) (((_) >> 0) & 0x03) + + /** + * [Bit 2] Specifies the descriptor table to use: clearing this flag selects the GDT; setting this flag selects the current + * LDT. + */ + uint16_t table : 1; +#define SEGMENT_SELECTOR_TABLE_BIT 2 +#define SEGMENT_SELECTOR_TABLE_FLAG 0x04 +#define SEGMENT_SELECTOR_TABLE_MASK 0x01 +#define SEGMENT_SELECTOR_TABLE(_) (((_) >> 2) & 0x01) + + /** + * [Bits 15:3] Selects one of 8192 descriptors in the GDT or LDT. The processor multiplies the index value by 8 (the number + * of bytes in a segment descriptor) and adds the result to the base address of the GDT or LDT (from the GDTR or LDTR + * register, respectively). + */ + uint16_t index : 13; +#define SEGMENT_SELECTOR_INDEX_BIT 3 +#define SEGMENT_SELECTOR_INDEX_FLAG 0xFFF8 +#define SEGMENT_SELECTOR_INDEX_MASK 0x1FFF +#define SEGMENT_SELECTOR_INDEX(_) (((_) >> 3) & 0x1FFF) + }; + + uint16_t flags; +} segment_selector; + +/** + * @} + */ + + /** + * @defgroup vmx \ + * VMX + * @{ + */ + /** + * @{ + */ + /** + * @defgroup vmx_basic_exit_reasons \ + * VMX Basic Exit Reasons + * + * VMX Basic Exit Reasons. + * + * @see Vol3D[C(VMX BASIC EXIT REASONS)] (reference) + * @{ + */ + /** + * @brief Exception or non-maskable interrupt (NMI) + * + * Either: + * -# Guest software caused an exception and the bit in the exception bitmap associated with exception's vector was 1. This + * case includes executions of BOUND that cause \#BR, executions of INT1 (they cause \#DB), executions of INT3 (they cause + * \#BP), executions of INTO that cause \#OF, and executions of UD0, UD1, and UD2 (they cause \#UD). + * -# An NMI was delivered to the logical processor and the "NMI exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXCEPTION_OR_NMI 0x00000000 + + /** + * @brief External interrupt + * + * An external interrupt arrived and the "external-interrupt exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXTERNAL_INTERRUPT 0x00000001 + + /** + * @brief Triple fault + * + * The logical processor encountered an exception while attempting to call the double-fault handler and that exception did + * not itself cause a VM exit due to the exception bitmap. + */ +#define VMX_EXIT_REASON_TRIPLE_FAULT 0x00000002 + + /** + * @brief INIT signal + * + * An INIT signal arrived. + */ +#define VMX_EXIT_REASON_INIT_SIGNAL 0x00000003 + + /** + * @brief Start-up IPI (SIPI) + * + * A SIPI arrived while the logical processor was in the "wait-for-SIPI" state. + */ +#define VMX_EXIT_REASON_STARTUP_IPI 0x00000004 + + /** + * @brief I/O system-management interrupt (SMI) + * + * An SMI arrived immediately after retirement of an I/O instruction and caused an SMM VM exit. + * + * @see Vol3C[34.15.2(SMM VM Exits)] + */ +#define VMX_EXIT_REASON_IO_SMI 0x00000005 + + /** + * @brief Other SMI + * + * An SMI arrived and caused an SMM VM exit but not immediately after retirement of an I/O instruction. + * + * @see Vol3C[34.15.2(SMM VM Exits)] + */ +#define VMX_EXIT_REASON_SMI 0x00000006 + + /** + * @brief Interrupt window exiting + * + * At the beginning of an instruction, RFLAGS.IF was 1; events were not blocked by STI or by MOV SS; and the + * "interrupt-window exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_INTERRUPT_WINDOW 0x00000007 + + /** + * @brief NMI window exiting + * + * At the beginning of an instruction, there was no virtual-NMI blocking; events were not blocked by MOV SS; and the + * "NMI-window exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_NMI_WINDOW 0x00000008 + + /** + * @brief Task switch + * + * Guest software attempted a task switch. + */ +#define VMX_EXIT_REASON_TASK_SWITCH 0x00000009 + + /** + * @brief CPUID + * + * Guest software attempted to execute CPUID. + */ +#define VMX_EXIT_REASON_EXECUTE_CPUID 0x0000000A + + /** + * @brief GETSEC + * + * Guest software attempted to execute GETSEC. + */ +#define VMX_EXIT_REASON_EXECUTE_GETSEC 0x0000000B + + /** + * @brief HLT + * + * Guest software attempted to execute HLT and the "HLT exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_HLT 0x0000000C + + /** + * @brief INVD + * + * Guest software attempted to execute INVD. + */ +#define VMX_EXIT_REASON_EXECUTE_INVD 0x0000000D + + /** + * @brief INVLPG + * + * Guest software attempted to execute INVLPG and the "INVLPG exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_INVLPG 0x0000000E + + /** + * @brief RDPMC + * + * Guest software attempted to execute RDPMC and the "RDPMC exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_RDPMC 0x0000000F + + /** + * @brief RDTSC + * + * Guest software attempted to execute RDTSC and the "RDTSC exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_RDTSC 0x00000010 + + /** + * @brief RSM in SMM + * + * Guest software attempted to execute RSM in SMM. + */ +#define VMX_EXIT_REASON_EXECUTE_RSM_IN_SMM 0x00000011 + + /** + * @brief VMCALL + * + * VMCALL was executed either by guest software (causing an ordinary VM exit) or by the executive monitor (causing an SMM + * VM exit). + * + * @see Vol3C[34.15.2(SMM VM Exits)] + */ +#define VMX_EXIT_REASON_EXECUTE_VMCALL 0x00000012 + + /** + * @brief VMCLEAR + * + * Guest software attempted to execute VMCLEAR. + */ +#define VMX_EXIT_REASON_EXECUTE_VMCLEAR 0x00000013 + + /** + * @brief VMLAUNCH + * + * Guest software attempted to execute VMLAUNCH. + */ +#define VMX_EXIT_REASON_EXECUTE_VMLAUNCH 0x00000014 + + /** + * @brief VMPTRLD + * + * Guest software attempted to execute VMPTRLD. + */ +#define VMX_EXIT_REASON_EXECUTE_VMPTRLD 0x00000015 + + /** + * @brief VMPTRST + * + * Guest software attempted to execute VMPTRST. + */ +#define VMX_EXIT_REASON_EXECUTE_VMPTRST 0x00000016 + + /** + * @brief VMREAD + * + * Guest software attempted to execute VMREAD. + */ +#define VMX_EXIT_REASON_EXECUTE_VMREAD 0x00000017 + + /** + * @brief VMRESUME + * + * Guest software attempted to execute VMRESUME. + */ +#define VMX_EXIT_REASON_EXECUTE_VMRESUME 0x00000018 + + /** + * @brief VMWRITE + * + * Guest software attempted to execute VMWRITE. + */ +#define VMX_EXIT_REASON_EXECUTE_VMWRITE 0x00000019 + + /** + * @brief VMXOFF + * + * Guest software attempted to execute VMXOFF. + */ +#define VMX_EXIT_REASON_EXECUTE_VMXOFF 0x0000001A + + /** + * @brief VMXON + * + * Guest software attempted to execute VMXON. + */ +#define VMX_EXIT_REASON_EXECUTE_VMXON 0x0000001B + + /** + * @brief Control-register accesses + * + * Guest software attempted to access CR0, CR3, CR4, or CR8 using CLTS, LMSW, or MOV CR and the VM-execution control fields + * indicate that a VM exit should occur. This basic exit reason is not used for trap-like VM exits following executions of + * the MOV to CR8 instruction when the "use TPR shadow" VM-execution control is 1. Such VM exits instead use basic exit + * reason 43. + * + * @see Vol3C[25.1(INSTRUCTIONS THAT CAUSE VM EXITS)] + */ +#define VMX_EXIT_REASON_MOV_CR 0x0000001C + + /** + * @brief Debug-register accesses + * + * Guest software attempted a MOV to or from a debug register and the "MOV-DR exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_MOV_DR 0x0000001D + + /** + * @brief I/O instruction + * + * Guest software attempted to execute an I/O instruction and either: + * -# The "use I/O bitmaps" VM-execution control was 0 and the "unconditional I/O exiting" VM-execution control was 1. + * -# The "use I/O bitmaps" VM-execution control was 1 and a bit in the I/O bitmap associated with one of the ports + * accessed by the I/O instruction was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_IO_INSTRUCTION 0x0000001E + + /** + * @brief RDMSR + * + * Guest software attempted to execute RDMSR and either: + * -# The "use MSR bitmaps" VM-execution control was 0. + * -# The value of RCX is neither in the range 00000000H - 00001FFFH nor in the range C0000000H - C0001FFFH. + * -# The value of RCX was in the range 00000000H - 00001FFFH and the nth bit in read bitmap for low MSRs is 1, where n was + * the value of RCX. + * -# The value of RCX is in the range C0000000H - C0001FFFH and the nth bit in read bitmap for high MSRs is 1, where n is + * the value of RCX & 00001FFFH. + */ +#define VMX_EXIT_REASON_EXECUTE_RDMSR 0x0000001F + + /** + * @brief WRMSR + * + * Guest software attempted to execute WRMSR and either: + * -# The "use MSR bitmaps" VM-execution control was 0. + * -# The value of RCX is neither in the range 00000000H - 00001FFFH nor in the range C0000000H - C0001FFFH. + * -# The value of RCX was in the range 00000000H - 00001FFFH and the nth bit in write bitmap for low MSRs is 1, where n + * was the value of RCX. + * -# The value of RCX is in the range C0000000H - C0001FFFH and the nth bit in write bitmap for high MSRs is 1, where n is + * the value of RCX & 00001FFFH. + */ +#define VMX_EXIT_REASON_EXECUTE_WRMSR 0x00000020 + + /** + * @brief VM-entry failure due to invalid guest state + * + * A VM entry failed one of the checks identified in Section 26.3.1. + */ +#define VMX_EXIT_REASON_ERROR_INVALID_GUEST_STATE 0x00000021 + + /** + * @brief VM-entry failure due to MSR loading + * + * A VM entry failed in an attempt to load MSRs. See Section 26.4. + */ +#define VMX_EXIT_REASON_ERROR_MSR_LOAD 0x00000022 + + /** + * @brief Guest software executed MWAIT + * + * Guest software attempted to execute MWAIT and the "MWAIT exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_MWAIT 0x00000024 + + /** + * @brief VM-exit due to monitor trap flag + * + * A VM entry occurred due to the 1-setting of the "monitor trap flag" VM-execution control and injection of an MTF VM exit + * as part of VM entry. + * + * @see Vol3C[25.5.2(Monitor Trap Flag)] + */ +#define VMX_EXIT_REASON_MONITOR_TRAP_FLAG 0x00000025 + + /** + * @brief Guest software attempted to execute MONITOR + * + * Guest software attempted to execute MONITOR and the "MONITOR exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_MONITOR 0x00000027 + + /** + * @brief Guest software attempted to execute PAUSE + * + * Either guest software attempted to execute PAUSE and the "PAUSE exiting" VM-execution control was 1 or the "PAUSE-loop + * exiting" VM-execution control was 1 and guest software executed a PAUSE loop with execution time exceeding PLE_Window. + * + * @see Vol3C[25.1.3(Instructions That Cause VM Exits Conditionally)] + */ +#define VMX_EXIT_REASON_EXECUTE_PAUSE 0x00000028 + + /** + * @brief VM-entry failure due to machine-check + * + * A machine-check event occurred during VM entry. + * + * @see Vol3C[26.8(MACHINE-CHECK EVENTS DURING VM ENTRY)] + */ +#define VMX_EXIT_REASON_ERROR_MACHINE_CHECK 0x00000029 + + /** + * @brief TPR below threshold + * + * The logical processor determined that the value of bits 7:4 of the byte at offset 080H on the virtual-APIC page was + * below that of the TPR threshold VM-execution control field while the "use TPR shadow" VMexecution control was 1 either + * as part of TPR virtualization or VM entry. + * + * @see Vol3C[29.1.2(TPR Virtualization)] + * @see Vol3C[26.6.7(VM Exits Induced by the TPR Threshold)] + */ +#define VMX_EXIT_REASON_TPR_BELOW_THRESHOLD 0x0000002B + + /** + * @brief APIC access + * + * Guest software attempted to access memory at a physical address on the APIC-access page and the "virtualize APIC + * accesses" VM-execution control was 1. + * + * @see Vol3C[29.4(VIRTUALIZING MEMORY-MAPPED APIC ACCESSES)] + */ +#define VMX_EXIT_REASON_APIC_ACCESS 0x0000002C + + /** + * @brief Virtualized EOI + * + * EOI virtualization was performed for a virtual interrupt whose vector indexed a bit set in the EOIexit bitmap. + */ +#define VMX_EXIT_REASON_VIRTUALIZED_EOI 0x0000002D + + /** + * @brief Access to GDTR or IDTR + * + * Guest software attempted to execute LGDT, LIDT, SGDT, or SIDT and the "descriptor-table exiting" VM-execution control + * was 1. + */ +#define VMX_EXIT_REASON_GDTR_IDTR_ACCESS 0x0000002E + + /** + * @brief Access to LDTR or TR + * + * Guest software attempted to execute LLDT, LTR, SLDT, or STR and the "descriptor-table exiting" VM-execution control was + * 1. + */ +#define VMX_EXIT_REASON_LDTR_TR_ACCESS 0x0000002F + + /** + * @brief EPT violation + * + * An attempt to access memory with a guest-physical address was disallowed by the configuration of the EPT paging + * structures. + */ +#define VMX_EXIT_REASON_EPT_VIOLATION 0x00000030 + + /** + * @brief EPT misconfiguration + * + * An attempt to access memory with a guest-physical address encountered a misconfigured EPT paging-structure entry. + */ +#define VMX_EXIT_REASON_EPT_MISCONFIGURATION 0x00000031 + + /** + * @brief INVEPT + * + * Guest software attempted to execute INVEPT. + */ +#define VMX_EXIT_REASON_EXECUTE_INVEPT 0x00000032 + + /** + * @brief RDTSCP + * + * Guest software attempted to execute RDTSCP and the "enable RDTSCP" and "RDTSC exiting" VM-execution controls were both + * 1. + */ +#define VMX_EXIT_REASON_EXECUTE_RDTSCP 0x00000033 + + /** + * @brief VMX-preemption timer expired + * + * The preemption timer counted down to zero. + */ +#define VMX_EXIT_REASON_VMX_PREEMPTION_TIMER_EXPIRED 0x00000034 + + /** + * @brief INVVPID + * + * Guest software attempted to execute INVVPID. + */ +#define VMX_EXIT_REASON_EXECUTE_INVVPID 0x00000035 + + /** + * @brief WBINVD + * + * Guest software attempted to execute WBINVD and the "WBINVD exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_WBINVD 0x00000036 + + /** + * @brief XSETBV - Guest software attempted to execute XSETBV + * + * Guest software attempted to execute XSETBV. + */ +#define VMX_EXIT_REASON_EXECUTE_XSETBV 0x00000037 + + /** + * @brief APIC write + * + * Guest software completed a write to the virtual-APIC page that must be virtualized by VMM software. + * + * @see Vol3C[29.4.3.3(APIC-Write VM Exits)] + */ +#define VMX_EXIT_REASON_APIC_WRITE 0x00000038 + + /** + * @brief RDRAND + * + * Guest software attempted to execute RDRAND and the "RDRAND exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_RDRAND 0x00000039 + + /** + * @brief INVPCID + * + * Guest software attempted to execute INVPCID and the "enable INVPCID" and "INVLPG exiting" VM-execution controls were + * both 1. + */ +#define VMX_EXIT_REASON_EXECUTE_INVPCID 0x0000003A + + /** + * @brief VMFUNC + * + * Guest software invoked a VM function with the VMFUNC instruction and the VM function either was not enabled or generated + * a function-specific condition causing a VM exit. + */ +#define VMX_EXIT_REASON_EXECUTE_VMFUNC 0x0000003B + + /** + * @brief ENCLS + * + * Guest software attempted to execute ENCLS and "enable ENCLS exiting" VM-execution control was 1 and either: + * -# EAX < 63 and the corresponding bit in the ENCLS-exiting bitmap is 1; or + * -# EAX >= 63 and bit 63 in the ENCLS-exiting bitmap is 1. + */ +#define VMX_EXIT_REASON_EXECUTE_ENCLS 0x0000003C + + /** + * @brief RDSEED + * + * Guest software attempted to execute RDSEED and the "RDSEED exiting" VM-execution control was 1. + */ +#define VMX_EXIT_REASON_EXECUTE_RDSEED 0x0000003D + + /** + * @brief Page-modification log full + * + * The processor attempted to create a page-modification log entry and the value of the PML index was not in the range + * 0-511. + */ +#define VMX_EXIT_REASON_PAGE_MODIFICATION_LOG_FULL 0x0000003E + + /** + * @brief XSAVES + * + * Guest software attempted to execute XSAVES, the "enable XSAVES/XRSTORS" was 1, and a bit was set in the logical-AND of + * the following three values: EDX:EAX, the IA32_XSS MSR, and the XSS-exiting bitmap. + */ +#define VMX_EXIT_REASON_EXECUTE_XSAVES 0x0000003F + + /** + * @brief XRSTORS + * + * Guest software attempted to execute XRSTORS, the "enable XSAVES/XRSTORS" was 1, and a bit was set in the logical-AND of + * the following three values: EDX:EAX, the IA32_XSS MSR, and the XSS-exiting bitmap. + */ +#define VMX_EXIT_REASON_EXECUTE_XRSTORS 0x00000040 + /** + * @} + */ + + /** + * @defgroup vmx_instruction_error_numbers \ + * VM-Instruction Error Numbers + * + * VM-Instruction Error Numbers. + * + * @see Vol3C[30.4(VM INSTRUCTION ERROR NUMBERS)] (reference) + * @{ + */ + /** + * VMCALL executed in VMX root operation. + */ +#define VMX_ERROR_VMCALL_IN_VMX_ROOT_OPERATION 0x00000001 + + /** + * VMCLEAR with invalid physical address. + */ +#define VMX_ERROR_VMCLEAR_INVALID_PHYSICAL_ADDRESS 0x00000002 + + /** + * VMCLEAR with VMXON pointer. + */ +#define VMX_ERROR_VMCLEAR_INVALID_VMXON_POINTER 0x00000003 + + /** + * VMLAUNCH with non-clear VMCS. + */ +#define VMX_ERROR_VMLAUCH_NON_CLEAR_VMCS 0x00000004 + + /** + * VMRESUME with non-launched VMCS. + */ +#define VMX_ERROR_VMRESUME_NON_LAUNCHED_VMCS 0x00000005 + + /** + * VMRESUME after VMXOFF (VMXOFF and VMXON between VMLAUNCH and VMRESUME). + */ +#define VMX_ERROR_VMRESUME_AFTER_VMXOFF 0x00000006 + + /** + * VM entry with invalid control field(s). + */ +#define VMX_ERROR_VMENTRY_INVALID_CONTROL_FIELDS 0x00000007 + + /** + * VM entry with invalid host-state field(s). + */ +#define VMX_ERROR_VMENTRY_INVALID_HOST_STATE 0x00000008 + + /** + * VMPTRLD with invalid physical address. + */ +#define VMX_ERROR_VMPTRLD_INVALID_PHYSICAL_ADDRESS 0x00000009 + + /** + * VMPTRLD with VMXON pointer. + */ +#define VMX_ERROR_VMPTRLD_VMXON_POINTER 0x0000000A + + /** + * VMPTRLD with incorrect VMCS revision identifier. + */ +#define VMX_ERROR_VMPTRLD_INCORRECT_VMCS_REVISION_ID 0x0000000B + + /** + * VMREAD/VMWRITE from/to unsupported VMCS component. + */ +#define VMX_ERROR_VMREAD_VMWRITE_INVALID_COMPONENT 0x0000000C + + /** + * VMWRITE to read-only VMCS component. + */ +#define VMX_ERROR_VMWRITE_READONLY_COMPONENT 0x0000000D + + /** + * VMXON executed in VMX root operation. + */ +#define VMX_ERROR_VMXON_IN_VMX_ROOT_OP 0x0000000F + + /** + * VM entry with invalid executive-VMCS pointer. + */ +#define VMX_ERROR_VMENTRY_INVALID_VMCS_EXECUTIVE_POINTER 0x00000010 + + /** + * VM entry with non-launched executive VMCS. + */ +#define VMX_ERROR_VMENTRY_NON_LAUNCHED_EXECUTIVE_VMCS 0x00000011 + + /** + * VM entry with executive-VMCS pointer not VMXON pointer (when attempting to deactivate the dual-monitor treatment of SMIs + * and SMM). + */ +#define VMX_ERROR_VMENTRY_EXECUTIVE_VMCS_PTR 0x00000012 + + /** + * VMCALL with non-clear VMCS (when attempting to activate the dual-monitor treatment of SMIs and SMM). + */ +#define VMX_ERROR_VMCALL_NON_CLEAR_VMCS 0x00000013 + + /** + * VMCALL with invalid VM-exit control fields. + */ +#define VMX_ERROR_VMCALL_INVALID_VMEXIT_FIELDS 0x00000014 + + /** + * VMCALL with incorrect MSEG revision identifier (when attempting to activate the dual-monitor treatment of SMIs and SMM). + */ +#define VMX_ERROR_VMCALL_INVALID_MSEG_REVISION_ID 0x00000016 + + /** + * VMXOFF under dual-monitor treatment of SMIs and SMM. + */ +#define VMX_ERROR_VMXOFF_DUAL_MONITOR 0x00000017 + + /** + * VMCALL with invalid SMM-monitor features (when attempting to activate the dual-monitor treatment of SMIs and SMM). + */ +#define VMX_ERROR_VMCALL_INVALID_SMM_MONITOR 0x00000018 + + /** + * VM entry with invalid VM-execution control fields in executive VMCS (when attempting to return from SMM). + */ +#define VMX_ERROR_VMENTRY_INVALID_VM_EXECUTION_CONTROL 0x00000019 + + /** + * VM entry with events blocked by MOV SS. + */ +#define VMX_ERROR_VMENTRY_MOV_SS 0x0000001A + + /** + * Invalid operand to INVEPT/INVVPID. + */ +#define VMX_ERROR_INVEPT_INVVPID_INVALID_OPERAND 0x0000001C + /** + * @} + */ + + /** + * @defgroup vmx_exceptions \ + * Virtualization Exceptions + * + * Virtualization Exceptions. + * + * @see Vol3C[25.5.6(Virtualization Exceptions)] (reference) + * @{ + */ +typedef struct +{ + /** + * The 32-bit value that would have been saved into the VMCS as an exit reason had a VM exit occurred instead of the + * virtualization exception. For EPT violations, this value is 48 (00000030H). + */ + uint32_t reason; + + /** + * FFFFFFFFH + */ + uint32_t exception_mask; + + /** + * The 64-bit value that would have been saved into the VMCS as an exit qualification had a VM exit occurred instead of the + * virtualization exception. + */ + uint64_t exit; + + /** + * The 64-bit value that would have been saved into the VMCS as a guest-linear address had a VM exit occurred instead of + * the virtualization exception. + */ + uint64_t guest_linear_address; + + /** + * The 64-bit value that would have been saved into the VMCS as a guest-physical address had a VM exit occurred instead of + * the virtualization exception. + */ + uint64_t guest_physical_address; + + /** + * The current 16-bit value of the EPTP index VM-execution control. + * + * @see Vol3C[24.6.18(Controls for Virtualization Exceptions)] + * @see Vol3C[25.5.5.3(EPTP Switching)] + */ + uint16_t current_eptp_index; +} vmx_virtualization_exception_information; + +/** + * @} + */ + + /** + * @defgroup vmx_basic_exit_information \ + * Basic VM-Exit Information + * + * Basic VM-Exit Information. + * + * @see Vol3C[27.2.1(Basic VM-Exit Information)] (reference) + * @{ + */ + /** + * @brief Exit Qualification for Debug Exceptions + */ +typedef union +{ + struct + { + /** + * @brief B0 - B3 + * + * [Bits 3:0] When set, each of these bits indicates that the corresponding breakpoint condition was met. Any of these bits + * may be set even if its corresponding enabling bit in DR7 is not set. + */ + uint64_t breakpoint_condition : 4; +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_BREAKPOINT_CONDITION_BIT 0 +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_BREAKPOINT_CONDITION_FLAG 0x0F +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_BREAKPOINT_CONDITION_MASK 0x0F +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_BREAKPOINT_CONDITION(_) (((_) >> 0) & 0x0F) + uint64_t reserved1 : 9; + + /** + * @brief BD + * + * [Bit 13] When set, this bit indicates that the cause of the debug exception is "debug register access detected." + */ + uint64_t debug_register_access_detected : 1; +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_DEBUG_REGISTER_ACCESS_DETECTED_BIT 13 +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_DEBUG_REGISTER_ACCESS_DETECTED_FLAG 0x2000 +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_DEBUG_REGISTER_ACCESS_DETECTED_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_DEBUG_REGISTER_ACCESS_DETECTED(_) (((_) >> 13) & 0x01) + + /** + * @brief BS + * + * [Bit 14] When set, this bit indicates that the cause of the debug exception is either the execution of a single + * instruction (if RFLAGS.TF = 1 and IA32_DEBUGCTL.BTF = 0) or a taken branch (if RFLAGS.TF = DEBUGCTL.BTF = 1). + */ + uint64_t single_instruction : 1; +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_SINGLE_INSTRUCTION_BIT 14 +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_SINGLE_INSTRUCTION_FLAG 0x4000 +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_SINGLE_INSTRUCTION_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_DEBUG_EXCEPTION_SINGLE_INSTRUCTION(_) (((_) >> 14) & 0x01) + uint64_t reserved2 : 49; + }; + + uint64_t flags; +} vmx_exit_qualification_debug_exception; + +/** + * @brief Exit Qualification for Task Switch + */ +typedef union +{ + struct + { + /** + * [Bits 15:0] Selector of task-state segment (TSS) to which the guest attempted to switch. + */ + uint64_t selector : 16; +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SELECTOR_BIT 0 +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SELECTOR_FLAG 0xFFFF +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SELECTOR_MASK 0xFFFF +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SELECTOR(_) (((_) >> 0) & 0xFFFF) + uint64_t reserved1 : 14; + + /** + * [Bits 31:30] Source of task switch initiation. + */ + uint64_t source : 2; +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SOURCE_BIT 30 +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SOURCE_FLAG 0xC0000000 +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SOURCE_MASK 0x03 +#define VMX_EXIT_QUALIFICATION_TASK_SWITCH_SOURCE(_) (((_) >> 30) & 0x03) +#define VMX_EXIT_QUALIFICATION_TYPE_CALL_INSTRUCTION 0x00000000 +#define VMX_EXIT_QUALIFICATION_TYPE_IRET_INSTRUCTION 0x00000001 +#define VMX_EXIT_QUALIFICATION_TYPE_JMP_INSTRUCTION 0x00000002 +#define VMX_EXIT_QUALIFICATION_TYPE_TASK_GATE_IN_IDT 0x00000003 + uint64_t reserved2 : 32; + }; + + uint64_t flags; +} vmx_exit_qualification_task_switch; + +/** + * @brief Exit Qualification for Control-Register Accesses + */ +typedef union +{ + struct + { + /** + * [Bits 3:0] Number of control register (0 for CLTS and LMSW). Bit 3 is always 0 on processors that do not support Intel + * 64 architecture as they do not support CR8. + */ + uint64_t control_register : 4; +#define VMX_EXIT_QUALIFICATION_MOV_CR_CONTROL_REGISTER_BIT 0 +#define VMX_EXIT_QUALIFICATION_MOV_CR_CONTROL_REGISTER_FLAG 0x0F +#define VMX_EXIT_QUALIFICATION_MOV_CR_CONTROL_REGISTER_MASK 0x0F +#define VMX_EXIT_QUALIFICATION_MOV_CR_CONTROL_REGISTER(_) (((_) >> 0) & 0x0F) +#define VMX_EXIT_QUALIFICATION_REGISTER_CR0 0x00000000 +#define VMX_EXIT_QUALIFICATION_REGISTER_CR2 0x00000002 +#define VMX_EXIT_QUALIFICATION_REGISTER_CR3 0x00000003 +#define VMX_EXIT_QUALIFICATION_REGISTER_CR4 0x00000004 +#define VMX_EXIT_QUALIFICATION_REGISTER_CR8 0x00000008 + + /** + * [Bits 5:4] Access type. + */ + uint64_t access_type : 2; +#define VMX_EXIT_QUALIFICATION_MOV_CR_ACCESS_TYPE_BIT 4 +#define VMX_EXIT_QUALIFICATION_MOV_CR_ACCESS_TYPE_FLAG 0x30 +#define VMX_EXIT_QUALIFICATION_MOV_CR_ACCESS_TYPE_MASK 0x03 +#define VMX_EXIT_QUALIFICATION_MOV_CR_ACCESS_TYPE(_) (((_) >> 4) & 0x03) +#define VMX_EXIT_QUALIFICATION_ACCESS_MOV_TO_CR 0x00000000 +#define VMX_EXIT_QUALIFICATION_ACCESS_MOV_FROM_CR 0x00000001 +#define VMX_EXIT_QUALIFICATION_ACCESS_CLTS 0x00000002 +#define VMX_EXIT_QUALIFICATION_ACCESS_LMSW 0x00000003 + + /** + * [Bit 6] LMSW operand type. For CLTS and MOV CR, cleared to 0. + */ + uint64_t lmsw_operand_type : 1; +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_OPERAND_TYPE_BIT 6 +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_OPERAND_TYPE_FLAG 0x40 +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_OPERAND_TYPE_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_OPERAND_TYPE(_) (((_) >> 6) & 0x01) +#define VMX_EXIT_QUALIFICATION_LMSW_OP_REGISTER 0x00000000 +#define VMX_EXIT_QUALIFICATION_LMSW_OP_MEMORY 0x00000001 + uint64_t reserved1 : 1; + + /** + * [Bits 11:8] For MOV CR, the general-purpose register. + */ + uint64_t general_purpose_register : 4; +#define VMX_EXIT_QUALIFICATION_MOV_CR_GENERAL_PURPOSE_REGISTER_BIT 8 +#define VMX_EXIT_QUALIFICATION_MOV_CR_GENERAL_PURPOSE_REGISTER_FLAG 0xF00 +#define VMX_EXIT_QUALIFICATION_MOV_CR_GENERAL_PURPOSE_REGISTER_MASK 0x0F +#define VMX_EXIT_QUALIFICATION_MOV_CR_GENERAL_PURPOSE_REGISTER(_) (((_) >> 8) & 0x0F) +#define VMX_EXIT_QUALIFICATION_GENREG_RAX 0x00000000 +#define VMX_EXIT_QUALIFICATION_GENREG_RCX 0x00000001 +#define VMX_EXIT_QUALIFICATION_GENREG_RDX 0x00000002 +#define VMX_EXIT_QUALIFICATION_GENREG_RBX 0x00000003 +#define VMX_EXIT_QUALIFICATION_GENREG_RSP 0x00000004 +#define VMX_EXIT_QUALIFICATION_GENREG_RBP 0x00000005 +#define VMX_EXIT_QUALIFICATION_GENREG_RSI 0x00000006 +#define VMX_EXIT_QUALIFICATION_GENREG_RDI 0x00000007 +#define VMX_EXIT_QUALIFICATION_GENREG_R8 0x00000008 +#define VMX_EXIT_QUALIFICATION_GENREG_R9 0x00000009 +#define VMX_EXIT_QUALIFICATION_GENREG_R10 0x0000000A +#define VMX_EXIT_QUALIFICATION_GENREG_R11 0x0000000B +#define VMX_EXIT_QUALIFICATION_GENREG_R12 0x0000000C +#define VMX_EXIT_QUALIFICATION_GENREG_R13 0x0000000D +#define VMX_EXIT_QUALIFICATION_GENREG_R14 0x0000000E +#define VMX_EXIT_QUALIFICATION_GENREG_R15 0x0000000F + uint64_t reserved2 : 4; + + /** + * [Bits 31:16] For LMSW, the LMSW source data. For CLTS and MOV CR, cleared to 0. + */ + uint64_t lmsw_source_data : 16; +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_SOURCE_DATA_BIT 16 +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_SOURCE_DATA_FLAG 0xFFFF0000 +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_SOURCE_DATA_MASK 0xFFFF +#define VMX_EXIT_QUALIFICATION_MOV_CR_LMSW_SOURCE_DATA(_) (((_) >> 16) & 0xFFFF) + uint64_t reserved3 : 32; + }; + + uint64_t flags; +} vmx_exit_qualification_mov_cr; + +/** + * @brief Exit Qualification for MOV DR + */ +typedef union +{ + struct + { + /** + * [Bits 2:0] Number of debug register. + */ + uint64_t debug_register : 3; +#define VMX_EXIT_QUALIFICATION_MOV_DR_DEBUG_REGISTER_BIT 0 +#define VMX_EXIT_QUALIFICATION_MOV_DR_DEBUG_REGISTER_FLAG 0x07 +#define VMX_EXIT_QUALIFICATION_MOV_DR_DEBUG_REGISTER_MASK 0x07 +#define VMX_EXIT_QUALIFICATION_MOV_DR_DEBUG_REGISTER(_) (((_) >> 0) & 0x07) +#define VMX_EXIT_QUALIFICATION_REGISTER_DR0 0x00000000 +#define VMX_EXIT_QUALIFICATION_REGISTER_DR1 0x00000001 +#define VMX_EXIT_QUALIFICATION_REGISTER_DR2 0x00000002 +#define VMX_EXIT_QUALIFICATION_REGISTER_DR3 0x00000003 +#define VMX_EXIT_QUALIFICATION_REGISTER_DR6 0x00000006 +#define VMX_EXIT_QUALIFICATION_REGISTER_DR7 0x00000007 + uint64_t reserved1 : 1; + + /** + * [Bit 4] Direction of access (0 = MOV to DR; 1 = MOV from DR). + */ + uint64_t direction_of_access : 1; +#define VMX_EXIT_QUALIFICATION_MOV_DR_DIRECTION_OF_ACCESS_BIT 4 +#define VMX_EXIT_QUALIFICATION_MOV_DR_DIRECTION_OF_ACCESS_FLAG 0x10 +#define VMX_EXIT_QUALIFICATION_MOV_DR_DIRECTION_OF_ACCESS_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_MOV_DR_DIRECTION_OF_ACCESS(_) (((_) >> 4) & 0x01) +#define VMX_EXIT_QUALIFICATION_DIRECTION_MOV_TO_DR 0x00000000 +#define VMX_EXIT_QUALIFICATION_DIRECTION_MOV_FROM_DR 0x00000001 + uint64_t reserved2 : 3; + + /** + * [Bits 11:8] General-purpose register. + */ + uint64_t general_purpose_register : 4; +#define VMX_EXIT_QUALIFICATION_MOV_DR_GENERAL_PURPOSE_REGISTER_BIT 8 +#define VMX_EXIT_QUALIFICATION_MOV_DR_GENERAL_PURPOSE_REGISTER_FLAG 0xF00 +#define VMX_EXIT_QUALIFICATION_MOV_DR_GENERAL_PURPOSE_REGISTER_MASK 0x0F +#define VMX_EXIT_QUALIFICATION_MOV_DR_GENERAL_PURPOSE_REGISTER(_) (((_) >> 8) & 0x0F) + uint64_t reserved3 : 52; + }; + + uint64_t flags; +} vmx_exit_qualification_mov_dr; + +/** + * @brief Exit Qualification for I/O Instructions + */ +typedef union +{ + struct + { + /** + * [Bits 2:0] Size of access. + */ + uint64_t size_of_access : 3; +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_SIZE_OF_ACCESS_BIT 0 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_SIZE_OF_ACCESS_FLAG 0x07 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_SIZE_OF_ACCESS_MASK 0x07 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_SIZE_OF_ACCESS(_) (((_) >> 0) & 0x07) +#define VMX_EXIT_QUALIFICATION_WIDTH_1_BYTE 0x00000000 +#define VMX_EXIT_QUALIFICATION_WIDTH_2_BYTE 0x00000001 +#define VMX_EXIT_QUALIFICATION_WIDTH_4_BYTE 0x00000003 + + /** + * [Bit 3] Direction of the attempted access (0 = OUT, 1 = IN). + */ + uint64_t direction_of_access : 1; +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_DIRECTION_OF_ACCESS_BIT 3 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_DIRECTION_OF_ACCESS_FLAG 0x08 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_DIRECTION_OF_ACCESS_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_DIRECTION_OF_ACCESS(_) (((_) >> 3) & 0x01) +#define VMX_EXIT_QUALIFICATION_DIRECTION_OUT 0x00000000 +#define VMX_EXIT_QUALIFICATION_DIRECTION_IN 0x00000001 + + /** + * [Bit 4] String instruction (0 = not string; 1 = string). + */ + uint64_t string_instruction : 1; +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_STRING_INSTRUCTION_BIT 4 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_STRING_INSTRUCTION_FLAG 0x10 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_STRING_INSTRUCTION_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_STRING_INSTRUCTION(_) (((_) >> 4) & 0x01) +#define VMX_EXIT_QUALIFICATION_IS_STRING_NOT_STRING 0x00000000 +#define VMX_EXIT_QUALIFICATION_IS_STRING_STRING 0x00000001 + + /** + * [Bit 5] REP prefixed (0 = not REP; 1 = REP). + */ + uint64_t rep_prefixed : 1; +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_REP_PREFIXED_BIT 5 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_REP_PREFIXED_FLAG 0x20 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_REP_PREFIXED_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_REP_PREFIXED(_) (((_) >> 5) & 0x01) +#define VMX_EXIT_QUALIFICATION_IS_REP_NOT_REP 0x00000000 +#define VMX_EXIT_QUALIFICATION_IS_REP_REP 0x00000001 + + /** + * [Bit 6] Operand encoding (0 = DX, 1 = immediate). + */ + uint64_t operand_encoding : 1; +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_OPERAND_ENCODING_BIT 6 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_OPERAND_ENCODING_FLAG 0x40 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_OPERAND_ENCODING_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_OPERAND_ENCODING(_) (((_) >> 6) & 0x01) +#define VMX_EXIT_QUALIFICATION_ENCODING_DX 0x00000000 +#define VMX_EXIT_QUALIFICATION_ENCODING_IMMEDIATE 0x00000001 + uint64_t reserved1 : 9; + + /** + * [Bits 31:16] Port number (as specified in DX or in an immediate operand). + */ + uint64_t port_number : 16; +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_PORT_NUMBER_BIT 16 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_PORT_NUMBER_FLAG 0xFFFF0000 +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_PORT_NUMBER_MASK 0xFFFF +#define VMX_EXIT_QUALIFICATION_IO_INSTRUCTION_PORT_NUMBER(_) (((_) >> 16) & 0xFFFF) + uint64_t reserved2 : 32; + }; + + uint64_t flags; +} vmx_exit_qualification_io_instruction; + +/** + * @brief Exit Qualification for APIC-Access VM Exits from Linear Accesses and Guest-Physical Accesses + */ +typedef union +{ + struct + { + /** + * [Bits 11:0] - If the APIC-access VM exit is due to a linear access, the offset of access within the APIC page. + * - Undefined if the APIC-access VM exit is due a guest-physical access. + */ + uint64_t page_offset : 12; +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_PAGE_OFFSET_BIT 0 +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_PAGE_OFFSET_FLAG 0xFFF +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_PAGE_OFFSET_MASK 0xFFF +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_PAGE_OFFSET(_) (((_) >> 0) & 0xFFF) + + /** + * [Bits 15:12] Access type. + */ + uint64_t access_type : 4; +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_ACCESS_TYPE_BIT 12 +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_ACCESS_TYPE_FLAG 0xF000 +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_ACCESS_TYPE_MASK 0x0F +#define VMX_EXIT_QUALIFICATION_APIC_ACCESS_ACCESS_TYPE(_) (((_) >> 12) & 0x0F) + /** + * Linear access for a data read during instruction execution. + */ +#define VMX_EXIT_QUALIFICATION_TYPE_LINEAR_READ 0x00000000 + + /** + * Linear access for a data write during instruction execution. + */ +#define VMX_EXIT_QUALIFICATION_TYPE_LINEAR_WRITE 0x00000001 + + /** + * Linear access for an instruction fetch. + */ +#define VMX_EXIT_QUALIFICATION_TYPE_LINEAR_INSTRUCTION_FETCH 0x00000002 + + /** + * Linear access (read or write) during event delivery. + */ +#define VMX_EXIT_QUALIFICATION_TYPE_LINEAR_EVENT_DELIVERY 0x00000003 + + /** + * Guest-physical access during event delivery. + */ +#define VMX_EXIT_QUALIFICATION_TYPE_PHYSICAL_EVENT_DELIVERY 0x0000000A + + /** + * Guest-physical access for an instruction fetch or during instruction execution. + */ +#define VMX_EXIT_QUALIFICATION_TYPE_PHYSICAL_INSTRUCTION_FETCH 0x0000000F + uint64_t reserved1 : 48; + }; + + uint64_t flags; +} vmx_exit_qualification_apic_access; + +/** + * @brief Exit Qualification for EPT Violations + */ +typedef union +{ + struct + { + /** + * [Bit 0] Set if the access causing the EPT violation was a data read. + */ + uint64_t read_access : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READ_ACCESS_BIT 0 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READ_ACCESS_FLAG 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READ_ACCESS_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READ_ACCESS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Set if the access causing the EPT violation was a data write. + */ + uint64_t write_access : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_WRITE_ACCESS_BIT 1 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_WRITE_ACCESS_FLAG 0x02 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_WRITE_ACCESS_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Set if the access causing the EPT violation was an instruction fetch. + */ + uint64_t execute_access : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_ACCESS_BIT 2 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_ACCESS_FLAG 0x04 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_ACCESS_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] The logical-AND of bit 0 in the EPT paging-structure entries used to translate the guest-physical address of the + * access causing the EPT violation (indicates whether the guest-physical address was readable). + */ + uint64_t ept_readable : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_READABLE_BIT 3 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_READABLE_FLAG 0x08 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_READABLE_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_READABLE(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] The logical-AND of bit 1 in the EPT paging-structure entries used to translate the guest-physical address of the + * access causing the EPT violation (indicates whether the guest-physical address was writeable). + */ + uint64_t ept_writeable : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_WRITEABLE_BIT 4 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_WRITEABLE_FLAG 0x10 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_WRITEABLE_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_WRITEABLE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] The logical-AND of bit 2 in the EPT paging-structure entries used to translate the guest-physical address of the + * access causing the EPT violation. + * If the "mode-based execute control for EPT" VM-execution control is 0, this indicates whether the guest-physical address + * was executable. If that control is 1, this indicates whether the guest-physical address was executable for + * supervisor-mode linear addresses. + */ + uint64_t ept_executable : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE_BIT 5 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE_FLAG 0x20 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE(_) (((_) >> 5) & 0x01) + + /** + * [Bit 6] If the "mode-based execute control" VM-execution control is 0, the value of this bit is undefined. If that + * control is 1, this bit is the logical-AND of bit 10 in the EPT paging-structures entries used to translate the + * guest-physical address of the access causing the EPT violation. In this case, it indicates whether the guest-physical + * address was executable for user-mode linear addresses. + */ + uint64_t ept_executable_for_user_mode : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE_FOR_USER_MODE_BIT 6 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE_FOR_USER_MODE_FLAG 0x40 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE_FOR_USER_MODE_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EPT_EXECUTABLE_FOR_USER_MODE(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Set if the guest linear-address field is valid. The guest linear-address field is valid for all EPT violations + * except those resulting from an attempt to load the guest PDPTEs as part of the execution of the MOV CR instruction. + */ + uint64_t valid_guest_linear_address : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_VALID_GUEST_LINEAR_ADDRESS_BIT 7 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_VALID_GUEST_LINEAR_ADDRESS_FLAG 0x80 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_VALID_GUEST_LINEAR_ADDRESS_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_VALID_GUEST_LINEAR_ADDRESS(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] If bit 7 is 1: + * - Set if the access causing the EPT violation is to a guest-physical address that is the translation of a linear + * address. + * - Clear if the access causing the EPT violation is to a paging-structure entry as part of a page walk or the update of + * an accessed or dirty bit. + * Reserved if bit 7 is 0 (cleared to 0). + */ + uint64_t caused_by_translation : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_CAUSED_BY_TRANSLATION_BIT 8 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_CAUSED_BY_TRANSLATION_FLAG 0x100 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_CAUSED_BY_TRANSLATION_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_CAUSED_BY_TRANSLATION(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] This bit is 0 if the linear address is a supervisor-mode linear address and 1 if it is a user-mode linear + * address. Otherwise, this bit is undefined. + * + * @remarks If bit 7 is 1, bit 8 is 1, and the processor supports advanced VM-exit information for EPT violations. (If + * CR0.PG = 0, the translation of every linear address is a user-mode linear address and thus this bit will be 1.) + */ + uint64_t user_mode_linear_address : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_USER_MODE_LINEAR_ADDRESS_BIT 9 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_USER_MODE_LINEAR_ADDRESS_FLAG 0x200 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_USER_MODE_LINEAR_ADDRESS_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_USER_MODE_LINEAR_ADDRESS(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] This bit is 0 if paging translates the linear address to a read-only page and 1 if it translates to a + * read/write page. Otherwise, this bit is undefined + * + * @remarks If bit 7 is 1, bit 8 is 1, and the processor supports advanced VM-exit information for EPT violations. (If + * CR0.PG = 0, every linear address is read/write and thus this bit will be 1.) + */ + uint64_t readable_writable_page : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READABLE_WRITABLE_PAGE_BIT 10 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READABLE_WRITABLE_PAGE_FLAG 0x400 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READABLE_WRITABLE_PAGE_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_READABLE_WRITABLE_PAGE(_) (((_) >> 10) & 0x01) + + /** + * [Bit 11] This bit is 0 if paging translates the linear address to an executable page and 1 if it translates to an + * execute-disable page. Otherwise, this bit is undefined. + * + * @remarks If bit 7 is 1, bit 8 is 1, and the processor supports advanced VM-exit information for EPT violations. (If + * CR0.PG = 0, CR4.PAE = 0, or IA32_EFER.NXE = 0, every linear address is executable and thus this bit will be 0.) + */ + uint64_t execute_disable_page : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_DISABLE_PAGE_BIT 11 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_DISABLE_PAGE_FLAG 0x800 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_DISABLE_PAGE_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_EXECUTE_DISABLE_PAGE(_) (((_) >> 11) & 0x01) + + /** + * [Bit 12] NMI unblocking due to IRET. + */ + uint64_t nmi_unblocking : 1; +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_NMI_UNBLOCKING_BIT 12 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_NMI_UNBLOCKING_FLAG 0x1000 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_NMI_UNBLOCKING_MASK 0x01 +#define VMX_EXIT_QUALIFICATION_EPT_VIOLATION_NMI_UNBLOCKING(_) (((_) >> 12) & 0x01) + uint64_t reserved1 : 51; + }; + + uint64_t flags; +} vmx_exit_qualification_ept_violation; + +/** + * @} + */ + + /** + * @defgroup vmx_vmexit_instruction_information \ + * Information for VM Exits Due to Instruction Execution + * + * Information for VM Exits Due to Instruction Execution. + * + * @see Vol3C[27.2.4(Information for VM Exits Due to Instruction Execution)] (reference) + * @{ + */ + /** + * @brief VM-Exit Instruction-Information Field as Used for INS and OUTS + */ +typedef union +{ + struct + { + uint64_t reserved1 : 7; + + /** + * @brief Address size + * + * [Bits 9:7] 0: 16-bit + * 1: 32-bit + * 2: 64-bit (used only on processors that support Intel 64 architecture) + * Other values not used. + */ + uint64_t address_size : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_ADDRESS_SIZE_BIT 7 +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_ADDRESS_SIZE_FLAG 0x380 +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_ADDRESS_SIZE_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_ADDRESS_SIZE(_) (((_) >> 7) & 0x07) + uint64_t reserved2 : 5; + + /** + * @brief Segment register + * + * [Bits 17:15] 0: ES + * 1: CS + * 2: SS + * 3: DS + * 4: FS + * 5: GS + * Other values not used. Undefined for VM exits due to execution of INS. + */ + uint64_t segment_register : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_SEGMENT_REGISTER_BIT 15 +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_SEGMENT_REGISTER_FLAG 0x38000 +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_SEGMENT_REGISTER_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_INS_OUTS_SEGMENT_REGISTER(_) (((_) >> 15) & 0x07) + uint64_t reserved3 : 46; + }; + + uint64_t flags; +} vmx_vmexit_instruction_info_ins_outs; + +/** + * @brief VM-Exit Instruction-Information Field as Used for INVEPT, INVPCID, and INVVPID + */ +typedef union +{ + struct + { + /** + * @brief Scaling + * + * [Bits 1:0] 0: no scaling + * 1: scale by 2 + * 2: scale by 4 + * 3: scale by 8 (used only on processors that support Intel 64 architecture) + * Undefined for instructions with no index register (bit 22 is set). + */ + uint64_t scaling : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SCALING_BIT 0 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SCALING_FLAG 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SCALING_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SCALING(_) (((_) >> 0) & 0x03) + uint64_t reserved1 : 5; + + /** + * @brief Address size + * + * [Bits 9:7] 0: 16-bit + * 1: 32-bit + * 2: 64-bit (used only on processors that support Intel 64 architecture) + * Other values not used. + */ + uint64_t address_size : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_ADDRESS_SIZE_BIT 7 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_ADDRESS_SIZE_FLAG 0x380 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_ADDRESS_SIZE_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_ADDRESS_SIZE(_) (((_) >> 7) & 0x07) + uint64_t reserved2 : 5; + + /** + * @brief Segment register + * + * [Bits 17:15] 0: ES + * 1: CS + * 2: SS + * 3: DS + * 4: FS + * 5: GS + * Other values not used. Undefined for VM exits due to execution of INS. + */ + uint64_t segment_register : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SEGMENT_REGISTER_BIT 15 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SEGMENT_REGISTER_FLAG 0x38000 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SEGMENT_REGISTER_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_SEGMENT_REGISTER(_) (((_) >> 15) & 0x07) + + /** + * [Bits 21:18] General-purpose register. Undefined for instructions with no index register (bit 22 is set). + */ + uint64_t general_purpose_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER_BIT 18 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER_FLAG 0x3C0000 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER(_) (((_) >> 18) & 0x0F) + + /** + * [Bit 22] IndexReg invalid (0 = valid; 1 = invalid). + */ + uint64_t general_purpose_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER_INVALID_BIT 22 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER_INVALID_FLAG 0x400000 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_GENERAL_PURPOSE_REGISTER_INVALID(_) (((_) >> 22) & 0x01) + + /** + * [Bits 26:23] BaseReg (encoded as IndexReg above). Undefined for memory instructions with no base register (bit 27 is + * set). + */ + uint64_t base_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER_BIT 23 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER_FLAG 0x7800000 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER(_) (((_) >> 23) & 0x0F) + + /** + * [Bit 27] BaseReg invalid (0 = valid; 1 = invalid). + */ + uint64_t base_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER_INVALID_BIT 27 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER_INVALID_FLAG 0x8000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_BASE_REGISTER_INVALID(_) (((_) >> 27) & 0x01) + + /** + * [Bits 31:28] Reg2 (same encoding as IndexReg above). + */ + uint64_t register_2 : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_REGISTER_2_BIT 28 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_REGISTER_2_FLAG 0xF0000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_REGISTER_2_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_INVALIDATE_REGISTER_2(_) (((_) >> 28) & 0x0F) + uint64_t reserved3 : 32; + }; + + uint64_t flags; +} vmx_vmexit_instruction_info_invalidate; + +/** + * @brief VM-Exit Instruction-Information Field as Used for LIDT, LGDT, SIDT, or SGDT + */ +typedef union +{ + struct + { + /** + * @brief Scaling + * + * [Bits 1:0] 0: no scaling + * 1: scale by 2 + * 2: scale by 4 + * 3: scale by 8 (used only on processors that support Intel 64 architecture) + * Undefined for instructions with no index register (bit 22 is set). + */ + uint64_t scaling : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SCALING_BIT 0 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SCALING_FLAG 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SCALING_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SCALING(_) (((_) >> 0) & 0x03) + uint64_t reserved1 : 5; + + /** + * @brief Address size + * + * [Bits 9:7] 0: 16-bit + * 1: 32-bit + * 2: 64-bit (used only on processors that support Intel 64 architecture) + * Other values not used. + */ + uint64_t address_size : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_ADDRESS_SIZE_BIT 7 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_ADDRESS_SIZE_FLAG 0x380 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_ADDRESS_SIZE_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_ADDRESS_SIZE(_) (((_) >> 7) & 0x07) + uint64_t reserved2 : 1; + + /** + * @brief Operand size + * + * [Bit 11] 0: 16-bit + * 1: 32-bit + * Undefined for VM exits from 64-bit mode. + */ + uint64_t operand_size : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_OPERAND_SIZE_BIT 11 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_OPERAND_SIZE_FLAG 0x800 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_OPERAND_SIZE_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_OPERAND_SIZE(_) (((_) >> 11) & 0x01) + uint64_t reserved3 : 3; + + /** + * @brief Segment register + * + * [Bits 17:15] 0: ES + * 1: CS + * 2: SS + * 3: DS + * 4: FS + * 5: GS + * Other values not used. + */ + uint64_t segment_register : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SEGMENT_REGISTER_BIT 15 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SEGMENT_REGISTER_FLAG 0x38000 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SEGMENT_REGISTER_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_SEGMENT_REGISTER(_) (((_) >> 15) & 0x07) + + /** + * [Bits 21:18] General-purpose register. Undefined for instructions with no index register (bit 22 is set). + */ + uint64_t general_purpose_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER_BIT 18 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER_FLAG 0x3C0000 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER(_) (((_) >> 18) & 0x0F) + + /** + * [Bit 22] IndexReg invalid (0 = valid; 1 = invalid). + */ + uint64_t general_purpose_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID_BIT 22 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID_FLAG 0x400000 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID(_) (((_) >> 22) & 0x01) + + /** + * [Bits 26:23] BaseReg (encoded as IndexReg above). Undefined for memory instructions with no base register (bit 27 is + * set). + */ + uint64_t base_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER_BIT 23 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER_FLAG 0x7800000 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER(_) (((_) >> 23) & 0x0F) + + /** + * [Bit 27] BaseReg invalid (0 = valid; 1 = invalid). + */ + uint64_t base_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER_INVALID_BIT 27 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER_INVALID_FLAG 0x8000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_BASE_REGISTER_INVALID(_) (((_) >> 27) & 0x01) + + /** + * @brief Instruction identity + * + * [Bits 29:28] 0: SGDT + * 1: SIDT + * 2: LGDT + * 3: LIDT + */ + uint64_t instruction : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_INSTRUCTION_BIT 28 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_INSTRUCTION_FLAG 0x30000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_INSTRUCTION_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_GDTR_IDTR_ACCESS_INSTRUCTION(_) (((_) >> 28) & 0x03) + uint64_t reserved4 : 34; + }; + + uint64_t flags; +} vmx_vmexit_instruction_info_gdtr_idtr_access; + +/** + * @brief VM-Exit Instruction-Information Field as Used for LLDT, LTR, SLDT, and STR + */ +typedef union +{ + struct + { + /** + * @brief Scaling + * + * [Bits 1:0] 0: no scaling + * 1: scale by 2 + * 2: scale by 4 + * 3: scale by 8 (used only on processors that support Intel 64 architecture) + * Undefined for instructions with no index register (bit 22 is set). + */ + uint64_t scaling : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SCALING_BIT 0 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SCALING_FLAG 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SCALING_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SCALING(_) (((_) >> 0) & 0x03) + uint64_t reserved1 : 1; + + /** + * [Bits 6:3] Reg1. Undefined for memory instructions (bit 10 is clear). + */ + uint64_t reg_1 : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_REG_1_BIT 3 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_REG_1_FLAG 0x78 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_REG_1_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_REG_1(_) (((_) >> 3) & 0x0F) + + /** + * @brief Address size + * + * [Bits 9:7] 0: 16-bit + * 1: 32-bit + * 2: 64-bit (used only on processors that support Intel 64 architecture) + * Other values not used. Undefined for register instructions (bit 10 is set). + */ + uint64_t address_size : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_ADDRESS_SIZE_BIT 7 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_ADDRESS_SIZE_FLAG 0x380 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_ADDRESS_SIZE_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_ADDRESS_SIZE(_) (((_) >> 7) & 0x07) + + /** + * [Bit 10] Mem/Reg (0 = memory; 1 = register). + */ + uint64_t memory_register : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_MEMORY_REGISTER_BIT 10 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_MEMORY_REGISTER_FLAG 0x400 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_MEMORY_REGISTER_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_MEMORY_REGISTER(_) (((_) >> 10) & 0x01) + uint64_t reserved2 : 4; + + /** + * @brief Segment register + * + * [Bits 17:15] 0: ES + * 1: CS + * 2: SS + * 3: DS + * 4: FS + * 5: GS + * Other values not used. Undefined for register instructions (bit 10 is set). + */ + uint64_t segment_register : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SEGMENT_REGISTER_BIT 15 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SEGMENT_REGISTER_FLAG 0x38000 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SEGMENT_REGISTER_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_SEGMENT_REGISTER(_) (((_) >> 15) & 0x07) + + /** + * [Bits 21:18] General-purpose register. Undefined for register instructions (bit 10 is set) and for memory instructions + * with no index register (bit 10 is clear and bit 22 is set). + */ + uint64_t general_purpose_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER_BIT 18 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER_FLAG 0x3C0000 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER(_) (((_) >> 18) & 0x0F) + + /** + * [Bit 22] IndexReg invalid (0 = valid; 1 = invalid). Undefined for register instructions (bit 10 is set). + */ + uint64_t general_purpose_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID_BIT 22 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID_FLAG 0x400000 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_GENERAL_PURPOSE_REGISTER_INVALID(_) (((_) >> 22) & 0x01) + + /** + * [Bits 26:23] BaseReg (encoded as IndexReg above). Undefined for register instructions (bit 10 is set) and for memory + * instructions with no base register (bit 10 is clear and bit 27 is set). + */ + uint64_t base_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER_BIT 23 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER_FLAG 0x7800000 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER(_) (((_) >> 23) & 0x0F) + + /** + * [Bit 27] BaseReg invalid (0 = valid; 1 = invalid). Undefined for register instructions (bit 10 is set). + */ + uint64_t base_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER_INVALID_BIT 27 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER_INVALID_FLAG 0x8000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_BASE_REGISTER_INVALID(_) (((_) >> 27) & 0x01) + + /** + * @brief Instruction identity + * + * [Bits 29:28] 0: SLDT + * 1: STR + * 2: LLDT + * 3: LTR + */ + uint64_t instruction : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_INSTRUCTION_BIT 28 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_INSTRUCTION_FLAG 0x30000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_INSTRUCTION_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_LDTR_TR_ACCESS_INSTRUCTION(_) (((_) >> 28) & 0x03) + uint64_t reserved3 : 34; + }; + + uint64_t flags; +} vmx_vmexit_instruction_info_ldtr_tr_access; + +/** + * @brief VM-Exit Instruction-Information Field as Used for RDRAND and RDSEED + */ +typedef union +{ + struct + { + uint64_t reserved1 : 3; + + /** + * [Bits 6:3] Destination register. + */ + uint64_t destination_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_DESTINATION_REGISTER_BIT 3 +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_DESTINATION_REGISTER_FLAG 0x78 +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_DESTINATION_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_DESTINATION_REGISTER(_) (((_) >> 3) & 0x0F) + uint64_t reserved2 : 4; + + /** + * @brief Operand size + * + * [Bits 12:11] 0: 16-bit + * 1: 32-bit + * 2: 64-bit + * The value 3 is not used. + */ + uint64_t operand_size : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_OPERAND_SIZE_BIT 11 +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_OPERAND_SIZE_FLAG 0x1800 +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_OPERAND_SIZE_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_RDRAND_RDSEED_OPERAND_SIZE(_) (((_) >> 11) & 0x03) + uint64_t reserved3 : 51; + }; + + uint64_t flags; +} vmx_vmexit_instruction_info_rdrand_rdseed; + +/** + * @brief VM-Exit Instruction-Information Field as Used for VMCLEAR, VMPTRLD, VMPTRST, VMXON, XRSTORS, and XSAVES + */ +typedef union +{ + struct + { + /** + * @brief Scaling + * + * [Bits 1:0] 0: no scaling + * 1: scale by 2 + * 2: scale by 4 + * 3: scale by 8 (used only on processors that support Intel 64 architecture) + * Undefined for instructions with no index register (bit 22 is set). + */ + uint64_t scaling : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SCALING_BIT 0 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SCALING_FLAG 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SCALING_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SCALING(_) (((_) >> 0) & 0x03) + uint64_t reserved1 : 5; + + /** + * @brief Address size + * + * [Bits 9:7] 0: 16-bit + * 1: 32-bit + * 2: 64-bit (used only on processors that support Intel 64 architecture) + * Other values not used. + */ + uint64_t address_size : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_ADDRESS_SIZE_BIT 7 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_ADDRESS_SIZE_FLAG 0x380 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_ADDRESS_SIZE_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_ADDRESS_SIZE(_) (((_) >> 7) & 0x07) + uint64_t reserved2 : 5; + + /** + * @brief Segment register + * + * [Bits 17:15] 0: ES + * 1: CS + * 2: SS + * 3: DS + * 4: FS + * 5: GS + * Other values not used. + */ + uint64_t segment_register : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SEGMENT_REGISTER_BIT 15 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SEGMENT_REGISTER_FLAG 0x38000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SEGMENT_REGISTER_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_SEGMENT_REGISTER(_) (((_) >> 15) & 0x07) + + /** + * [Bits 21:18] General-purpose register. Undefined for instructions with no index register (bit 22 is set). + */ + uint64_t general_purpose_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER_BIT 18 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER_FLAG 0x3C0000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER(_) (((_) >> 18) & 0x0F) + + /** + * [Bit 22] IndexReg invalid (0 = valid; 1 = invalid). + */ + uint64_t general_purpose_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER_INVALID_BIT 22 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER_INVALID_FLAG 0x400000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_GENERAL_PURPOSE_REGISTER_INVALID(_) (((_) >> 22) & 0x01) + + /** + * [Bits 26:23] BaseReg (encoded as IndexReg above). Undefined for memory instructions with no base register (bit 27 is + * set). + */ + uint64_t base_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER_BIT 23 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER_FLAG 0x7800000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER(_) (((_) >> 23) & 0x0F) + + /** + * [Bit 27] BaseReg invalid (0 = valid; 1 = invalid). + */ + uint64_t base_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER_INVALID_BIT 27 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER_INVALID_FLAG 0x8000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMX_AND_XSAVES_BASE_REGISTER_INVALID(_) (((_) >> 27) & 0x01) + uint64_t reserved3 : 36; + }; + + uint64_t flags; +} vmx_vmexit_instruction_info_vmx_and_xsaves; + +/** + * @brief VM-Exit Instruction-Information Field as Used for VMREAD and VMWRITE + */ +typedef union +{ + struct + { + /** + * @brief Scaling + * + * [Bits 1:0] 0: no scaling + * 1: scale by 2 + * 2: scale by 4 + * 3: scale by 8 (used only on processors that support Intel 64 architecture) + * Undefined for register instructions (bit 10 is set) and for memory instructions with no index register (bit 10 is clear + * and bit 22 is set). + */ + uint64_t scaling : 2; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SCALING_BIT 0 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SCALING_FLAG 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SCALING_MASK 0x03 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SCALING(_) (((_) >> 0) & 0x03) + uint64_t reserved1 : 1; + + /** + * [Bits 6:3] Reg1. Undefined for memory instructions (bit 10 is clear). + */ + uint64_t register_1 : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_1_BIT 3 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_1_FLAG 0x78 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_1_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_1(_) (((_) >> 3) & 0x0F) + + /** + * @brief Address size + * + * [Bits 9:7] 0: 16-bit + * 1: 32-bit + * 2: 64-bit (used only on processors that support Intel 64 architecture) + * Other values not used. Undefined for register instructions (bit 10 is set). + */ + uint64_t address_size : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_ADDRESS_SIZE_BIT 7 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_ADDRESS_SIZE_FLAG 0x380 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_ADDRESS_SIZE_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_ADDRESS_SIZE(_) (((_) >> 7) & 0x07) + + /** + * [Bit 10] Mem/Reg (0 = memory; 1 = register). + */ + uint64_t memory_register : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_MEMORY_REGISTER_BIT 10 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_MEMORY_REGISTER_FLAG 0x400 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_MEMORY_REGISTER_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_MEMORY_REGISTER(_) (((_) >> 10) & 0x01) + uint64_t reserved2 : 4; + + /** + * @brief Segment register + * + * [Bits 17:15] 0: ES + * 1: CS + * 2: SS + * 3: DS + * 4: FS + * 5: GS + * Other values not used. Undefined for register instructions (bit 10 is set). + */ + uint64_t segment_register : 3; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SEGMENT_REGISTER_BIT 15 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SEGMENT_REGISTER_FLAG 0x38000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SEGMENT_REGISTER_MASK 0x07 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_SEGMENT_REGISTER(_) (((_) >> 15) & 0x07) + + /** + * [Bits 21:18] General-purpose register. Undefined for register instructions (bit 10 is set) and for memory instructions + * with no index register (bit 10 is clear and bit 22 is set). + */ + uint64_t general_purpose_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER_BIT 18 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER_FLAG 0x3C0000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER(_) (((_) >> 18) & 0x0F) + + /** + * [Bit 22] IndexReg invalid (0 = valid; 1 = invalid). Undefined for register instructions (bit 10 is set). + */ + uint64_t general_purpose_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER_INVALID_BIT 22 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER_INVALID_FLAG 0x400000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_GENERAL_PURPOSE_REGISTER_INVALID(_) (((_) >> 22) & 0x01) + + /** + * [Bits 26:23] BaseReg (encoded as Reg1 above). Undefined for register instructions (bit 10 is set) and for memory + * instructions with no base register (bit 10 is clear and bit 27 is set). + */ + uint64_t base_register : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER_BIT 23 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER_FLAG 0x7800000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER(_) (((_) >> 23) & 0x0F) + + /** + * [Bit 27] BaseReg invalid (0 = valid; 1 = invalid). + */ + uint64_t base_register_invalid : 1; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER_INVALID_BIT 27 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER_INVALID_FLAG 0x8000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER_INVALID_MASK 0x01 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_BASE_REGISTER_INVALID(_) (((_) >> 27) & 0x01) + + /** + * [Bits 31:28] Reg2 (same encoding as IndexReg above). + */ + uint64_t register_2 : 4; +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_2_BIT 28 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_2_FLAG 0xF0000000 +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_2_MASK 0x0F +#define VMX_VMEXIT_INSTRUCTION_INFO_VMREAD_VMWRITE_REGISTER_2(_) (((_) >> 28) & 0x0F) + uint64_t reserved3 : 32; + }; + + uint64_t flags; +} vmx_vmexit_instruction_info_vmread_vmwrite; + +/** + * @} + */ + + /** + * @brief - The low 16 bits correspond to bits 23:8 of the upper 32 bits of a 64-bit segment descriptor. While bits 19:16 + * of code-segment and data-segment descriptors correspond to the upper 4 bits of the segment limit, the corresponding bits + * (bits 11:8) are reserved in this VMCS field. + * - Bit 16 indicates an unusable segment. Attempts to use such a segment fault except in 64-bit mode. In general, a + * segment register is unusable if it has been loaded with a null selector. + * - Bits 31:17 are reserved + * + * @note There are a few exceptions to this statement. For example, a segment with a non-null selector may be unusable + * following a task switch that fails after its commit point. In contrast, the TR register is usable after processor reset + * despite having a null selector + * @see SEGMENT_DESCRIPTOR_32 + * @see SEGMENT_DESCRIPTOR_64 + * @see XXX_ACCESS_RIGHTS fields of 32_BIT_GUEST_STATE_FIELDS + * @see Vol3C[24.4.2(Guest Non-Register State)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bits 3:0] Segment type. + */ + uint32_t exec_type : 4; +#define VMX_SEGMENT_ACCESS_RIGHTS_TYPE_BIT 0 +#define VMX_SEGMENT_ACCESS_RIGHTS_TYPE_FLAG 0x0F +#define VMX_SEGMENT_ACCESS_RIGHTS_TYPE_MASK 0x0F +#define VMX_SEGMENT_ACCESS_RIGHTS_TYPE(_) (((_) >> 0) & 0x0F) + + /** + * [Bit 4] S - Descriptor type (0 = system; 1 = code or data). + */ + uint32_t descriptor_type : 1; +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE_BIT 4 +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE_FLAG 0x10 +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE_MASK 0x01 +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_TYPE(_) (((_) >> 4) & 0x01) + + /** + * [Bits 6:5] DPL - Descriptor privilege level. + */ + uint32_t descriptor_privilege_level : 2; +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_BIT 5 +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_FLAG 0x60 +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_MASK 0x03 +#define VMX_SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL(_) (((_) >> 5) & 0x03) + + /** + * [Bit 7] P - Segment present. + */ + uint32_t present : 1; +#define VMX_SEGMENT_ACCESS_RIGHTS_PRESENT_BIT 7 +#define VMX_SEGMENT_ACCESS_RIGHTS_PRESENT_FLAG 0x80 +#define VMX_SEGMENT_ACCESS_RIGHTS_PRESENT_MASK 0x01 +#define VMX_SEGMENT_ACCESS_RIGHTS_PRESENT(_) (((_) >> 7) & 0x01) + uint32_t reserved1 : 4; + + /** + * [Bit 12] AVL - Available for use by system software. + */ + uint32_t available_bit : 1; +#define VMX_SEGMENT_ACCESS_RIGHTS_AVAILABLE_BIT_BIT 12 +#define VMX_SEGMENT_ACCESS_RIGHTS_AVAILABLE_BIT_FLAG 0x1000 +#define VMX_SEGMENT_ACCESS_RIGHTS_AVAILABLE_BIT_MASK 0x01 +#define VMX_SEGMENT_ACCESS_RIGHTS_AVAILABLE_BIT(_) (((_) >> 12) & 0x01) + + /** + * [Bit 13] Reserved (except for CS). L - 64-bit mode active (for CS only). + */ + uint32_t long_mode : 1; +#define VMX_SEGMENT_ACCESS_RIGHTS_LONG_MODE_BIT 13 +#define VMX_SEGMENT_ACCESS_RIGHTS_LONG_MODE_FLAG 0x2000 +#define VMX_SEGMENT_ACCESS_RIGHTS_LONG_MODE_MASK 0x01 +#define VMX_SEGMENT_ACCESS_RIGHTS_LONG_MODE(_) (((_) >> 13) & 0x01) + + /** + * [Bit 14] D/B - Default operation size (0 = 16-bit segment; 1 = 32-bit segment). + */ + uint32_t default_big : 1; +#define VMX_SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG_BIT 14 +#define VMX_SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG_FLAG 0x4000 +#define VMX_SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG_MASK 0x01 +#define VMX_SEGMENT_ACCESS_RIGHTS_DEFAULT_BIG(_) (((_) >> 14) & 0x01) + + /** + * [Bit 15] G - Granularity. + */ + uint32_t granularity : 1; +#define VMX_SEGMENT_ACCESS_RIGHTS_GRANULARITY_BIT 15 +#define VMX_SEGMENT_ACCESS_RIGHTS_GRANULARITY_FLAG 0x8000 +#define VMX_SEGMENT_ACCESS_RIGHTS_GRANULARITY_MASK 0x01 +#define VMX_SEGMENT_ACCESS_RIGHTS_GRANULARITY(_) (((_) >> 15) & 0x01) + + /** + * [Bit 16] Segment unusable (0 = usable; 1 = unusable). + */ + uint32_t unusable : 1; +#define VMX_SEGMENT_ACCESS_RIGHTS_UNUSABLE_BIT 16 +#define VMX_SEGMENT_ACCESS_RIGHTS_UNUSABLE_FLAG 0x10000 +#define VMX_SEGMENT_ACCESS_RIGHTS_UNUSABLE_MASK 0x01 +#define VMX_SEGMENT_ACCESS_RIGHTS_UNUSABLE(_) (((_) >> 16) & 0x01) + uint32_t reserved2 : 15; + }; + + uint32_t flags; +} vmx_segment_access_rights; + +/** + * @brief The IA-32 architecture includes features that permit certain events to be blocked for a period of time. This + * field contains information about such blocking + * + * @see INTERRUPTIBILITY_STATE of 32_BIT_GUEST_STATE_FIELDS + * @see Vol3C[24.4.2(Guest Non-Register State)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bit 0] Execution of STI with RFLAGS.IF = 0 blocks maskable interrupts on the instruction boundary following its + * execution.1 Setting this bit indicates that this blocking is in effect. + * + * @see Vol2B[4(STI-Set Interrupt Flag)] + */ + uint32_t blocking_by_sti : 1; +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_STI_BIT 0 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_STI_FLAG 0x01 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_STI_MASK 0x01 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_STI(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Execution of a MOV to SS or a POP to SS blocks or suppresses certain debug exceptions as well as interrupts + * (maskable and nonmaskable) on the instruction boundary following its execution. Setting this bit indicates that this + * blocking is in effect. This document uses the term "blocking by MOV SS," but it applies equally to POP SS. + * + * @see Vol3A[6.8.3(Masking Exceptions and Interrupts When Switching Stacks)] + */ + uint32_t blocking_by_mov_ss : 1; +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_MOV_SS_BIT 1 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_MOV_SS_FLAG 0x02 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_MOV_SS_MASK 0x01 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_MOV_SS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] System-management interrupts (SMIs) are disabled while the processor is in system-management mode (SMM). Setting + * this bit indicates that blocking of SMIs is in effect. + * + * @see Vol3C[34.2(System Management Interrupt (SMI))] + */ + uint32_t blocking_by_smi : 1; +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_SMI_BIT 2 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_SMI_FLAG 0x04 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_SMI_MASK 0x01 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_SMI(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] Delivery of a non-maskable interrupt (NMI) or a system-management interrupt (SMI) blocks subsequent NMIs until + * the next execution of IRET. Setting this bit indicates that blocking of NMIs is in effect. Clearing this bit does not + * imply that NMIs are not (temporarily) blocked for other reasons. If the "virtual NMIs" VM-execution control is 1, this + * bit does not control the blocking of NMIs. Instead, it refers to "virtual-NMI blocking" (the fact that guest software is + * not ready for an NMI). + * + * @see Vol3C[6.7.1(Handling Multiple NMIs)] + * @see Vol3C[25.3(CHANGES TO INSTRUCTION BEHAVIOR IN VMX NON-ROOT OPERATION)] + * @see Vol3C[24.6.1(Pin-Based VM-Execution Controls)] + */ + uint32_t blocking_by_nmi : 1; +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_NMI_BIT 3 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_NMI_FLAG 0x08 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_NMI_MASK 0x01 +#define VMX_INTERRUPTIBILITY_STATE_BLOCKING_BY_NMI(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] A VM exit saves this bit as 1 to indicate that the VM exit was incident to enclave mode. + */ + uint32_t enclave_interruption : 1; +#define VMX_INTERRUPTIBILITY_STATE_ENCLAVE_INTERRUPTION_BIT 4 +#define VMX_INTERRUPTIBILITY_STATE_ENCLAVE_INTERRUPTION_FLAG 0x10 +#define VMX_INTERRUPTIBILITY_STATE_ENCLAVE_INTERRUPTION_MASK 0x01 +#define VMX_INTERRUPTIBILITY_STATE_ENCLAVE_INTERRUPTION(_) (((_) >> 4) & 0x01) + uint32_t reserved1 : 27; + }; + + uint32_t flags; +} vmx_interruptibility_state; + +typedef enum +{ + /** + * The logical processor is executing instructions normally. + */ + vmx_active = 0x00000000, + + /** + * The logical processor is inactive because it executed the HLT instruction. + */ + vmx_hlt = 0x00000001, + + /** + * The logical processor is inactive because it incurred a triple fault1 or some other serious error. + */ + vmx_shutdown = 0x00000002, + + /** + * The logical processor is inactive because it is waiting for a startup-IPI (SIPI). + */ + vmx_wait_for_sipi = 0x00000003, +} vmx_guest_activity_state; + +/** + * @} + */ + + /** + * @brief Format of Exit Reason + * + * Exit reason (32 bits). This field encodes the reason for the VM exit and has the structure. + * + * @see Vol3C[24.9.1(Basic VM-Exit Information)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bits 15:0] Provides basic information about the cause of the VM exit (if bit 31 is clear) or of the VM-entry failure + * (if bit 31 is set). + */ + uint32_t basic_exit_reason : 16; +#define VMX_VMEXIT_REASON_BASIC_EXIT_REASON_BIT 0 +#define VMX_VMEXIT_REASON_BASIC_EXIT_REASON_FLAG 0xFFFF +#define VMX_VMEXIT_REASON_BASIC_EXIT_REASON_MASK 0xFFFF +#define VMX_VMEXIT_REASON_BASIC_EXIT_REASON(_) (((_) >> 0) & 0xFFFF) + + /** + * [Bit 16] Always cleared to 0. + */ + uint32_t always0 : 1; +#define VMX_VMEXIT_REASON_ALWAYS0_BIT 16 +#define VMX_VMEXIT_REASON_ALWAYS0_FLAG 0x10000 +#define VMX_VMEXIT_REASON_ALWAYS0_MASK 0x01 +#define VMX_VMEXIT_REASON_ALWAYS0(_) (((_) >> 16) & 0x01) + uint32_t reserved1 : 10; +#define VMX_VMEXIT_REASON_RESERVED1_BIT 17 +#define VMX_VMEXIT_REASON_RESERVED1_FLAG 0x7FE0000 +#define VMX_VMEXIT_REASON_RESERVED1_MASK 0x3FF +#define VMX_VMEXIT_REASON_RESERVED1(_) (((_) >> 17) & 0x3FF) + + /** + * [Bit 27] A VM exit saves this bit as 1 to indicate that the VM exit was incident to enclave mode. + */ + uint32_t enclave_mode : 1; +#define VMX_VMEXIT_REASON_ENCLAVE_MODE_BIT 27 +#define VMX_VMEXIT_REASON_ENCLAVE_MODE_FLAG 0x8000000 +#define VMX_VMEXIT_REASON_ENCLAVE_MODE_MASK 0x01 +#define VMX_VMEXIT_REASON_ENCLAVE_MODE(_) (((_) >> 27) & 0x01) + + /** + * [Bit 28] Pending MTF VM exit. + */ + uint32_t pending_mtf_vm_exit : 1; +#define VMX_VMEXIT_REASON_PENDING_MTF_VM_EXIT_BIT 28 +#define VMX_VMEXIT_REASON_PENDING_MTF_VM_EXIT_FLAG 0x10000000 +#define VMX_VMEXIT_REASON_PENDING_MTF_VM_EXIT_MASK 0x01 +#define VMX_VMEXIT_REASON_PENDING_MTF_VM_EXIT(_) (((_) >> 28) & 0x01) + + /** + * [Bit 29] VM exit from VMX root operation. + */ + uint32_t vm_exit_from_vmx_roor : 1; +#define VMX_VMEXIT_REASON_VM_EXIT_FROM_VMX_ROOR_BIT 29 +#define VMX_VMEXIT_REASON_VM_EXIT_FROM_VMX_ROOR_FLAG 0x20000000 +#define VMX_VMEXIT_REASON_VM_EXIT_FROM_VMX_ROOR_MASK 0x01 +#define VMX_VMEXIT_REASON_VM_EXIT_FROM_VMX_ROOR(_) (((_) >> 29) & 0x01) + uint32_t reserved2 : 1; +#define VMX_VMEXIT_REASON_RESERVED2_BIT 30 +#define VMX_VMEXIT_REASON_RESERVED2_FLAG 0x40000000 +#define VMX_VMEXIT_REASON_RESERVED2_MASK 0x01 +#define VMX_VMEXIT_REASON_RESERVED2(_) (((_) >> 30) & 0x01) + + /** + * [Bit 31] VM-entry failure: + * - 0 = true VM exit + * - 1 = VM-entry failure + */ + uint32_t vm_entry_failure : 1; +#define VMX_VMEXIT_REASON_VM_ENTRY_FAILURE_BIT 31 +#define VMX_VMEXIT_REASON_VM_ENTRY_FAILURE_FLAG 0x80000000 +#define VMX_VMEXIT_REASON_VM_ENTRY_FAILURE_MASK 0x01 +#define VMX_VMEXIT_REASON_VM_ENTRY_FAILURE(_) (((_) >> 31) & 0x01) + }; + + uint32_t flags; +} vmx_vmexit_reason; + +typedef struct +{ +#define IO_BITMAP_A_MIN 0x00000000 +#define IO_BITMAP_A_MAX 0x00007FFF +#define IO_BITMAP_B_MIN 0x00008000 +#define IO_BITMAP_B_MAX 0x0000FFFF + uint8_t io_a[4096]; + uint8_t io_b[4096]; +} vmx_io_bitmap; + +typedef struct +{ +#define MSR_ID_LOW_MIN 0x00000000 +#define MSR_ID_LOW_MAX 0x00001FFF +#define MSR_ID_HIGH_MIN 0xC0000000 +#define MSR_ID_HIGH_MAX 0xC0001FFF + uint8_t rdmsr_low[1024]; + uint8_t rdmsr_high[1024]; + uint8_t wrmsr_low[1024]; + uint8_t wrmsr_high[1024]; +} vmx_msr_bitmap; + +/** + * @defgroup ept \ + * The extended page-table mechanism + * + * The extended page-table mechanism (EPT) is a feature that can be used to support the virtualization of physical memory. + * When EPT is in use, certain addresses that would normally be treated as physical addresses (and used to access memory) + * are instead treated as guest-physical addresses. Guest-physical addresses are translated by traversing a set of EPT + * paging structures to produce physical addresses that are used to access memory. + * + * @see Vol3C[28.2(THE EXTENDED PAGE TABLE MECHANISM (EPT))] (reference) + * @{ + */ + /** + * @brief Extended-Page-Table Pointer (EPTP) + * + * The extended-page-table pointer (EPTP) contains the address of the base of EPT PML4 table, as well as other EPT + * configuration information. + * + * @see Vol3C[28.2.2(EPT Translation Mechanism] + * @see Vol3C[24.6.11(Extended-Page-Table Pointer (EPTP)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bits 2:0] EPT paging-structure memory type: + * - 0 = Uncacheable (UC) + * - 6 = Write-back (WB) + * Other values are reserved. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t memory_type : 3; +#define EPT_POINTER_MEMORY_TYPE_BIT 0 +#define EPT_POINTER_MEMORY_TYPE_FLAG 0x07 +#define EPT_POINTER_MEMORY_TYPE_MASK 0x07 +#define EPT_POINTER_MEMORY_TYPE(_) (((_) >> 0) & 0x07) + + /** + * [Bits 5:3] This value is 1 less than the EPT page-walk length. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t page_walk_length : 3; +#define EPT_POINTER_PAGE_WALK_LENGTH_BIT 3 +#define EPT_POINTER_PAGE_WALK_LENGTH_FLAG 0x38 +#define EPT_POINTER_PAGE_WALK_LENGTH_MASK 0x07 +#define EPT_POINTER_PAGE_WALK_LENGTH(_) (((_) >> 3) & 0x07) +#define EPT_PAGE_WALK_LENGTH_4 0x00000003 + + /** + * [Bit 6] Setting this control to 1 enables accessed and dirty flags for EPT. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t enable_access_and_dirty_flags : 1; +#define EPT_POINTER_ENABLE_ACCESS_AND_DIRTY_FLAGS_BIT 6 +#define EPT_POINTER_ENABLE_ACCESS_AND_DIRTY_FLAGS_FLAG 0x40 +#define EPT_POINTER_ENABLE_ACCESS_AND_DIRTY_FLAGS_MASK 0x01 +#define EPT_POINTER_ENABLE_ACCESS_AND_DIRTY_FLAGS(_) (((_) >> 6) & 0x01) + uint64_t reserved1 : 5; + + /** + * [Bits 47:12] Bits N-1:12 of the physical address of the 4-KByte aligned EPT PML4 table. + */ + uint64_t page_frame_number : 36; +#define EPT_POINTER_PAGE_FRAME_NUMBER_BIT 12 +#define EPT_POINTER_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define EPT_POINTER_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define EPT_POINTER_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved2 : 16; + }; + + uint64_t flags; +} ept_pointer; + +/** + * @brief Format of an EPT PML4 Entry (PML4E) that References an EPT Page-Directory-Pointer Table + * + * A 4-KByte naturally aligned EPT PML4 table is located at the physical address specified in bits 51:12 of the + * extended-page-table pointer (EPTP), a VM-execution control field. An EPT PML4 table comprises 512 64-bit entries (EPT + * PML4Es). An EPT PML4E is selected using the physical address defined as follows: + * - Bits 63:52 are all 0. + * - Bits 51:12 are from the EPTP. + * - Bits 11:3 are bits 47:39 of the guest-physical address. + * - Bits 2:0 are all 0. + * Because an EPT PML4E is identified using bits 47:39 of the guest-physical address, it controls access to a 512- GByte + * region of the guest-physical-address space. + * + * @see Vol3C[24.6.11(Extended-Page-Table Pointer (EPTP)] + */ +typedef union +{ + struct + { + /** + * [Bit 0] Read access; indicates whether reads are allowed from the 512-GByte region controlled by this entry. + */ + uint64_t read_access : 1; +#define EPT_PML4_READ_ACCESS_BIT 0 +#define EPT_PML4_READ_ACCESS_FLAG 0x01 +#define EPT_PML4_READ_ACCESS_MASK 0x01 +#define EPT_PML4_READ_ACCESS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Write access; indicates whether writes are allowed from the 512-GByte region controlled by this entry. + */ + uint64_t write_access : 1; +#define EPT_PML4_WRITE_ACCESS_BIT 1 +#define EPT_PML4_WRITE_ACCESS_FLAG 0x02 +#define EPT_PML4_WRITE_ACCESS_MASK 0x01 +#define EPT_PML4_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If the "mode-based execute control for EPT" VM-execution control is 0, execute access; indicates whether + * instruction fetches are allowed from the 512-GByte region controlled by this entry. + * If that control is 1, execute access for supervisor-mode linear addresses; indicates whether instruction fetches are + * allowed from supervisor-mode linear addresses in the 512-GByte region controlled by this entry. + */ + uint64_t execute_access : 1; +#define EPT_PML4_EXECUTE_ACCESS_BIT 2 +#define EPT_PML4_EXECUTE_ACCESS_FLAG 0x04 +#define EPT_PML4_EXECUTE_ACCESS_MASK 0x01 +#define EPT_PML4_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + uint64_t reserved1 : 5; + + /** + * [Bit 8] If bit 6 of EPTP is 1, accessed flag for EPT; indicates whether software has accessed the 512-GByte region + * controlled by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t accessed : 1; +#define EPT_PML4_ACCESSED_BIT 8 +#define EPT_PML4_ACCESSED_FLAG 0x100 +#define EPT_PML4_ACCESSED_MASK 0x01 +#define EPT_PML4_ACCESSED(_) (((_) >> 8) & 0x01) + uint64_t reserved2 : 1; + + /** + * [Bit 10] Execute access for user-mode linear addresses. If the "mode-based execute control for EPT" VM-execution control + * is 1, indicates whether instruction fetches are allowed from user-mode linear addresses in the 512-GByte region + * controlled by this entry. If that control is 0, this bit is ignored. + */ + uint64_t user_mode_execute : 1; +#define EPT_PML4_USER_MODE_EXECUTE_BIT 10 +#define EPT_PML4_USER_MODE_EXECUTE_FLAG 0x400 +#define EPT_PML4_USER_MODE_EXECUTE_MASK 0x01 +#define EPT_PML4_USER_MODE_EXECUTE(_) (((_) >> 10) & 0x01) + uint64_t reserved3 : 1; + + /** + * [Bits 47:12] Physical address of 4-KByte aligned EPT page-directory-pointer table referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define EPT_PML4_PAGE_FRAME_NUMBER_BIT 12 +#define EPT_PML4_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define EPT_PML4_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define EPT_PML4_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved4 : 16; + }; + + uint64_t flags; +} ept_pml4; + +/** + * @brief Format of an EPT Page-Directory-Pointer-Table Entry (PDPTE) that Maps a 1-GByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Read access; indicates whether reads are allowed from the 1-GByte page referenced by this entry. + */ + uint64_t read_access : 1; +#define EPDPTE_1GB_READ_ACCESS_BIT 0 +#define EPDPTE_1GB_READ_ACCESS_FLAG 0x01 +#define EPDPTE_1GB_READ_ACCESS_MASK 0x01 +#define EPDPTE_1GB_READ_ACCESS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Write access; indicates whether writes are allowed from the 1-GByte page referenced by this entry. + */ + uint64_t write_access : 1; +#define EPDPTE_1GB_WRITE_ACCESS_BIT 1 +#define EPDPTE_1GB_WRITE_ACCESS_FLAG 0x02 +#define EPDPTE_1GB_WRITE_ACCESS_MASK 0x01 +#define EPDPTE_1GB_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If the "mode-based execute control for EPT" VM-execution control is 0, execute access; indicates whether + * instruction fetches are allowed from the 1-GByte page controlled by this entry. + * If that control is 1, execute access for supervisor-mode linear addresses; indicates whether instruction fetches are + * allowed from supervisor-mode linear addresses in the 1-GByte page controlled by this entry. + */ + uint64_t execute_access : 1; +#define EPDPTE_1GB_EXECUTE_ACCESS_BIT 2 +#define EPDPTE_1GB_EXECUTE_ACCESS_FLAG 0x04 +#define EPDPTE_1GB_EXECUTE_ACCESS_MASK 0x01 +#define EPDPTE_1GB_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + + /** + * [Bits 5:3] EPT memory type for this 1-GByte page. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t memory_type : 3; +#define EPDPTE_1GB_MEMORY_TYPE_BIT 3 +#define EPDPTE_1GB_MEMORY_TYPE_FLAG 0x38 +#define EPDPTE_1GB_MEMORY_TYPE_MASK 0x07 +#define EPDPTE_1GB_MEMORY_TYPE(_) (((_) >> 3) & 0x07) + + /** + * [Bit 6] Ignore PAT memory type for this 1-GByte page. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t ignore_pat : 1; +#define EPDPTE_1GB_IGNORE_PAT_BIT 6 +#define EPDPTE_1GB_IGNORE_PAT_FLAG 0x40 +#define EPDPTE_1GB_IGNORE_PAT_MASK 0x01 +#define EPDPTE_1GB_IGNORE_PAT(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Must be 1 (otherwise, this entry references an EPT page directory). + */ + uint64_t large_page : 1; +#define EPDPTE_1GB_LARGE_PAGE_BIT 7 +#define EPDPTE_1GB_LARGE_PAGE_FLAG 0x80 +#define EPDPTE_1GB_LARGE_PAGE_MASK 0x01 +#define EPDPTE_1GB_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] If bit 6 of EPTP is 1, accessed flag for EPT; indicates whether software has accessed the 1-GByte page + * referenced by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t accessed : 1; +#define EPDPTE_1GB_ACCESSED_BIT 8 +#define EPDPTE_1GB_ACCESSED_FLAG 0x100 +#define EPDPTE_1GB_ACCESSED_MASK 0x01 +#define EPDPTE_1GB_ACCESSED(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] If bit 6 of EPTP is 1, dirty flag for EPT; indicates whether software has written to the 1-GByte page referenced + * by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t dirty : 1; +#define EPDPTE_1GB_DIRTY_BIT 9 +#define EPDPTE_1GB_DIRTY_FLAG 0x200 +#define EPDPTE_1GB_DIRTY_MASK 0x01 +#define EPDPTE_1GB_DIRTY(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] Execute access for user-mode linear addresses. If the "mode-based execute control for EPT" VM-execution control + * is 1, indicates whether instruction fetches are allowed from user-mode linear addresses in the 1-GByte page controlled + * by this entry. If that control is 0, this bit is ignored. + */ + uint64_t user_mode_execute : 1; +#define EPDPTE_1GB_USER_MODE_EXECUTE_BIT 10 +#define EPDPTE_1GB_USER_MODE_EXECUTE_FLAG 0x400 +#define EPDPTE_1GB_USER_MODE_EXECUTE_MASK 0x01 +#define EPDPTE_1GB_USER_MODE_EXECUTE(_) (((_) >> 10) & 0x01) + uint64_t reserved1 : 19; + + /** + * [Bits 47:30] Physical address of 4-KByte aligned EPT page-directory-pointer table referenced by this entry. + */ + uint64_t page_frame_number : 18; +#define EPDPTE_1GB_PAGE_FRAME_NUMBER_BIT 30 +#define EPDPTE_1GB_PAGE_FRAME_NUMBER_FLAG 0xFFFFC0000000 +#define EPDPTE_1GB_PAGE_FRAME_NUMBER_MASK 0x3FFFF +#define EPDPTE_1GB_PAGE_FRAME_NUMBER(_) (((_) >> 30) & 0x3FFFF) + uint64_t reserved2 : 15; + + /** + * [Bit 63] Suppress \#VE. If the "EPT-violation \#VE" VM-execution control is 1, EPT violations caused by accesses to this + * page are convertible to virtualization exceptions only if this bit is 0. If "EPT-violation \#VE" VMexecution control is + * 0, this bit is ignored. + * + * @see Vol3C[25.5.6.1(Convertible EPT Violations)] + */ + uint64_t suppress_ve : 1; +#define EPDPTE_1GB_SUPPRESS_VE_BIT 63 +#define EPDPTE_1GB_SUPPRESS_VE_FLAG 0x8000000000000000 +#define EPDPTE_1GB_SUPPRESS_VE_MASK 0x01 +#define EPDPTE_1GB_SUPPRESS_VE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} epdpte_1gb; + +/** + * @brief Format of an EPT Page-Directory-Pointer-Table Entry (PDPTE) that References an EPT Page Directory + */ +typedef union +{ + struct + { + /** + * [Bit 0] Read access; indicates whether reads are allowed from the 1-GByte region controlled by this entry. + */ + uint64_t read_access : 1; +#define EPDPTE_READ_ACCESS_BIT 0 +#define EPDPTE_READ_ACCESS_FLAG 0x01 +#define EPDPTE_READ_ACCESS_MASK 0x01 +#define EPDPTE_READ_ACCESS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Write access; indicates whether writes are allowed from the 1-GByte region controlled by this entry. + */ + uint64_t write_access : 1; +#define EPDPTE_WRITE_ACCESS_BIT 1 +#define EPDPTE_WRITE_ACCESS_FLAG 0x02 +#define EPDPTE_WRITE_ACCESS_MASK 0x01 +#define EPDPTE_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If the "mode-based execute control for EPT" VM-execution control is 0, execute access; indicates whether + * instruction fetches are allowed from the 1-GByte region controlled by this entry. + * If that control is 1, execute access for supervisor-mode linear addresses; indicates whether instruction fetches are + * allowed from supervisor-mode linear addresses in the 1-GByte region controlled by this entry. + */ + uint64_t execute_access : 1; +#define EPDPTE_EXECUTE_ACCESS_BIT 2 +#define EPDPTE_EXECUTE_ACCESS_FLAG 0x04 +#define EPDPTE_EXECUTE_ACCESS_MASK 0x01 +#define EPDPTE_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + uint64_t reserved1 : 5; + + /** + * [Bit 8] If bit 6 of EPTP is 1, accessed flag for EPT; indicates whether software has accessed the 1-GByte region + * controlled by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t accessed : 1; +#define EPDPTE_ACCESSED_BIT 8 +#define EPDPTE_ACCESSED_FLAG 0x100 +#define EPDPTE_ACCESSED_MASK 0x01 +#define EPDPTE_ACCESSED(_) (((_) >> 8) & 0x01) + uint64_t reserved2 : 1; + + /** + * [Bit 10] Execute access for user-mode linear addresses. If the "mode-based execute control for EPT" VM-execution control + * is 1, indicates whether instruction fetches are allowed from user-mode linear addresses in the 1-GByte region controlled + * by this entry. If that control is 0, this bit is ignored. + */ + uint64_t user_mode_execute : 1; +#define EPDPTE_USER_MODE_EXECUTE_BIT 10 +#define EPDPTE_USER_MODE_EXECUTE_FLAG 0x400 +#define EPDPTE_USER_MODE_EXECUTE_MASK 0x01 +#define EPDPTE_USER_MODE_EXECUTE(_) (((_) >> 10) & 0x01) + uint64_t reserved3 : 1; + + /** + * [Bits 47:12] Physical address of 4-KByte aligned EPT page-directory-pointer table referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define EPDPTE_PAGE_FRAME_NUMBER_BIT 12 +#define EPDPTE_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define EPDPTE_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define EPDPTE_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved4 : 16; + }; + + uint64_t flags; +} epdpte; + +/** + * @brief Format of an EPT Page-Directory Entry (PDE) that Maps a 2-MByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Read access; indicates whether reads are allowed from the 2-MByte page referenced by this entry. + */ + uint64_t read_access : 1; +#define EPDE_2MB_READ_ACCESS_BIT 0 +#define EPDE_2MB_READ_ACCESS_FLAG 0x01 +#define EPDE_2MB_READ_ACCESS_MASK 0x01 +#define EPDE_2MB_READ_ACCESS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Write access; indicates whether writes are allowed from the 2-MByte page referenced by this entry. + */ + uint64_t write_access : 1; +#define EPDE_2MB_WRITE_ACCESS_BIT 1 +#define EPDE_2MB_WRITE_ACCESS_FLAG 0x02 +#define EPDE_2MB_WRITE_ACCESS_MASK 0x01 +#define EPDE_2MB_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If the "mode-based execute control for EPT" VM-execution control is 0, execute access; indicates whether + * instruction fetches are allowed from the 2-MByte page controlled by this entry. + * If that control is 1, execute access for supervisor-mode linear addresses; indicates whether instruction fetches are + * allowed from supervisor-mode linear addresses in the 2-MByte page controlled by this entry. + */ + uint64_t execute_access : 1; +#define EPDE_2MB_EXECUTE_ACCESS_BIT 2 +#define EPDE_2MB_EXECUTE_ACCESS_FLAG 0x04 +#define EPDE_2MB_EXECUTE_ACCESS_MASK 0x01 +#define EPDE_2MB_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + + /** + * [Bits 5:3] EPT memory type for this 2-MByte page. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t memory_type : 3; +#define EPDE_2MB_MEMORY_TYPE_BIT 3 +#define EPDE_2MB_MEMORY_TYPE_FLAG 0x38 +#define EPDE_2MB_MEMORY_TYPE_MASK 0x07 +#define EPDE_2MB_MEMORY_TYPE(_) (((_) >> 3) & 0x07) + + /** + * [Bit 6] Ignore PAT memory type for this 2-MByte page. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t ignore_pat : 1; +#define EPDE_2MB_IGNORE_PAT_BIT 6 +#define EPDE_2MB_IGNORE_PAT_FLAG 0x40 +#define EPDE_2MB_IGNORE_PAT_MASK 0x01 +#define EPDE_2MB_IGNORE_PAT(_) (((_) >> 6) & 0x01) + + /** + * [Bit 7] Must be 1 (otherwise, this entry references an EPT page table). + */ + uint64_t large_page : 1; +#define EPDE_2MB_LARGE_PAGE_BIT 7 +#define EPDE_2MB_LARGE_PAGE_FLAG 0x80 +#define EPDE_2MB_LARGE_PAGE_MASK 0x01 +#define EPDE_2MB_LARGE_PAGE(_) (((_) >> 7) & 0x01) + + /** + * [Bit 8] If bit 6 of EPTP is 1, accessed flag for EPT; indicates whether software has accessed the 2-MByte page + * referenced by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t accessed : 1; +#define EPDE_2MB_ACCESSED_BIT 8 +#define EPDE_2MB_ACCESSED_FLAG 0x100 +#define EPDE_2MB_ACCESSED_MASK 0x01 +#define EPDE_2MB_ACCESSED(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] If bit 6 of EPTP is 1, dirty flag for EPT; indicates whether software has written to the 2-MByte page referenced + * by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t dirty : 1; +#define EPDE_2MB_DIRTY_BIT 9 +#define EPDE_2MB_DIRTY_FLAG 0x200 +#define EPDE_2MB_DIRTY_MASK 0x01 +#define EPDE_2MB_DIRTY(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] Execute access for user-mode linear addresses. If the "mode-based execute control for EPT" VM-execution control + * is 1, indicates whether instruction fetches are allowed from user-mode linear addresses in the 2-MByte page controlled + * by this entry. If that control is 0, this bit is ignored. + */ + uint64_t user_mode_execute : 1; +#define EPDE_2MB_USER_MODE_EXECUTE_BIT 10 +#define EPDE_2MB_USER_MODE_EXECUTE_FLAG 0x400 +#define EPDE_2MB_USER_MODE_EXECUTE_MASK 0x01 +#define EPDE_2MB_USER_MODE_EXECUTE(_) (((_) >> 10) & 0x01) + uint64_t reserved1 : 10; + + /** + * [Bits 47:21] Physical address of 4-KByte aligned EPT page-directory-pointer table referenced by this entry. + */ + uint64_t page_frame_number : 27; +#define EPDE_2MB_PAGE_FRAME_NUMBER_BIT 21 +#define EPDE_2MB_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFE00000 +#define EPDE_2MB_PAGE_FRAME_NUMBER_MASK 0x7FFFFFF +#define EPDE_2MB_PAGE_FRAME_NUMBER(_) (((_) >> 21) & 0x7FFFFFF) + uint64_t reserved2 : 15; + + /** + * [Bit 63] Suppress \#VE. If the "EPT-violation \#VE" VM-execution control is 1, EPT violations caused by accesses to this + * page are convertible to virtualization exceptions only if this bit is 0. If "EPT-violation \#VE" VMexecution control is + * 0, this bit is ignored. + * + * @see Vol3C[25.5.6.1(Convertible EPT Violations)] + */ + uint64_t suppress_ve : 1; +#define EPDE_2MB_SUPPRESS_VE_BIT 63 +#define EPDE_2MB_SUPPRESS_VE_FLAG 0x8000000000000000 +#define EPDE_2MB_SUPPRESS_VE_MASK 0x01 +#define EPDE_2MB_SUPPRESS_VE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} epde_2mb; + +/** + * @brief Format of an EPT Page-Directory Entry (PDE) that References an EPT Page Table + */ +typedef union +{ + struct + { + /** + * [Bit 0] Read access; indicates whether reads are allowed from the 2-MByte region controlled by this entry. + */ + uint64_t read_access : 1; +#define EPDE_READ_ACCESS_BIT 0 +#define EPDE_READ_ACCESS_FLAG 0x01 +#define EPDE_READ_ACCESS_MASK 0x01 +#define EPDE_READ_ACCESS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Write access; indicates whether writes are allowed from the 2-MByte region controlled by this entry. + */ + uint64_t write_access : 1; +#define EPDE_WRITE_ACCESS_BIT 1 +#define EPDE_WRITE_ACCESS_FLAG 0x02 +#define EPDE_WRITE_ACCESS_MASK 0x01 +#define EPDE_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If the "mode-based execute control for EPT" VM-execution control is 0, execute access; indicates whether + * instruction fetches are allowed from the 2-MByte region controlled by this entry. + * If that control is 1, execute access for supervisor-mode linear addresses; indicates whether instruction fetches are + * allowed from supervisor-mode linear addresses in the 2-MByte region controlled by this entry. + */ + uint64_t execute_access : 1; +#define EPDE_EXECUTE_ACCESS_BIT 2 +#define EPDE_EXECUTE_ACCESS_FLAG 0x04 +#define EPDE_EXECUTE_ACCESS_MASK 0x01 +#define EPDE_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + uint64_t reserved1 : 5; + + /** + * [Bit 8] If bit 6 of EPTP is 1, accessed flag for EPT; indicates whether software has accessed the 2-MByte region + * controlled by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t accessed : 1; +#define EPDE_ACCESSED_BIT 8 +#define EPDE_ACCESSED_FLAG 0x100 +#define EPDE_ACCESSED_MASK 0x01 +#define EPDE_ACCESSED(_) (((_) >> 8) & 0x01) + uint64_t reserved2 : 1; + + /** + * [Bit 10] Execute access for user-mode linear addresses. If the "mode-based execute control for EPT" VM-execution control + * is 1, indicates whether instruction fetches are allowed from user-mode linear addresses in the 2-MByte region controlled + * by this entry. If that control is 0, this bit is ignored. + */ + uint64_t user_mode_execute : 1; +#define EPDE_USER_MODE_EXECUTE_BIT 10 +#define EPDE_USER_MODE_EXECUTE_FLAG 0x400 +#define EPDE_USER_MODE_EXECUTE_MASK 0x01 +#define EPDE_USER_MODE_EXECUTE(_) (((_) >> 10) & 0x01) + uint64_t reserved3 : 1; + + /** + * [Bits 47:12] Physical address of 4-KByte aligned EPT page table referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define EPDE_PAGE_FRAME_NUMBER_BIT 12 +#define EPDE_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define EPDE_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define EPDE_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved4 : 16; + }; + + uint64_t flags; +} epde; + +/** + * @brief Format of an EPT Page-Table Entry that Maps a 4-KByte Page + */ +typedef union +{ + struct + { + /** + * [Bit 0] Read access; indicates whether reads are allowed from the 4-KByte page referenced by this entry. + */ + uint64_t read_access : 1; +#define EPTE_READ_ACCESS_BIT 0 +#define EPTE_READ_ACCESS_FLAG 0x01 +#define EPTE_READ_ACCESS_MASK 0x01 +#define EPTE_READ_ACCESS(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Write access; indicates whether writes are allowed from the 4-KByte page referenced by this entry. + */ + uint64_t write_access : 1; +#define EPTE_WRITE_ACCESS_BIT 1 +#define EPTE_WRITE_ACCESS_FLAG 0x02 +#define EPTE_WRITE_ACCESS_MASK 0x01 +#define EPTE_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If the "mode-based execute control for EPT" VM-execution control is 0, execute access; indicates whether + * instruction fetches are allowed from the 4-KByte page controlled by this entry. + * If that control is 1, execute access for supervisor-mode linear addresses; indicates whether instruction fetches are + * allowed from supervisor-mode linear addresses in the 4-KByte page controlled by this entry. + */ + uint64_t execute_access : 1; +#define EPTE_EXECUTE_ACCESS_BIT 2 +#define EPTE_EXECUTE_ACCESS_FLAG 0x04 +#define EPTE_EXECUTE_ACCESS_MASK 0x01 +#define EPTE_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + + /** + * [Bits 5:3] EPT memory type for this 4-KByte page. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t memory_type : 3; +#define EPTE_MEMORY_TYPE_BIT 3 +#define EPTE_MEMORY_TYPE_FLAG 0x38 +#define EPTE_MEMORY_TYPE_MASK 0x07 +#define EPTE_MEMORY_TYPE(_) (((_) >> 3) & 0x07) + + /** + * [Bit 6] Ignore PAT memory type for this 4-KByte page. + * + * @see Vol3C[28.2.6(EPT and memory Typing)] + */ + uint64_t ignore_pat : 1; +#define EPTE_IGNORE_PAT_BIT 6 +#define EPTE_IGNORE_PAT_FLAG 0x40 +#define EPTE_IGNORE_PAT_MASK 0x01 +#define EPTE_IGNORE_PAT(_) (((_) >> 6) & 0x01) + uint64_t reserved1 : 1; + + /** + * [Bit 8] If bit 6 of EPTP is 1, accessed flag for EPT; indicates whether software has accessed the 4-KByte page + * referenced by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t accessed : 1; +#define EPTE_ACCESSED_BIT 8 +#define EPTE_ACCESSED_FLAG 0x100 +#define EPTE_ACCESSED_MASK 0x01 +#define EPTE_ACCESSED(_) (((_) >> 8) & 0x01) + + /** + * [Bit 9] If bit 6 of EPTP is 1, dirty flag for EPT; indicates whether software has written to the 4-KByte page referenced + * by this entry. Ignored if bit 6 of EPTP is 0. + * + * @see Vol3C[28.2.4(Accessed and Dirty Flags for EPT)] + */ + uint64_t dirty : 1; +#define EPTE_DIRTY_BIT 9 +#define EPTE_DIRTY_FLAG 0x200 +#define EPTE_DIRTY_MASK 0x01 +#define EPTE_DIRTY(_) (((_) >> 9) & 0x01) + + /** + * [Bit 10] Execute access for user-mode linear addresses. If the "mode-based execute control for EPT" VM-execution control + * is 1, indicates whether instruction fetches are allowed from user-mode linear addresses in the 4-KByte page controlled + * by this entry. If that control is 0, this bit is ignored. + */ + uint64_t user_mode_execute : 1; +#define EPTE_USER_MODE_EXECUTE_BIT 10 +#define EPTE_USER_MODE_EXECUTE_FLAG 0x400 +#define EPTE_USER_MODE_EXECUTE_MASK 0x01 +#define EPTE_USER_MODE_EXECUTE(_) (((_) >> 10) & 0x01) + uint64_t reserved2 : 1; + + /** + * [Bits 47:12] Physical address of the 4-KByte page referenced by this entry. + */ + uint64_t page_frame_number : 36; +#define EPTE_PAGE_FRAME_NUMBER_BIT 12 +#define EPTE_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define EPTE_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define EPTE_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved3 : 15; + + /** + * [Bit 63] Suppress \#VE. If the "EPT-violation \#VE" VM-execution control is 1, EPT violations caused by accesses to this + * page are convertible to virtualization exceptions only if this bit is 0. If "EPT-violation \#VE" VMexecution control is + * 0, this bit is ignored. + * + * @see Vol3C[25.5.6.1(Convertible EPT Violations)] + */ + uint64_t suppress_ve : 1; +#define EPTE_SUPPRESS_VE_BIT 63 +#define EPTE_SUPPRESS_VE_FLAG 0x8000000000000000 +#define EPTE_SUPPRESS_VE_MASK 0x01 +#define EPTE_SUPPRESS_VE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} epte; + +/** + * @brief Format of a common EPT Entry + */ +typedef union +{ + struct + { + uint64_t read_access : 1; +#define EPT_ENTRY_READ_ACCESS_BIT 0 +#define EPT_ENTRY_READ_ACCESS_FLAG 0x01 +#define EPT_ENTRY_READ_ACCESS_MASK 0x01 +#define EPT_ENTRY_READ_ACCESS(_) (((_) >> 0) & 0x01) + uint64_t write_access : 1; +#define EPT_ENTRY_WRITE_ACCESS_BIT 1 +#define EPT_ENTRY_WRITE_ACCESS_FLAG 0x02 +#define EPT_ENTRY_WRITE_ACCESS_MASK 0x01 +#define EPT_ENTRY_WRITE_ACCESS(_) (((_) >> 1) & 0x01) + uint64_t execute_access : 1; +#define EPT_ENTRY_EXECUTE_ACCESS_BIT 2 +#define EPT_ENTRY_EXECUTE_ACCESS_FLAG 0x04 +#define EPT_ENTRY_EXECUTE_ACCESS_MASK 0x01 +#define EPT_ENTRY_EXECUTE_ACCESS(_) (((_) >> 2) & 0x01) + uint64_t memory_type : 3; +#define EPT_ENTRY_MEMORY_TYPE_BIT 3 +#define EPT_ENTRY_MEMORY_TYPE_FLAG 0x38 +#define EPT_ENTRY_MEMORY_TYPE_MASK 0x07 +#define EPT_ENTRY_MEMORY_TYPE(_) (((_) >> 3) & 0x07) + uint64_t ignore_pat : 1; +#define EPT_ENTRY_IGNORE_PAT_BIT 6 +#define EPT_ENTRY_IGNORE_PAT_FLAG 0x40 +#define EPT_ENTRY_IGNORE_PAT_MASK 0x01 +#define EPT_ENTRY_IGNORE_PAT(_) (((_) >> 6) & 0x01) + uint64_t large_page : 1; +#define EPT_ENTRY_LARGE_PAGE_BIT 7 +#define EPT_ENTRY_LARGE_PAGE_FLAG 0x80 +#define EPT_ENTRY_LARGE_PAGE_MASK 0x01 +#define EPT_ENTRY_LARGE_PAGE(_) (((_) >> 7) & 0x01) + uint64_t accessed : 1; +#define EPT_ENTRY_ACCESSED_BIT 8 +#define EPT_ENTRY_ACCESSED_FLAG 0x100 +#define EPT_ENTRY_ACCESSED_MASK 0x01 +#define EPT_ENTRY_ACCESSED(_) (((_) >> 8) & 0x01) + uint64_t dirty : 1; +#define EPT_ENTRY_DIRTY_BIT 9 +#define EPT_ENTRY_DIRTY_FLAG 0x200 +#define EPT_ENTRY_DIRTY_MASK 0x01 +#define EPT_ENTRY_DIRTY(_) (((_) >> 9) & 0x01) + uint64_t user_mode_execute : 1; +#define EPT_ENTRY_USER_MODE_EXECUTE_BIT 10 +#define EPT_ENTRY_USER_MODE_EXECUTE_FLAG 0x400 +#define EPT_ENTRY_USER_MODE_EXECUTE_MASK 0x01 +#define EPT_ENTRY_USER_MODE_EXECUTE(_) (((_) >> 10) & 0x01) + uint64_t reserved1 : 1; + uint64_t page_frame_number : 36; +#define EPT_ENTRY_PAGE_FRAME_NUMBER_BIT 12 +#define EPT_ENTRY_PAGE_FRAME_NUMBER_FLAG 0xFFFFFFFFF000 +#define EPT_ENTRY_PAGE_FRAME_NUMBER_MASK 0xFFFFFFFFF +#define EPT_ENTRY_PAGE_FRAME_NUMBER(_) (((_) >> 12) & 0xFFFFFFFFF) + uint64_t reserved2 : 15; + uint64_t suppress_ve : 1; +#define EPT_ENTRY_SUPPRESS_VE_BIT 63 +#define EPT_ENTRY_SUPPRESS_VE_FLAG 0x8000000000000000 +#define EPT_ENTRY_SUPPRESS_VE_MASK 0x01 +#define EPT_ENTRY_SUPPRESS_VE(_) (((_) >> 63) & 0x01) + }; + + uint64_t flags; +} ept_entry; + +/** + * @defgroup ept_table_level \ + * EPT Table level numbers + * + * EPT Table level numbers. + * @{ + */ +#define EPT_LEVEL_PML4E 0x00000003 +#define EPT_LEVEL_PDPTE 0x00000002 +#define EPT_LEVEL_PDE 0x00000001 +#define EPT_LEVEL_PTE 0x00000000 + /** + * @} + */ + + /** + * @defgroup ept_entry_count \ + * EPT Entry counts + * + * EPT Entry counts. + * @{ + */ +#define EPT_PML4E_ENTRY_COUNT 0x00000200 +#define EPT_PDPTE_ENTRY_COUNT 0x00000200 +#define EPT_PDE_ENTRY_COUNT 0x00000200 +#define EPT_PTE_ENTRY_COUNT 0x00000200 + /** + * @} + */ + + /** + * @} + */ + +typedef enum +{ + /** + * If the INVEPT type is 1, the logical processor invalidates all guest-physical mappings and combined mappings associated + * with the EP4TA specified in the INVEPT descriptor. Combined mappings for that EP4TA are invalidated for all VPIDs and + * all PCIDs. (The instruction may invalidate mappings associated with other EP4TAs.) + */ + invept_single_context = 0x00000001, + + /** + * If the INVEPT type is 2, the logical processor invalidates guest-physical mappings and combined mappings associated with + * all EP4TAs (and, for combined mappings, for all VPIDs and PCIDs). + */ + invept_all_context = 0x00000002, +} invept_type; + +typedef enum +{ + /** + * If the INVVPID type is 0, the logical processor invalidates linear mappings and combined mappings associated with the + * VPID specified in the INVVPID descriptor and that would be used to translate the linear address specified in of the + * INVVPID descriptor. Linear mappings and combined mappings for that VPID and linear address are invalidated for all PCIDs + * and, for combined mappings, all EP4TAs. (The instruction may also invalidate mappings associated with other VPIDs and + * for other linear addresses). + */ + invvpid_individual_address = 0x00000000, + + /** + * If the INVVPID type is 1, the logical processor invalidates all linear mappings and combined mappings associated with + * the VPID specified in the INVVPID descriptor. Linear mappings and combined mappings for that VPID are invalidated for + * all PCIDs and, for combined mappings, all EP4TAs. (The instruction may also invalidate mappings associated with other + * VPIDs). + */ + invvpid_single_context = 0x00000001, + + /** + * If the INVVPID type is 2, the logical processor invalidates linear mappings and combined mappings associated with all + * VPIDs except VPID 0000H and with all PCIDs. (The instruction may also invalidate linear mappings with VPID 0000H.) + * Combined mappings are invalidated for all EP4TAs. + */ + invvpid_all_context = 0x00000002, + + /** + * If the INVVPID type is 3, the logical processor invalidates linear mappings and combined mappings associated with the + * VPID specified in the INVVPID descriptor. Linear mappings and combined mappings for that VPID are invalidated for all + * PCIDs and, for combined mappings, all EP4TAs. The logical processor is not required to invalidate information that was + * used for global translations (although it may do so). (The instruction may also invalidate mappings associated with + * other VPIDs). + * + * @see Vol3C[4.10(Caching Translation Information)] + */ + invvpid_single_context_retaining_globals = 0x00000003, +} invvpid_type; + +typedef struct +{ + uint64_t ept_pointer; + + /** + * Must be zero. + */ + uint64_t reserved; +} invept_descriptor; + +typedef struct +{ + uint16_t vpid; + + /** + * Must be zero. + */ + uint16_t reserved1; + + /** + * Must be zero. + */ + uint32_t reserved2; + uint64_t linear_address; +} invvpid_descriptor; + +/** + * @brief Format of the VMCS Region + * + * A logical processor uses virtual-machine control data structures (VMCSs) while it is in VMX operation. These manage + * transitions into and out of VMX non-root operation (VM entries and VM exits) as well as processor behavior in VMX + * non-root operation. This structure is manipulated by the new instructions VMCLEAR, VMPTRLD, VMREAD, and VMWRITE. + * A VMCS region comprises up to 4-KBytes. The exact size is implementation specific and can be determined by consulting + * the VMX capability MSR IA32_VMX_BASIC. + * + * @see Vol3C[24.2(FORMAT OF THE VMCS REGION)] (reference) + */ +typedef struct +{ + struct + { + /** + * @brief VMCS revision identifier + * + * [Bits 30:0] Processors that maintain VMCS data in different formats (see below) use different VMCS revision identifiers. + * These identifiers enable software to avoid using a VMCS region formatted for one processor on a processor that uses a + * different format. + * Software should write the VMCS revision identifier to the VMCS region before using that region for a VMCS. The VMCS + * revision identifier is never written by the processor; VMPTRLD fails if its operand references a VMCS region whose VMCS + * revision identifier differs from that used by the processor. + * Software can discover the VMCS revision identifier that a processor uses by reading the VMX capability MSR + * IA32_VMX_BASIC. + * + * @see Vol3C[24.6.2(Processor-Based VM-Execution Controls)] + * @see Vol3D[A.1(BASIC VMX INFORMATION)] + */ + uint32_t revision_id : 31; + + /** + * @brief Shadow-VMCS indicator + * + * [Bit 31] Software should clear or set the shadow-VMCS indicator depending on whether the VMCS is to be an ordinary VMCS + * or a shadow VMCS. VMPTRLD fails if the shadow-VMCS indicator is set and the processor does not support the 1-setting of + * the "VMCS shadowing" VM-execution control. Software can discover support for this setting by reading the VMX capability + * MSR IA32_VMX_PROCBASED_CTLS2. + * + * @see Vol3C[24.10(VMCS TYPES ORDINARY AND SHADOW)] + */ + uint32_t shadow_vmcs_indicator : 1; + }; + + + /** + * @brief VMX-abort indicator + * + * The contents of these bits do not control processor operation in any way. A logical processor writes a non-zero value + * into these bits if a VMX abort occurs. Software may also write into this field. + * + * @see Vol3D[27.7(VMX Aborts)] + */ + uint32_t abort_indicator; + + /** + * @brief VMCS data (implementation-specific format) + * + * These parts of the VMCS control VMX non-root operation and the VMX transitions. + * The format of these data is implementation-specific. To ensure proper behavior in VMX operation, software should + * maintain the VMCS region and related structures in writeback cacheable memory. Future implementations may allow or + * require a different memory type. Software should consult the VMX capability MSR IA32_VMX_BASIC. + * + * @see Vol3C[24.11.4(Software Access to Related Structures)] + * @see Vol3D[A.1(BASIC VMX INFORMATION)] + */ + uint8_t data[4088]; +} vmcs; + +/** + * @brief Format of the VMXON Region + * + * Before executing VMXON, software allocates a region of memory that the logical processor uses to support VMX operation. + * This region is called the VMXON region. + * A VMXON region comprises up to 4-KBytes. The exact size is implementation specific and can be determined by consulting + * the VMX capability MSR IA32_VMX_BASIC. + * + * @see Vol3C[24.11.5(VMXON Region)] (reference) + */ +typedef struct +{ + struct + { + /** + * @brief VMCS revision identifier + * + * [Bits 30:0] Before executing VMXON, software should write the VMCS revision identifier to the VMXON region. + * (Specifically, it should write the 31-bit VMCS revision identifier to bits 30:0 of the first 4 bytes of the VMXON + * region; bit 31 should be cleared to 0.) + * + * @see VMCS + * @see Vol3C[24.2(FORMAT OF THE VMCS REGION)] + * @see Vol3C[24.11.5(VMXON Region)] + */ + uint32_t revision_id : 31; + + /** + * [Bit 31] Bit 31 is always 0. + */ + uint32_t must_be_zero : 1; + }; + + + /** + * @brief VMXON data (implementation-specific format) + * + * The format of these data is implementation-specific. To ensure proper behavior in VMX operation, software should not + * access or modify the VMXON region of a logical processor between execution of VMXON and VMXOFF on that logical + * processor. Doing otherwise may lead to unpredictable behavior. + * + * @see Vol3C[24.11.4(Software Access to Related Structures)] + * @see Vol3D[A.1(BASIC VMX INFORMATION)] + */ + uint8_t data[4092]; +} vmxon; + +/** + * @defgroup vmcs_fields \ + * VMCS (VM Control Structure) + * + * Every component of the VMCS is encoded by a 32-bit field that can be used by VMREAD and VMWRITE. This enumerates all + * fields in the VMCS and their encodings. Fields are grouped by width (16-bit, 32-bit, etc.) and type (guest-state, + * host-state, etc.). + * + * @see Vol3D[B(APPENDIX B FIELD ENCODING IN VMCS)] (reference) + * @{ + */ +typedef union +{ + struct + { + /** + * [Bit 0] Access type (0 = full; 1 = high); must be full for 16-bit, 32-bit, and natural-width fields. + */ + uint16_t access_type : 1; +#define VMCS_COMPONENT_ENCODING_ACCESS_TYPE_BIT 0 +#define VMCS_COMPONENT_ENCODING_ACCESS_TYPE_FLAG 0x01 +#define VMCS_COMPONENT_ENCODING_ACCESS_TYPE_MASK 0x01 +#define VMCS_COMPONENT_ENCODING_ACCESS_TYPE(_) (((_) >> 0) & 0x01) + + /** + * [Bits 9:1] Index. + */ + uint16_t index : 9; +#define VMCS_COMPONENT_ENCODING_INDEX_BIT 1 +#define VMCS_COMPONENT_ENCODING_INDEX_FLAG 0x3FE +#define VMCS_COMPONENT_ENCODING_INDEX_MASK 0x1FF +#define VMCS_COMPONENT_ENCODING_INDEX(_) (((_) >> 1) & 0x1FF) + + /** + * [Bits 11:10] Type: + * 0: control + * 1: VM-exit information + * 2: guest state + * 3: host state + */ + uint16_t exec_type : 2; +#define VMCS_COMPONENT_ENCODING_TYPE_BIT 10 +#define VMCS_COMPONENT_ENCODING_TYPE_FLAG 0xC00 +#define VMCS_COMPONENT_ENCODING_TYPE_MASK 0x03 +#define VMCS_COMPONENT_ENCODING_TYPE(_) (((_) >> 10) & 0x03) + + /** + * [Bit 12] Reserved (must be 0). + */ + uint16_t must_be_zero : 1; +#define VMCS_COMPONENT_ENCODING_MUST_BE_ZERO_BIT 12 +#define VMCS_COMPONENT_ENCODING_MUST_BE_ZERO_FLAG 0x1000 +#define VMCS_COMPONENT_ENCODING_MUST_BE_ZERO_MASK 0x01 +#define VMCS_COMPONENT_ENCODING_MUST_BE_ZERO(_) (((_) >> 12) & 0x01) + + /** + * [Bits 14:13] Width: + * 0: 16-bit + * 1: 64-bit + * 2: 32-bit + * 3: natural-width + */ + uint16_t width : 2; +#define VMCS_COMPONENT_ENCODING_WIDTH_BIT 13 +#define VMCS_COMPONENT_ENCODING_WIDTH_FLAG 0x6000 +#define VMCS_COMPONENT_ENCODING_WIDTH_MASK 0x03 +#define VMCS_COMPONENT_ENCODING_WIDTH(_) (((_) >> 13) & 0x03) + uint16_t reserved1 : 1; + }; + + uint16_t flags; +} vmcs_component_encoding; + +/** + * @defgroup vmcs_16_bit \ + * 16-Bit Fields + * + * 16-Bit Fields. + * + * @see Vol3D[B.1(16-BIT FIELDS)] (reference) + * @{ + */ + /** + * @defgroup vmcs_16_bit_control_fields \ + * 16-Bit Control Fields + * + * 16-Bit Control Fields. + * @{ + */ + /** + * Virtual-processor identifier (VPID). + * + * @remarks This field exists only on processors that support the 1-setting of the "enable VPID" VM-execution control. + */ +#define VMCS_CTRL_VIRTUAL_PROCESSOR_IDENTIFIER 0x00000000 + + /** + * Posted-interrupt notification vector. + * + * @remarks This field exists only on processors that support the 1-setting of the "process posted interrupts" VM-execution + * control. + */ +#define VMCS_CTRL_POSTED_INTERRUPT_NOTIFICATION_VECTOR 0x00000002 + + /** + * EPTP index. + * + * @remarks This field exists only on processors that support the 1-setting of the "EPT-violation \#VE" VM-execution + * control. + */ +#define VMCS_CTRL_EPTP_INDEX 0x00000004 + /** + * @} + */ + + /** + * @defgroup vmcs_16_bit_guest_state_fields \ + * 16-Bit Guest-State Fields + * + * 16-Bit Guest-State Fields. + * @{ + */ + /** + * Guest ES selector. + */ +#define VMCS_GUEST_ES_SELECTOR 0x00000800 + + /** + * Guest CS selector. + */ +#define VMCS_GUEST_CS_SELECTOR 0x00000802 + + /** + * Guest SS selector. + */ +#define VMCS_GUEST_SS_SELECTOR 0x00000804 + + /** + * Guest DS selector. + */ +#define VMCS_GUEST_DS_SELECTOR 0x00000806 + + /** + * Guest FS selector. + */ +#define VMCS_GUEST_FS_SELECTOR 0x00000808 + + /** + * Guest GS selector. + */ +#define VMCS_GUEST_GS_SELECTOR 0x0000080A + + /** + * Guest LDTR selector. + */ +#define VMCS_GUEST_LDTR_SELECTOR 0x0000080C + + /** + * Guest TR selector. + */ +#define VMCS_GUEST_TR_SELECTOR 0x0000080E + + /** + * Guest interrupt status. + * + * @remarks This field exists only on processors that support the 1-setting of the "virtual-interrupt delivery" + * VM-execution control. + */ +#define VMCS_GUEST_INTERRUPT_STATUS 0x00000810 + + /** + * PML index. + * + * @remarks This field exists only on processors that support the 1-setting of the "enable PML" VM-execution control. + */ +#define VMCS_GUEST_PML_INDEX 0x00000812 + /** + * @} + */ + + /** + * @defgroup vmcs_16_bit_host_state_fields \ + * 16-Bit Host-State Fields + * + * 16-Bit Host-State Fields. + * @{ + */ + /** + * Host ES selector. + */ +#define VMCS_HOST_ES_SELECTOR 0x00000C00 + + /** + * Host CS selector. + */ +#define VMCS_HOST_CS_SELECTOR 0x00000C02 + + /** + * Host SS selector. + */ +#define VMCS_HOST_SS_SELECTOR 0x00000C04 + + /** + * Host DS selector. + */ +#define VMCS_HOST_DS_SELECTOR 0x00000C06 + + /** + * Host FS selector. + */ +#define VMCS_HOST_FS_SELECTOR 0x00000C08 + + /** + * Host GS selector. + */ +#define VMCS_HOST_GS_SELECTOR 0x00000C0A + + /** + * Host TR selector. + */ +#define VMCS_HOST_TR_SELECTOR 0x00000C0C + /** + * @} + */ + + /** + * @} + */ + + /** + * @defgroup vmcs_64_bit \ + * 64-Bit Fields + * + * 64-Bit Fields. + * + * @see Vol3D[B.2(64-BIT FIELDS)] (reference) + * @{ + */ + /** + * @defgroup vmcs_64_bit_control_fields \ + * 64-Bit Control Fields + * + * 64-Bit Control Fields. + * @{ + */ + /** + * Address of I/O bitmap A. + */ +#define VMCS_CTRL_IO_BITMAP_A_ADDRESS 0x00002000 + + /** + * Address of I/O bitmap B. + */ +#define VMCS_CTRL_IO_BITMAP_B_ADDRESS 0x00002002 + + /** + * Address of MSR bitmaps. + */ +#define VMCS_CTRL_MSR_BITMAP_ADDRESS 0x00002004 + + /** + * VM-exit MSR-store address. + */ +#define VMCS_CTRL_VMEXIT_MSR_STORE_ADDRESS 0x00002006 + + /** + * VM-exit MSR-load address. + */ +#define VMCS_CTRL_VMEXIT_MSR_LOAD_ADDRESS 0x00002008 + + /** + * VM-entry MSR-load address. + */ +#define VMCS_CTRL_VMENTRY_MSR_LOAD_ADDRESS 0x0000200A + + /** + * Executive-VMCS pointer. + */ +#define VMCS_CTRL_EXECUTIVE_VMCS_POINTER 0x0000200C + + /** + * PML address. + */ +#define VMCS_CTRL_PML_ADDRESS 0x0000200E + + /** + * TSC offset. + */ +#define VMCS_CTRL_TSC_OFFSET 0x00002010 + + /** + * Virtual-APIC address. + */ +#define VMCS_CTRL_VIRTUAL_APIC_ADDRESS 0x00002012 + + /** + * APIC-access address. + */ +#define VMCS_CTRL_APIC_ACCESS_ADDRESS 0x00002014 + + /** + * Posted-interrupt descriptor address + */ +#define VMCS_CTRL_POSTED_INTERRUPT_DESCRIPTOR_ADDRESS 0x00002016 + + /** + * VM-function controls. + */ +#define VMCS_CTRL_VMFUNC_CONTROLS 0x00002018 + + /** + * EPT pointer. + */ +#define VMCS_CTRL_EPT_POINTER 0x0000201A + + /** + * EOI-exit bitmap 0. + */ +#define VMCS_CTRL_EOI_EXIT_BITMAP_0 0x0000201C + + /** + * EOI-exit bitmap 1. + */ +#define VMCS_CTRL_EOI_EXIT_BITMAP_1 0x0000201E + + /** + * EOI-exit bitmap 2. + */ +#define VMCS_CTRL_EOI_EXIT_BITMAP_2 0x00002020 + + /** + * EOI-exit bitmap 3. + */ +#define VMCS_CTRL_EOI_EXIT_BITMAP_3 0x00002022 + + /** + * EPTP-list address. + */ +#define VMCS_CTRL_EPT_POINTER_LIST_ADDRESS 0x00002024 + + /** + * VMREAD-bitmap address. + */ +#define VMCS_CTRL_VMREAD_BITMAP_ADDRESS 0x00002026 + + /** + * VMWRITE-bitmap address. + */ +#define VMCS_CTRL_VMWRITE_BITMAP_ADDRESS 0x00002028 + + /** + * Virtualization-exception information address. + */ +#define VMCS_CTRL_VIRTUALIZATION_EXCEPTION_INFORMATION_ADDRESS 0x0000202A + + /** + * XSS-exiting bitmap. + */ +#define VMCS_CTRL_XSS_EXITING_BITMAP 0x0000202C + + /** + * ENCLS-exiting bitmap. + */ +#define VMCS_CTRL_ENCLS_EXITING_BITMAP 0x0000202E + + /** + * TSC multiplier. + */ +#define VMCS_CTRL_TSC_MULTIPLIER 0x00002032 + /** + * @} + */ + + /** + * @defgroup vmcs_64_bit_read_only_data_fields \ + * 64-Bit Read-Only Data Field + * + * 64-Bit Read-Only Data Field. + * @{ + */ + /** + * Guest-physical address. + */ +#define VMCS_GUEST_PHYSICAL_ADDRESS 0x00002400 + /** + * @} + */ + + /** + * @defgroup vmcs_64_bit_guest_state_fields \ + * 64-Bit Guest-State Fields + * + * 64-Bit Guest-State Fields. + * @{ + */ + /** + * VMCS link pointer. + */ +#define VMCS_GUEST_VMCS_LINK_POINTER 0x00002800 + + /** + * Guest IA32_DEBUGCTL. + */ +#define VMCS_GUEST_DEBUGCTL 0x00002802 + + /** + * Guest IA32_PAT. + */ +#define VMCS_GUEST_PAT 0x00002804 + + /** + * Guest IA32_EFER. + */ +#define VMCS_GUEST_EFER 0x00002806 + + /** + * Guest IA32_PERF_GLOBAL_CTRL. + */ +#define VMCS_GUEST_PERF_GLOBAL_CTRL 0x00002808 + + /** + * Guest PDPTE0. + */ +#define VMCS_GUEST_PDPTE0 0x0000280A + + /** + * Guest PDPTE1. + */ +#define VMCS_GUEST_PDPTE1 0x0000280C + + /** + * Guest PDPTE2. + */ +#define VMCS_GUEST_PDPTE2 0x0000280E + + /** + * Guest PDPTE3. + */ +#define VMCS_GUEST_PDPTE3 0x00002810 + + /** + * Guest IA32_BNDCFGS. + */ +#define VMCS_GUEST_BNDCFGS 0x00002812 + + /** + * Guest IA32_RTIT_CTL. + */ +#define VMCS_GUEST_RTIT_CTL 0x00002814 + /** + * @} + */ + + /** + * @defgroup vmcs_64_bit_host_state_fields \ + * 64-Bit Host-State Fields + * + * 64-Bit Host-State Fields. + * @{ + */ + /** + * Host IA32_PAT. + */ +#define VMCS_HOST_PAT 0x00002C00 + + /** + * Host IA32_EFER. + */ +#define VMCS_HOST_EFER 0x00002C02 + + /** + * Host IA32_PERF_GLOBAL_CTRL. + */ +#define VMCS_HOST_PERF_GLOBAL_CTRL 0x00002C04 + /** + * @} + */ + + /** + * @} + */ + + /** + * @defgroup vmcs_32_bit \ + * 32-Bit Fields + * + * 32-Bit Fields. + * + * @see Vol3D[B.3(32-BIT FIELDS)] (reference) + * @{ + */ + /** + * @defgroup vmcs_32_bit_control_fields \ + * 32-Bit Control Fields + * + * 32-Bit Control Fields. + * @{ + */ + /** + * Pin-based VM-execution controls. + */ +#define VMCS_CTRL_PIN_BASED_VM_EXECUTION_CONTROLS 0x00004000 + + /** + * Primary processor-based VM-execution controls. + */ +#define VMCS_CTRL_PROCESSOR_BASED_VM_EXECUTION_CONTROLS 0x00004002 + + /** + * Exception bitmap. + */ +#define VMCS_CTRL_EXCEPTION_BITMAP 0x00004004 + + /** + * Page-fault error-code mask. + */ +#define VMCS_CTRL_PAGEFAULT_ERROR_CODE_MASK 0x00004006 + + /** + * Page-fault error-code match. + */ +#define VMCS_CTRL_PAGEFAULT_ERROR_CODE_MATCH 0x00004008 + + /** + * CR3-target count. + */ +#define VMCS_CTRL_CR3_TARGET_COUNT 0x0000400A + + /** + * VM-exit controls. + */ +#define VMCS_CTRL_VMEXIT_CONTROLS 0x0000400C + + /** + * VM-exit MSR-store count. + */ +#define VMCS_CTRL_VMEXIT_MSR_STORE_COUNT 0x0000400E + + /** + * VM-exit MSR-load count. + */ +#define VMCS_CTRL_VMEXIT_MSR_LOAD_COUNT 0x00004010 + + /** + * VM-entry controls. + */ +#define VMCS_CTRL_VMENTRY_CONTROLS 0x00004012 + + /** + * VM-entry MSR-load count. + */ +#define VMCS_CTRL_VMENTRY_MSR_LOAD_COUNT 0x00004014 + + /** + * VM-entry interruption-information field. + */ +#define VMCS_CTRL_VMENTRY_INTERRUPTION_INFORMATION_FIELD 0x00004016 + + /** + * VM-entry exception error code. + */ +#define VMCS_CTRL_VMENTRY_EXCEPTION_ERROR_CODE 0x00004018 + + /** + * VM-entry instruction length. + */ +#define VMCS_CTRL_VMENTRY_INSTRUCTION_LENGTH 0x0000401A + + /** + * TPR threshold. + */ +#define VMCS_CTRL_TPR_THRESHOLD 0x0000401C + + /** + * Secondary processor-based VM-execution controls. + */ +#define VMCS_CTRL_SECONDARY_PROCESSOR_BASED_VM_EXECUTION_CONTROLS 0x0000401E + + /** + * PLE_Gap. + */ +#define VMCS_CTRL_PLE_GAP 0x00004020 + + /** + * PLE_Window. + */ +#define VMCS_CTRL_PLE_WINDOW 0x00004022 + /** + * @} + */ + + /** + * @defgroup vmcs_32_bit_read_only_data_fields \ + * 32-Bit Read-Only Data Fields + * + * 32-Bit Read-Only Data Fields. + * @{ + */ + /** + * VM-instruction error. + */ +#define VMCS_VM_INSTRUCTION_ERROR 0x00004400 + + /** + * Exit reason. + */ +#define VMCS_EXIT_REASON 0x00004402 + + /** + * VM-exit interruption information. + */ +#define VMCS_VMEXIT_INTERRUPTION_INFORMATION 0x00004404 + + /** + * VM-exit interruption error code. + */ +#define VMCS_VMEXIT_INTERRUPTION_ERROR_CODE 0x00004406 + + /** + * IDT-vectoring information field. + */ +#define VMCS_IDT_VECTORING_INFORMATION 0x00004408 + + /** + * IDT-vectoring error code. + */ +#define VMCS_IDT_VECTORING_ERROR_CODE 0x0000440A + + /** + * VM-exit instruction length. + */ +#define VMCS_VMEXIT_INSTRUCTION_LENGTH 0x0000440C + + /** + * VM-exit instruction information. + */ +#define VMCS_VMEXIT_INSTRUCTION_INFO 0x0000440E + /** + * @} + */ + + /** + * @defgroup vmcs_32_bit_guest_state_fields \ + * 32-Bit Guest-State Fields + * + * 32-Bit Guest-State Fields. + * @{ + */ + /** + * Guest ES limit. + */ +#define VMCS_GUEST_ES_LIMIT 0x00004800 + + /** + * Guest CS limit. + */ +#define VMCS_GUEST_CS_LIMIT 0x00004802 + + /** + * Guest SS limit. + */ +#define VMCS_GUEST_SS_LIMIT 0x00004804 + + /** + * Guest DS limit. + */ +#define VMCS_GUEST_DS_LIMIT 0x00004806 + + /** + * Guest FS limit. + */ +#define VMCS_GUEST_FS_LIMIT 0x00004808 + + /** + * Guest GS limit. + */ +#define VMCS_GUEST_GS_LIMIT 0x0000480A + + /** + * Guest LDTR limit. + */ +#define VMCS_GUEST_LDTR_LIMIT 0x0000480C + + /** + * Guest TR limit. + */ +#define VMCS_GUEST_TR_LIMIT 0x0000480E + + /** + * Guest GDTR limit. + */ +#define VMCS_GUEST_GDTR_LIMIT 0x00004810 + + /** + * Guest IDTR limit. + */ +#define VMCS_GUEST_IDTR_LIMIT 0x00004812 + + /** + * Guest ES access rights. + */ +#define VMCS_GUEST_ES_ACCESS_RIGHTS 0x00004814 + + /** + * Guest CS access rights. + */ +#define VMCS_GUEST_CS_ACCESS_RIGHTS 0x00004816 + + /** + * Guest SS access rights. + */ +#define VMCS_GUEST_SS_ACCESS_RIGHTS 0x00004818 + + /** + * Guest DS access rights. + */ +#define VMCS_GUEST_DS_ACCESS_RIGHTS 0x0000481A + + /** + * Guest FS access rights. + */ +#define VMCS_GUEST_FS_ACCESS_RIGHTS 0x0000481C + + /** + * Guest GS access rights. + */ +#define VMCS_GUEST_GS_ACCESS_RIGHTS 0x0000481E + + /** + * Guest LDTR access rights. + */ +#define VMCS_GUEST_LDTR_ACCESS_RIGHTS 0x00004820 + + /** + * Guest TR access rights. + */ +#define VMCS_GUEST_TR_ACCESS_RIGHTS 0x00004822 + + /** + * Guest interruptibility state. + */ +#define VMCS_GUEST_INTERRUPTIBILITY_STATE 0x00004824 + + /** + * Guest activity state. + */ +#define VMCS_GUEST_ACTIVITY_STATE 0x00004826 + + /** + * Guest SMBASE. + */ +#define VMCS_GUEST_SMBASE 0x00004828 + + /** + * Guest IA32_SYSENTER_CS. + */ +#define VMCS_GUEST_SYSENTER_CS 0x0000482A + + /** + * VMX-preemption timer value. + */ +#define VMCS_GUEST_VMX_PREEMPTION_TIMER_VALUE 0x0000482E + /** + * @} + */ + + /** + * @defgroup vmcs_32_bit_host_state_fields \ + * 32-Bit Host-State Field + * + * 32-Bit Host-State Field. + * @{ + */ + /** + * Host IA32_SYSENTER_CS. + */ +#define VMCS_HOST_SYSENTER_CS 0x00004C00 + /** + * @} + */ + + /** + * @} + */ + + /** + * @defgroup vmcs_natural_width \ + * Natural-Width Fields + * + * Natural-Width Fields. + * + * @see Vol3D[B.4(NATURAL-WIDTH FIELDS)] (reference) + * @{ + */ + /** + * @defgroup vmcs_natural_width_control_fields \ + * Natural-Width Control Fields + * + * Natural-Width Control Fields + * @{ + */ + /** + * CR0 guest/host mask. + */ +#define VMCS_CTRL_CR0_GUEST_HOST_MASK 0x00006000 + + /** + * CR4 guest/host mask. + */ +#define VMCS_CTRL_CR4_GUEST_HOST_MASK 0x00006002 + + /** + * CR0 read shadow. + */ +#define VMCS_CTRL_CR0_READ_SHADOW 0x00006004 + + /** + * CR4 read shadow. + */ +#define VMCS_CTRL_CR4_READ_SHADOW 0x00006006 + + /** + * CR3-target value 0. + */ +#define VMCS_CTRL_CR3_TARGET_VALUE_0 0x00006008 + + /** + * CR3-target value 1. + */ +#define VMCS_CTRL_CR3_TARGET_VALUE_1 0x0000600A + + /** + * CR3-target value 2. + */ +#define VMCS_CTRL_CR3_TARGET_VALUE_2 0x0000600C + + /** + * CR3-target value 3. + */ +#define VMCS_CTRL_CR3_TARGET_VALUE_3 0x0000600E + /** + * @} + */ + + /** + * @defgroup vmcs_natural_width_read_only_data_fields \ + * Natural-Width Read-Only Data Fields + * + * Natural-Width Read-Only Data Fields. + * @{ + */ + /** + * Exit qualification. + */ +#define VMCS_EXIT_QUALIFICATION 0x00006400 + + /** + * I/O RCX. + */ +#define VMCS_IO_RCX 0x00006402 + + /** + * I/O RSI. + */ +#define VMCS_IO_RSX 0x00006404 + + /** + * I/O RDI. + */ +#define VMCS_IO_RDI 0x00006406 + + /** + * I/O RIP. + */ +#define VMCS_IO_RIP 0x00006408 + + /** + * Guest-linear address. + */ +#define VMCS_EXIT_GUEST_LINEAR_ADDRESS 0x0000640A + /** + * @} + */ + + /** + * @defgroup vmcs_natural_width_guest_state_fields \ + * Natural-Width Guest-State Fields + * + * Natural-Width Guest-State Fields. + * @{ + */ + /** + * Guest CR0. + */ +#define VMCS_GUEST_CR0 0x00006800 + + /** + * Guest CR3. + */ +#define VMCS_GUEST_CR3 0x00006802 + + /** + * Guest CR4. + */ +#define VMCS_GUEST_CR4 0x00006804 + + /** + * Guest ES base. + */ +#define VMCS_GUEST_ES_BASE 0x00006806 + + /** + * Guest CS base. + */ +#define VMCS_GUEST_CS_BASE 0x00006808 + + /** + * Guest SS base. + */ +#define VMCS_GUEST_SS_BASE 0x0000680A + + /** + * Guest DS base. + */ +#define VMCS_GUEST_DS_BASE 0x0000680C + + /** + * Guest FS base. + */ +#define VMCS_GUEST_FS_BASE 0x0000680E + + /** + * Guest GS base. + */ +#define VMCS_GUEST_GS_BASE 0x00006810 + + /** + * Guest LDTR base. + */ +#define VMCS_GUEST_LDTR_BASE 0x00006812 + + /** + * Guest TR base. + */ +#define VMCS_GUEST_TR_BASE 0x00006814 + + /** + * Guest GDTR base. + */ +#define VMCS_GUEST_GDTR_BASE 0x00006816 + + /** + * Guest IDTR base. + */ +#define VMCS_GUEST_IDTR_BASE 0x00006818 + + /** + * Guest DR7. + */ +#define VMCS_GUEST_DR7 0x0000681A + + /** + * Guest RSP. + */ +#define VMCS_GUEST_RSP 0x0000681C + + /** + * Guest RIP. + */ +#define VMCS_GUEST_RIP 0x0000681E + + /** + * Guest RFLAGS. + */ +#define VMCS_GUEST_RFLAGS 0x00006820 + + /** + * Guest pending debug exceptions. + */ +#define VMCS_GUEST_PENDING_DEBUG_EXCEPTIONS 0x00006822 + + /** + * Guest IA32_SYSENTER_ESP. + */ +#define VMCS_GUEST_SYSENTER_ESP 0x00006824 + + /** + * Guest IA32_SYSENTER_EIP. + */ +#define VMCS_GUEST_SYSENTER_EIP 0x00006826 + + /** + * Guest IA32_S_CET. + */ +#define VMCS_GUEST_S_CET 0x00006C28 + + /** + * Guest SSP. + */ +#define VMCS_GUEST_SSP 0x00006C2A + + /** + * Guest IA32_INTERRUPT_SSP_TABLE_ADDR. + */ +#define VMCS_GUEST_INTERRUPT_SSP_TABLE_ADDR 0x00006C2C + /** + * @} + */ + + /** + * @defgroup vmcs_natural_width_host_state_fields \ + * Natural-Width Host-State Fields + * + * Natural-Width Host-State Fields. + * @{ + */ + /** + * Host CR0. + */ +#define VMCS_HOST_CR0 0x00006C00 + + /** + * Host CR3. + */ +#define VMCS_HOST_CR3 0x00006C02 + + /** + * Host CR4. + */ +#define VMCS_HOST_CR4 0x00006C04 + + /** + * Host FS base. + */ +#define VMCS_HOST_FS_BASE 0x00006C06 + + /** + * Host GS base. + */ +#define VMCS_HOST_GS_BASE 0x00006C08 + + /** + * Host TR base. + */ +#define VMCS_HOST_TR_BASE 0x00006C0A + + /** + * Host GDTR base. + */ +#define VMCS_HOST_GDTR_BASE 0x00006C0C + + /** + * Host IDTR base. + */ +#define VMCS_HOST_IDTR_BASE 0x00006C0E + + /** + * Host IA32_SYSENTER_ESP. + */ +#define VMCS_HOST_SYSENTER_ESP 0x00006C10 + + /** + * Host IA32_SYSENTER_EIP. + */ +#define VMCS_HOST_SYSENTER_EIP 0x00006C12 + + /** + * Host RSP. + */ +#define VMCS_HOST_RSP 0x00006C14 + + /** + * Host RIP. + */ +#define VMCS_HOST_RIP 0x00006C16 + + /** + * Host IA32_S_CET. + */ +#define VMCS_HOST_S_CET 0x00006C18 + + /** + * Host SSP. + */ +#define VMCS_HOST_SSP 0x00006C1A + + /** + * Host IA32_INTERRUPT_SSP_TABLE_ADDR. + */ +#define VMCS_HOST_INTERRUPT_SSP_TABLE_ADDR 0x00006C1C + /** + * @} + */ + + /** + * @} + */ + + /** + * @} + */ + + /** + * @brief Valid interruption types + */ +typedef enum +{ + /** + * External interrupt. + */ + external_interrupt = 0x00000000, + + /** + * Non-maskable interrupt (NMI). + */ + non_maskable_interrupt = 0x00000002, + + /** + * Hardware exception (e.g,. \#PF). + */ + hardware_exception = 0x00000003, + + /** + * Software interrupt (INT n). + */ + software_interrupt = 0x00000004, + + /** + * Privileged software exception (INT1). + */ + privileged_software_exception = 0x00000005, + + /** + * Software exception (INT3 or INTO). + */ + software_exception = 0x00000006, + + /** + * Other event. This type is used for injection of events that are not delivered through the IDT. + */ + other_event = 0x00000007, +} interruption_type; + +/** + * @brief VM entry can be configured to conclude by delivering an event through the IDT (after all guest state and MSRs + * have been loaded). This process is called event injection and is controlled by these VM-entry control fields + * + * @see Vol3A[24.8.3(VM-Entry Controls for Event Injection)] (reference) + */ +typedef union +{ + struct + { + /** + * @brief Vector of interrupt or exception + * + * [Bits 7:0] Determines which entry in the IDT is used or which other event is injected. + */ + uint32_t vector : 8; +#define VMENTRY_INTERRUPT_INFORMATION_VECTOR_BIT 0 +#define VMENTRY_INTERRUPT_INFORMATION_VECTOR_FLAG 0xFF +#define VMENTRY_INTERRUPT_INFORMATION_VECTOR_MASK 0xFF +#define VMENTRY_INTERRUPT_INFORMATION_VECTOR(_) (((_) >> 0) & 0xFF) + + /** + * @brief Interruption type + * + * [Bits 10:8] Determines details of how the injection is performed. + */ + uint32_t interruption_type : 3; +#define VMENTRY_INTERRUPT_INFORMATION_INTERRUPTION_TYPE_BIT 8 +#define VMENTRY_INTERRUPT_INFORMATION_INTERRUPTION_TYPE_FLAG 0x700 +#define VMENTRY_INTERRUPT_INFORMATION_INTERRUPTION_TYPE_MASK 0x07 +#define VMENTRY_INTERRUPT_INFORMATION_INTERRUPTION_TYPE(_) (((_) >> 8) & 0x07) + + /** + * @brief Deliver error code (0 = do not deliver; 1 = deliver) + * + * [Bit 11] Determines whether delivery pushes an error code on the guest stack. + */ + uint32_t deliver_error_code : 1; +#define VMENTRY_INTERRUPT_INFORMATION_DELIVER_ERROR_CODE_BIT 11 +#define VMENTRY_INTERRUPT_INFORMATION_DELIVER_ERROR_CODE_FLAG 0x800 +#define VMENTRY_INTERRUPT_INFORMATION_DELIVER_ERROR_CODE_MASK 0x01 +#define VMENTRY_INTERRUPT_INFORMATION_DELIVER_ERROR_CODE(_) (((_) >> 11) & 0x01) + uint32_t reserved1 : 19; + + /** + * @brief Valid + * + * [Bit 31] VM entry injects an event if and only if the valid bit is 1. The valid bit in this field is cleared on every VM + * exit. + */ + uint32_t valid : 1; +#define VMENTRY_INTERRUPT_INFORMATION_VALID_BIT 31 +#define VMENTRY_INTERRUPT_INFORMATION_VALID_FLAG 0x80000000 +#define VMENTRY_INTERRUPT_INFORMATION_VALID_MASK 0x01 +#define VMENTRY_INTERRUPT_INFORMATION_VALID(_) (((_) >> 31) & 0x01) + }; + + uint32_t flags; +} vmentry_interrupt_information; + +/** + * @brief VM entry can be configured to conclude by delivering an event through the IDT (after all guest state and MSRs + * have been loaded). This process is called event injection and is controlled by these VM-entry control fields + * + * @see Vol3A[24.9.2(Information for VM Exits Due to Vectored Events)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bits 7:0] Vector of interrupt or exception. + */ + uint32_t vector : 8; +#define VMEXIT_INTERRUPT_INFORMATION_VECTOR_BIT 0 +#define VMEXIT_INTERRUPT_INFORMATION_VECTOR_FLAG 0xFF +#define VMEXIT_INTERRUPT_INFORMATION_VECTOR_MASK 0xFF +#define VMEXIT_INTERRUPT_INFORMATION_VECTOR(_) (((_) >> 0) & 0xFF) + + /** + * [Bits 10:8] Interruption type. + */ + uint32_t interruption_type : 3; +#define VMEXIT_INTERRUPT_INFORMATION_INTERRUPTION_TYPE_BIT 8 +#define VMEXIT_INTERRUPT_INFORMATION_INTERRUPTION_TYPE_FLAG 0x700 +#define VMEXIT_INTERRUPT_INFORMATION_INTERRUPTION_TYPE_MASK 0x07 +#define VMEXIT_INTERRUPT_INFORMATION_INTERRUPTION_TYPE(_) (((_) >> 8) & 0x07) + + /** + * [Bit 11] Deliver error code (0 = do not deliver; 1 = deliver). + */ + uint32_t error_code_valid : 1; +#define VMEXIT_INTERRUPT_INFORMATION_ERROR_CODE_VALID_BIT 11 +#define VMEXIT_INTERRUPT_INFORMATION_ERROR_CODE_VALID_FLAG 0x800 +#define VMEXIT_INTERRUPT_INFORMATION_ERROR_CODE_VALID_MASK 0x01 +#define VMEXIT_INTERRUPT_INFORMATION_ERROR_CODE_VALID(_) (((_) >> 11) & 0x01) + + /** + * [Bit 12] NMI unblocking due to IRET. + */ + uint32_t nmi_unblocking : 1; +#define VMEXIT_INTERRUPT_INFORMATION_NMI_UNBLOCKING_BIT 12 +#define VMEXIT_INTERRUPT_INFORMATION_NMI_UNBLOCKING_FLAG 0x1000 +#define VMEXIT_INTERRUPT_INFORMATION_NMI_UNBLOCKING_MASK 0x01 +#define VMEXIT_INTERRUPT_INFORMATION_NMI_UNBLOCKING(_) (((_) >> 12) & 0x01) + uint32_t reserved1 : 18; + + /** + * [Bit 31] Valid. + */ + uint32_t valid : 1; +#define VMEXIT_INTERRUPT_INFORMATION_VALID_BIT 31 +#define VMEXIT_INTERRUPT_INFORMATION_VALID_FLAG 0x80000000 +#define VMEXIT_INTERRUPT_INFORMATION_VALID_MASK 0x01 +#define VMEXIT_INTERRUPT_INFORMATION_VALID(_) (((_) >> 31) & 0x01) + }; + + uint32_t flags; +} vmexit_interrupt_information; + +/** + * @} + */ + + /** + * @defgroup apic \ + * Advanced Programmable Interrupt Controller (APIC) + * + * Software interacts with the local APIC by reading and writing its registers. APIC registers are memory-mapped to a + * 4-KByte region of the processor's physical address space with an initial starting address of FEE00000H. For correct APIC + * operation, this address space must be mapped to an area of memory that has been designated as strong uncacheable (UC). + * + * @remarks Registers are 32 bits, 64 bits, or 256 bits in width; all are aligned on 128-bit boundaries. All 32-bit + * registers should be accessed using 128-bit aligned 32-bit loads or stores. Some processors may support loads and stores + * of less than 32 bits to some of the APIC registers. This is model specific behavior and is not guaranteed to work on all + * processors. Any FP/MMX/SSE access to an APIC register, or any access that touches bytes 4 through 15 of an APIC register + * may cause undefined behavior and must not be executed. This undefined behavior could include hangs, incorrect results or + * unexpected exceptions, including machine checks, and may vary between implementations. Wider registers (64-bit or + * 256-bit) must be accessed using multiple 32-bit loads or stores, with all accesses being 128-bit aligned. + * @see Vol3A[10.4.1(The Local APIC Block Diagram)] (reference) + * @{ + */ + /** + * Local APIC Base Address. + * + * @remarks Reserved. + */ +#define APIC_BASE_ADDRESS 0xFEE00000 + + /** + * Local APIC ID Register. + */ +#define APIC_ID 0x00000020 + + /** + * Local APIC Version Register. + */ +#define APIC_VERSION 0x00000030 + + /** + * Task Priority Register (TPR). + */ +#define APIC_TASK_PRIORITY 0x00000080 + + /** + * Arbitration Priority Register (APR). + */ +#define APIC_ARBITRATION_PRIORITY 0x00000090 + + /** + * Processor Priority Register (PPR). + */ +#define APIC_PROCESSOR_PRIORITY 0x000000A0 + + /** + * EOI Register. + */ +#define APIC_EOI 0x000000B0 + + /** + * Remote Read Register (RRD). + */ +#define APIC_REMOTE_READ 0x000000C0 + + /** + * Logical Destination Register. + */ +#define APIC_LOGICAL_DESTINATION 0x000000D0 + + /** + * Destination Format Register. + * + * @see Vol3A[10.6.2.2(Logical Destination Mode)] + */ +#define APIC_DESTINATION_FORMAT 0x000000E0 + + /** + * Spurious Interrupt Vector Register. + * + * @see Vol3A[10.9(SPURIOUS INTERRUPT)] + */ +#define APIC_SPURIOUS_INTERRUPT_VECTOR 0x000000F0 + + /** + * In-Service Register (ISR); bits 31:0. + */ +#define APIC_IN_SERVICE_BITS_31_0 0x00000100 + + /** + * In-Service Register (ISR); bits 63:32. + */ +#define APIC_IN_SERVICE_BITS_63_32 0x00000110 + + /** + * In-Service Register (ISR); bits 95:64. + */ +#define APIC_IN_SERVICE_BITS_95_64 0x00000120 + + /** + * In-Service Register (ISR); bits 127:96. + */ +#define APIC_IN_SERVICE_BITS_127_96 0x00000130 + + /** + * In-Service Register (ISR); bits 159:128. + */ +#define APIC_IN_SERVICE_BITS_159_128 0x00000140 + + /** + * In-Service Register (ISR); bits 191:160. + */ +#define APIC_IN_SERVICE_BITS_191_160 0x00000150 + + /** + * In-Service Register (ISR); bits 223:192. + */ +#define APIC_IN_SERVICE_BITS_223_192 0x00000160 + + /** + * In-Service Register (ISR); bits 255:224. + */ +#define APIC_IN_SERVICE_BITS_255_224 0x00000170 + + /** + * Trigger Mode Register (TMR); bits 31:0. + */ +#define APIC_TRIGGER_MODE_BITS_31_0 0x00000180 + + /** + * Trigger Mode Register (TMR); bits 63:32. + */ +#define APIC_TRIGGER_MODE_BITS_63_32 0x00000190 + + /** + * Trigger Mode Register (TMR); bits 95:64. + */ +#define APIC_TRIGGER_MODE_BITS_95_64 0x000001A0 + + /** + * Trigger Mode Register (TMR); bits 127:96. + */ +#define APIC_TRIGGER_MODE_BITS_127_96 0x000001B0 + + /** + * Trigger Mode Register (TMR); bits 159:128. + */ +#define APIC_TRIGGER_MODE_BITS_159_128 0x000001C0 + + /** + * Trigger Mode Register (TMR); bits 191:160. + */ +#define APIC_TRIGGER_MODE_BITS_191_160 0x000001D0 + + /** + * Trigger Mode Register (TMR); bits 223:192. + */ +#define APIC_TRIGGER_MODE_BITS_223_192 0x000001E0 + + /** + * Trigger Mode Register (TMR); bits 255:224. + */ +#define APIC_TRIGGER_MODE_BITS_255_224 0x000001F0 + + /** + * Interrupt Request Register (IRR); bits 31:0. + */ +#define APIC_INTERRUPT_REQUEST_BITS_31_0 0x00000200 + + /** + * Interrupt Request Register (IRR); bits 63:32. + */ +#define APIC_INTERRUPT_REQUEST_BITS_63_32 0x00000210 + + /** + * Interrupt Request Register (IRR); bits 95:64. + */ +#define APIC_INTERRUPT_REQUEST_BITS_95_64 0x00000220 + + /** + * Interrupt Request Register (IRR); bits 127:96. + */ +#define APIC_INTERRUPT_REQUEST_BITS_127_96 0x00000230 + + /** + * Interrupt Request Register (IRR); bits 159:128. + */ +#define APIC_INTERRUPT_REQUEST_BITS_159_128 0x00000240 + + /** + * Interrupt Request Register (IRR); bits 191:160. + */ +#define APIC_INTERRUPT_REQUEST_BITS_191_160 0x00000250 + + /** + * Interrupt Request Register (IRR); bits 223:192. + */ +#define APIC_INTERRUPT_REQUEST_BITS_223_192 0x00000260 + + /** + * Interrupt Request Register (IRR); bits 255:224. + */ +#define APIC_INTERRUPT_REQUEST_BITS_255_224 0x00000270 + + /** + * Error Status Register. + */ +#define APIC_ERROR_STATUS 0x00000280 + + /** + * LVT Corrected Machine Check Interrupt (CMCI) Register. + */ +#define APIC_LVT_CORRECTED_MACHINE_CHECK_INTERRUPT 0x000002F0 + + /** + * Interrupt Command Register (ICR); bits 0-31. + */ +#define APIC_INTERRUPT_COMMAND_BITS_0_31 0x00000300 + + /** + * Interrupt Command Register (ICR); bits 32-63. + */ +#define APIC_INTERRUPT_COMMAND_BITS_32_63 0x00000310 + + /** + * LVT Timer Register. + */ +#define APIC_LVT_TIMER 0x00000320 + + /** + * LVT Thermal Sensor Register. + */ +#define APIC_LVT_THERMAL_SENSOR 0x00000330 + + /** + * LVT Performance Monitoring Counters Register. + */ +#define APIC_LVT_PERFORMANCE_MONITORING_COUNTERS 0x00000340 + + /** + * LVT LINT0 Register. + */ +#define APIC_LVT_LINT0 0x00000350 + + /** + * LVT LINT1 Register. + */ +#define APIC_LVT_LINT1 0x00000360 + + /** + * LVT Error Register. + */ +#define APIC_LVT_ERROR 0x00000370 + + /** + * Initial Count Register (for Timer). + */ +#define APIC_INITIAL_COUNT 0x00000380 + + /** + * Current Count Register (for Timer). + */ +#define APIC_CURRENT_COUNT 0x00000390 + + /** + * Divide Configuration Register (for Timer). + */ +#define APIC_DIVIDE_CONFIGURATION 0x000003E0 + /** + * @} + */ + + /** + * The 32-bit EFLAGS register contains a group of status flags, a control flag, and a group of system flags. The status + * flags (bits 0, 2, 4, 6, 7, and 11) of the EFLAGS register indicate the results of arithmetic instructions, such as the + * ADD, SUB, MUL, and DIV instructions. + * The system flags and IOPL field in the EFLAGS register control operating-system or executive operations. + * + * @see Vol1[3.4.3(EFLAGS)] (reference) + */ +typedef union +{ + struct + { + /** + * @brief Carry flag + * + * [Bit 0] Set if an arithmetic operation generates a carry or a borrow out of the mostsignificant bit of the result; + * cleared otherwise. This flag indicates an overflow condition for unsigned-integer arithmetic. It is also used in + * multiple-precision arithmetic. + */ + uint32_t carry_flag : 1; +#define EFLAGS_CARRY_FLAG_BIT 0 +#define EFLAGS_CARRY_FLAG_FLAG 0x01 +#define EFLAGS_CARRY_FLAG_MASK 0x01 +#define EFLAGS_CARRY_FLAG(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Reserved - always 1 + */ + uint32_t read_as_1 : 1; +#define EFLAGS_READ_AS_1_BIT 1 +#define EFLAGS_READ_AS_1_FLAG 0x02 +#define EFLAGS_READ_AS_1_MASK 0x01 +#define EFLAGS_READ_AS_1(_) (((_) >> 1) & 0x01) + + /** + * @brief Parity flag + * + * [Bit 2] Set if the least-significant byte of the result contains an even number of 1 bits; cleared otherwise. + */ + uint32_t parity_flag : 1; +#define EFLAGS_PARITY_FLAG_BIT 2 +#define EFLAGS_PARITY_FLAG_FLAG 0x04 +#define EFLAGS_PARITY_FLAG_MASK 0x01 +#define EFLAGS_PARITY_FLAG(_) (((_) >> 2) & 0x01) + uint32_t reserved1 : 1; + + /** + * @brief Auxiliary Carry flag + * + * [Bit 4] Set if an arithmetic operation generates a carry or a borrow out of bit 3 of the result; cleared otherwise. This + * flag is used in binary-coded decimal (BCD) arithmetic. + */ + uint32_t auxiliary_carry_flag : 1; +#define EFLAGS_AUXILIARY_CARRY_FLAG_BIT 4 +#define EFLAGS_AUXILIARY_CARRY_FLAG_FLAG 0x10 +#define EFLAGS_AUXILIARY_CARRY_FLAG_MASK 0x01 +#define EFLAGS_AUXILIARY_CARRY_FLAG(_) (((_) >> 4) & 0x01) + uint32_t reserved2 : 1; + + /** + * @brief Zero flag + * + * [Bit 6] Set if the result is zero; cleared otherwise. + */ + uint32_t zero_flag : 1; +#define EFLAGS_ZERO_FLAG_BIT 6 +#define EFLAGS_ZERO_FLAG_FLAG 0x40 +#define EFLAGS_ZERO_FLAG_MASK 0x01 +#define EFLAGS_ZERO_FLAG(_) (((_) >> 6) & 0x01) + + /** + * @brief Sign flag + * + * [Bit 7] Set equal to the most-significant bit of the result, which is the sign bit of a signed integer. (0 indicates a + * positive value and 1 indicates a negative value.) + */ + uint32_t sign_flag : 1; +#define EFLAGS_SIGN_FLAG_BIT 7 +#define EFLAGS_SIGN_FLAG_FLAG 0x80 +#define EFLAGS_SIGN_FLAG_MASK 0x01 +#define EFLAGS_SIGN_FLAG(_) (((_) >> 7) & 0x01) + + /** + * @brief Trap flag + * + * [Bit 8] Set to enable single-step mode for debugging; clear to disable single-step mode. + */ + uint32_t trap_flag : 1; +#define EFLAGS_TRAP_FLAG_BIT 8 +#define EFLAGS_TRAP_FLAG_FLAG 0x100 +#define EFLAGS_TRAP_FLAG_MASK 0x01 +#define EFLAGS_TRAP_FLAG(_) (((_) >> 8) & 0x01) + + /** + * @brief Interrupt enable flag + * + * [Bit 9] Controls the response of the processor to maskable interrupt requests. Set to respond to maskable interrupts; + * cleared to inhibit maskable interrupts. + */ + uint32_t interrupt_enable_flag : 1; +#define EFLAGS_INTERRUPT_ENABLE_FLAG_BIT 9 +#define EFLAGS_INTERRUPT_ENABLE_FLAG_FLAG 0x200 +#define EFLAGS_INTERRUPT_ENABLE_FLAG_MASK 0x01 +#define EFLAGS_INTERRUPT_ENABLE_FLAG(_) (((_) >> 9) & 0x01) + + /** + * @brief Direction flag + * + * [Bit 10] Controls string instructions (MOVS, CMPS, SCAS, LODS, and STOS). Setting the DF flag causes the string + * instructions to auto-decrement (to process strings from high addresses to low addresses). Clearing the DF flag causes + * the string instructions to auto-increment (process strings from low addresses to high addresses). + */ + uint32_t direction_flag : 1; +#define EFLAGS_DIRECTION_FLAG_BIT 10 +#define EFLAGS_DIRECTION_FLAG_FLAG 0x400 +#define EFLAGS_DIRECTION_FLAG_MASK 0x01 +#define EFLAGS_DIRECTION_FLAG(_) (((_) >> 10) & 0x01) + + /** + * @brief Overflow flag + * + * [Bit 11] Set if the integer result is too large a positive number or too small a negative number (excluding the + * sign-bit) to fit in the destination operand; cleared otherwise. This flag indicates an overflow condition for + * signed-integer (two's complement) arithmetic. + */ + uint32_t overflow_flag : 1; +#define EFLAGS_OVERFLOW_FLAG_BIT 11 +#define EFLAGS_OVERFLOW_FLAG_FLAG 0x800 +#define EFLAGS_OVERFLOW_FLAG_MASK 0x01 +#define EFLAGS_OVERFLOW_FLAG(_) (((_) >> 11) & 0x01) + + /** + * @brief I/O privilege level field + * + * [Bits 13:12] Indicates the I/O privilege level of the currently running program or task. The current privilege level + * (CPL) of the currently running program or task must be less than or equal to the I/O privilege level to access the I/O + * address space. The POPF and IRET instructions can modify this field only when operating at a CPL of 0. + */ + uint32_t io_privilege_level : 2; +#define EFLAGS_IO_PRIVILEGE_LEVEL_BIT 12 +#define EFLAGS_IO_PRIVILEGE_LEVEL_FLAG 0x3000 +#define EFLAGS_IO_PRIVILEGE_LEVEL_MASK 0x03 +#define EFLAGS_IO_PRIVILEGE_LEVEL(_) (((_) >> 12) & 0x03) + + /** + * @brief Nested task flag + * + * [Bit 14] Controls the chaining of interrupted and called tasks. Set when the current task is linked to the previously + * executed task; cleared when the current task is not linked to another task. + */ + uint32_t nested_task_flag : 1; +#define EFLAGS_NESTED_TASK_FLAG_BIT 14 +#define EFLAGS_NESTED_TASK_FLAG_FLAG 0x4000 +#define EFLAGS_NESTED_TASK_FLAG_MASK 0x01 +#define EFLAGS_NESTED_TASK_FLAG(_) (((_) >> 14) & 0x01) + uint32_t reserved3 : 1; + + /** + * @brief Resume flag + * + * [Bit 16] Controls the processor's response to debug exceptions. + */ + uint32_t resume_flag : 1; +#define EFLAGS_RESUME_FLAG_BIT 16 +#define EFLAGS_RESUME_FLAG_FLAG 0x10000 +#define EFLAGS_RESUME_FLAG_MASK 0x01 +#define EFLAGS_RESUME_FLAG(_) (((_) >> 16) & 0x01) + + /** + * @brief Virtual-8086 mode flag + * + * [Bit 17] Set to enable virtual-8086 mode; clear to return to protected mode without virtual-8086 mode semantics. + */ + uint32_t virtual_8086_mode_flag : 1; +#define EFLAGS_VIRTUAL_8086_MODE_FLAG_BIT 17 +#define EFLAGS_VIRTUAL_8086_MODE_FLAG_FLAG 0x20000 +#define EFLAGS_VIRTUAL_8086_MODE_FLAG_MASK 0x01 +#define EFLAGS_VIRTUAL_8086_MODE_FLAG(_) (((_) >> 17) & 0x01) + + /** + * @brief Alignment check (or access control) flag + * + * [Bit 18] If the AM bit is set in the CR0 register, alignment checking of user-mode data accesses is enabled if and only + * if this flag is 1. If the SMAP bit is set in the CR4 register, explicit supervisor-mode data accesses to user-mode pages + * are allowed if and only if this bit is 1. + * + * @see Vol3A[4.6(ACCESS RIGHTS)] + */ + uint32_t alignment_check_flag : 1; +#define EFLAGS_ALIGNMENT_CHECK_FLAG_BIT 18 +#define EFLAGS_ALIGNMENT_CHECK_FLAG_FLAG 0x40000 +#define EFLAGS_ALIGNMENT_CHECK_FLAG_MASK 0x01 +#define EFLAGS_ALIGNMENT_CHECK_FLAG(_) (((_) >> 18) & 0x01) + + /** + * @brief Virtual interrupt flag + * + * [Bit 19] Virtual image of the IF flag. Used in conjunction with the VIP flag. (To use this flag and the VIP flag the + * virtual mode extensions are enabled by setting the VME flag in control register CR4.) + */ + uint32_t virtual_interrupt_flag : 1; +#define EFLAGS_VIRTUAL_INTERRUPT_FLAG_BIT 19 +#define EFLAGS_VIRTUAL_INTERRUPT_FLAG_FLAG 0x80000 +#define EFLAGS_VIRTUAL_INTERRUPT_FLAG_MASK 0x01 +#define EFLAGS_VIRTUAL_INTERRUPT_FLAG(_) (((_) >> 19) & 0x01) + + /** + * @brief Virtual interrupt pending flag + * + * [Bit 20] Set to indicate that an interrupt is pending; clear when no interrupt is pending. (Software sets and clears + * this flag; the processor only reads it.) Used in conjunction with the VIF flag. + */ + uint32_t virtual_interrupt_pending_flag : 1; +#define EFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG_BIT 20 +#define EFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG_FLAG 0x100000 +#define EFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG_MASK 0x01 +#define EFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG(_) (((_) >> 20) & 0x01) + + /** + * @brief Identification flag + * + * [Bit 21] The ability of a program to set or clear this flag indicates support for the CPUID instruction. + */ + uint32_t identification_flag : 1; +#define EFLAGS_IDENTIFICATION_FLAG_BIT 21 +#define EFLAGS_IDENTIFICATION_FLAG_FLAG 0x200000 +#define EFLAGS_IDENTIFICATION_FLAG_MASK 0x01 +#define EFLAGS_IDENTIFICATION_FLAG(_) (((_) >> 21) & 0x01) + uint32_t reserved4 : 10; + }; + + uint32_t flags; +} eflags; + +/** + * The 64-bit RFLAGS register contains a group of status flags, a control flag, and a group of system flags in 64-bit mode. + * The upper 32 bits of RFLAGS register is reserved. The lower 32 bits of RFLAGS is the same as EFLAGS. + * + * @see EFLAGS + * @see Vol1[3.4.3.4(RFLAGS Register in 64-Bit Mode)] (reference) + */ +typedef union +{ + struct + { + /** + * @brief Carry flag + * + * [Bit 0] See the description in EFLAGS. + */ + uint64_t carry_flag : 1; +#define RFLAGS_CARRY_FLAG_BIT 0 +#define RFLAGS_CARRY_FLAG_FLAG 0x01 +#define RFLAGS_CARRY_FLAG_MASK 0x01 +#define RFLAGS_CARRY_FLAG(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] Reserved - always 1 + */ + uint64_t read_as_1 : 1; +#define RFLAGS_READ_AS_1_BIT 1 +#define RFLAGS_READ_AS_1_FLAG 0x02 +#define RFLAGS_READ_AS_1_MASK 0x01 +#define RFLAGS_READ_AS_1(_) (((_) >> 1) & 0x01) + + /** + * @brief Parity flag + * + * [Bit 2] See the description in EFLAGS. + */ + uint64_t parity_flag : 1; +#define RFLAGS_PARITY_FLAG_BIT 2 +#define RFLAGS_PARITY_FLAG_FLAG 0x04 +#define RFLAGS_PARITY_FLAG_MASK 0x01 +#define RFLAGS_PARITY_FLAG(_) (((_) >> 2) & 0x01) + uint64_t reserved1 : 1; + + /** + * @brief Auxiliary Carry flag + * + * [Bit 4] See the description in EFLAGS. + */ + uint64_t auxiliary_carry_flag : 1; +#define RFLAGS_AUXILIARY_CARRY_FLAG_BIT 4 +#define RFLAGS_AUXILIARY_CARRY_FLAG_FLAG 0x10 +#define RFLAGS_AUXILIARY_CARRY_FLAG_MASK 0x01 +#define RFLAGS_AUXILIARY_CARRY_FLAG(_) (((_) >> 4) & 0x01) + uint64_t reserved2 : 1; + + /** + * @brief Zero flag + * + * [Bit 6] See the description in EFLAGS. + */ + uint64_t zero_flag : 1; +#define RFLAGS_ZERO_FLAG_BIT 6 +#define RFLAGS_ZERO_FLAG_FLAG 0x40 +#define RFLAGS_ZERO_FLAG_MASK 0x01 +#define RFLAGS_ZERO_FLAG(_) (((_) >> 6) & 0x01) + + /** + * @brief Sign flag + * + * [Bit 7] See the description in EFLAGS. + */ + uint64_t sign_flag : 1; +#define RFLAGS_SIGN_FLAG_BIT 7 +#define RFLAGS_SIGN_FLAG_FLAG 0x80 +#define RFLAGS_SIGN_FLAG_MASK 0x01 +#define RFLAGS_SIGN_FLAG(_) (((_) >> 7) & 0x01) + + /** + * @brief Trap flag + * + * [Bit 8] See the description in EFLAGS. + */ + uint64_t trap_flag : 1; +#define RFLAGS_TRAP_FLAG_BIT 8 +#define RFLAGS_TRAP_FLAG_FLAG 0x100 +#define RFLAGS_TRAP_FLAG_MASK 0x01 +#define RFLAGS_TRAP_FLAG(_) (((_) >> 8) & 0x01) + + /** + * @brief Interrupt enable flag + * + * [Bit 9] See the description in EFLAGS. + */ + uint64_t interrupt_enable_flag : 1; +#define RFLAGS_INTERRUPT_ENABLE_FLAG_BIT 9 +#define RFLAGS_INTERRUPT_ENABLE_FLAG_FLAG 0x200 +#define RFLAGS_INTERRUPT_ENABLE_FLAG_MASK 0x01 +#define RFLAGS_INTERRUPT_ENABLE_FLAG(_) (((_) >> 9) & 0x01) + + /** + * @brief Direction flag + * + * [Bit 10] See the description in EFLAGS. + */ + uint64_t direction_flag : 1; +#define RFLAGS_DIRECTION_FLAG_BIT 10 +#define RFLAGS_DIRECTION_FLAG_FLAG 0x400 +#define RFLAGS_DIRECTION_FLAG_MASK 0x01 +#define RFLAGS_DIRECTION_FLAG(_) (((_) >> 10) & 0x01) + + /** + * @brief Overflow flag + * + * [Bit 11] See the description in EFLAGS. + */ + uint64_t overflow_flag : 1; +#define RFLAGS_OVERFLOW_FLAG_BIT 11 +#define RFLAGS_OVERFLOW_FLAG_FLAG 0x800 +#define RFLAGS_OVERFLOW_FLAG_MASK 0x01 +#define RFLAGS_OVERFLOW_FLAG(_) (((_) >> 11) & 0x01) + + /** + * @brief I/O privilege level field + * + * [Bits 13:12] See the description in EFLAGS. + */ + uint64_t io_privilege_level : 2; +#define RFLAGS_IO_PRIVILEGE_LEVEL_BIT 12 +#define RFLAGS_IO_PRIVILEGE_LEVEL_FLAG 0x3000 +#define RFLAGS_IO_PRIVILEGE_LEVEL_MASK 0x03 +#define RFLAGS_IO_PRIVILEGE_LEVEL(_) (((_) >> 12) & 0x03) + + /** + * @brief Nested task flag + * + * [Bit 14] See the description in EFLAGS. + */ + uint64_t nested_task_flag : 1; +#define RFLAGS_NESTED_TASK_FLAG_BIT 14 +#define RFLAGS_NESTED_TASK_FLAG_FLAG 0x4000 +#define RFLAGS_NESTED_TASK_FLAG_MASK 0x01 +#define RFLAGS_NESTED_TASK_FLAG(_) (((_) >> 14) & 0x01) + uint64_t reserved3 : 1; + + /** + * @brief Resume flag + * + * [Bit 16] See the description in EFLAGS. + */ + uint64_t resume_flag : 1; +#define RFLAGS_RESUME_FLAG_BIT 16 +#define RFLAGS_RESUME_FLAG_FLAG 0x10000 +#define RFLAGS_RESUME_FLAG_MASK 0x01 +#define RFLAGS_RESUME_FLAG(_) (((_) >> 16) & 0x01) + + /** + * @brief Virtual-8086 mode flag + * + * [Bit 17] See the description in EFLAGS. + */ + uint64_t virtual_8086_mode_flag : 1; +#define RFLAGS_VIRTUAL_8086_MODE_FLAG_BIT 17 +#define RFLAGS_VIRTUAL_8086_MODE_FLAG_FLAG 0x20000 +#define RFLAGS_VIRTUAL_8086_MODE_FLAG_MASK 0x01 +#define RFLAGS_VIRTUAL_8086_MODE_FLAG(_) (((_) >> 17) & 0x01) + + /** + * @brief Alignment check (or access control) flag + * + * [Bit 18] See the description in EFLAGS. + * + * @see Vol3A[4.6(ACCESS RIGHTS)] + */ + uint64_t alignment_check_flag : 1; +#define RFLAGS_ALIGNMENT_CHECK_FLAG_BIT 18 +#define RFLAGS_ALIGNMENT_CHECK_FLAG_FLAG 0x40000 +#define RFLAGS_ALIGNMENT_CHECK_FLAG_MASK 0x01 +#define RFLAGS_ALIGNMENT_CHECK_FLAG(_) (((_) >> 18) & 0x01) + + /** + * @brief Virtual interrupt flag + * + * [Bit 19] See the description in EFLAGS. + */ + uint64_t virtual_interrupt_flag : 1; +#define RFLAGS_VIRTUAL_INTERRUPT_FLAG_BIT 19 +#define RFLAGS_VIRTUAL_INTERRUPT_FLAG_FLAG 0x80000 +#define RFLAGS_VIRTUAL_INTERRUPT_FLAG_MASK 0x01 +#define RFLAGS_VIRTUAL_INTERRUPT_FLAG(_) (((_) >> 19) & 0x01) + + /** + * @brief Virtual interrupt pending flag + * + * [Bit 20] See the description in EFLAGS. + */ + uint64_t virtual_interrupt_pending_flag : 1; +#define RFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG_BIT 20 +#define RFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG_FLAG 0x100000 +#define RFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG_MASK 0x01 +#define RFLAGS_VIRTUAL_INTERRUPT_PENDING_FLAG(_) (((_) >> 20) & 0x01) + + /** + * @brief Identification flag + * + * [Bit 21] See the description in EFLAGS. + */ + uint64_t identification_flag : 1; +#define RFLAGS_IDENTIFICATION_FLAG_BIT 21 +#define RFLAGS_IDENTIFICATION_FLAG_FLAG 0x200000 +#define RFLAGS_IDENTIFICATION_FLAG_MASK 0x01 +#define RFLAGS_IDENTIFICATION_FLAG(_) (((_) >> 21) & 0x01) + uint64_t reserved4 : 42; + }; + + uint64_t flags; +} rflags; + +/** + * @defgroup exceptions \ + * Exceptions + * @{ + */ + /** + * @brief Exceptions that can occur when the instruction is executed in protected mode. + * Each exception is given a mnemonic that consists of a pound sign (\#) followed by two letters and an optional error code + * in parentheses. For example, \#GP(0) denotes a general protection exception with an error code of 0 + * + * @see Vol2A[3.1.1.13(Protected Mode Exceptions Section)] (reference) + * @see Vol3A[6.3.1(External Interrupts)] (reference) + */ +typedef enum +{ + /** + * #DE - Divide Error. + * Source: DIV and IDIV instructions. + * Error Code: No. + */ + divide_error = 0x00000000, + + /** + * #DB - Debug. + * Source: Any code or data reference. + * Error Code: No. + */ + debug = 0x00000001, + + /** + * Nonmaskable Interrupt. + * Source: Generated externally by asserting the processor's NMI pin or + * through an NMI request set by the I/O APIC to the local APIC. + * Error Code: No. + */ + nmi = 0x00000002, + + /** + * #BP - Breakpoint. + * Source: INT3 instruction. + * Error Code: No. + */ + breakpoint = 0x00000003, + + /** + * #OF - Overflow. + * Source: INTO instruction. + * Error Code: No. + */ + overflow = 0x00000004, + + /** + * #BR - BOUND Range Exceeded. + * Source: BOUND instruction. + * Error Code: No. + */ + bound_range_exceeded = 0x00000005, + + /** + * #UD - Invalid Opcode (Undefined Opcode). + * Source: UD instruction or reserved opcode. + * Error Code: No. + */ + invalid_opcode = 0x00000006, + + /** + * #NM - Device Not Available (No Math Coprocessor). + * Source: Floating-point or WAIT/FWAIT instruction. + * Error Code: No. + */ + device_not_available = 0x00000007, + + /** + * #DF - Double Fault. + * Source: Any instruction that can generate an exception, an NMI, or an INTR. + * Error Code: Yes (zero). + */ + double_fault = 0x00000008, + + /** + * #\## - Coprocessor Segment Overrun (reserved). + * Source: Floating-point instruction. + * Error Code: No. + * + * @note Processors after the Intel386 processor do not generate this exception. + */ + coprocessor_segment_overrun = 0x00000009, + + /** + * #TS - Invalid TSS. + * Source: Task switch or TSS access. + * Error Code: Yes. + */ + invalid_tss = 0x0000000A, + + /** + * #NP - Segment Not Present. + * Source: Loading segment registers or accessing system segments. + * Error Code: Yes. + */ + segment_not_present = 0x0000000B, + + /** + * #SS - Stack Segment Fault. + * Source: Stack operations and SS register loads. + * Error Code: Yes. + */ + stack_segment_fault = 0x0000000C, + + /** + * #GP - General Protection. + * Source: Any memory reference and other protection checks. + * Error Code: Yes. + */ + general_protection = 0x0000000D, + + /** + * #PF - Page Fault. + * Source: Any memory reference. + * Error Code: Yes. + */ + page_fault = 0x0000000E, + + /** + * #MF - Floating-Point Error (Math Fault). + * Source: Floating-point or WAIT/FWAIT instruction. + * Error Code: No. + */ + x87_floating_point_error = 0x00000010, + + /** + * #AC - Alignment Check. + * Source: Any data reference in memory. + * Error Code: Yes. + */ + alignment_check = 0x00000011, + + /** + * #MC - Machine Check. + * Source: Model dependent machine check errors. + * Error Code: No. + */ + machine_check = 0x00000012, + + /** + * #XM - SIMD Floating-Point Numeric Error. + * Source: SSE/SSE2/SSE3 floating-point instructions. + * Error Code: No. + */ + simd_floating_point_error = 0x00000013, + + /** + * #VE - Virtualization Exception. + * Source: EPT violations. + * Error Code: No. + */ + virtualization_exception = 0x00000014, +} exception_vector; + +/** + * @brief When an exception condition is related to a specific segment selector or IDT vector, the processor pushes an + * error code onto the stack of the exception handler (whether it is a procedure or task). The error code resembles a + * segment selector; however, instead of a TI flag and RPL field, the error code contains 3 different flags + * + * @see Vol3A[6.13(ERROR CODE)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bit 0] When set, indicates that the exception occurred during delivery of an event external to the program, such as an + * interrupt or an earlier exception. The bit is cleared if the exception occurred during delivery of a software interrupt + * (INT n, INT3, or INTO). + */ + uint32_t external_event : 1; +#define EXCEPTION_ERROR_CODE_EXTERNAL_EVENT_BIT 0 +#define EXCEPTION_ERROR_CODE_EXTERNAL_EVENT_FLAG 0x01 +#define EXCEPTION_ERROR_CODE_EXTERNAL_EVENT_MASK 0x01 +#define EXCEPTION_ERROR_CODE_EXTERNAL_EVENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] When set, indicates that the index portion of the error code refers to a gate descriptor in the IDT; when clear, + * indicates that the index refers to a descriptor in the GDT or the current LDT. + */ + uint32_t descriptor_location : 1; +#define EXCEPTION_ERROR_CODE_DESCRIPTOR_LOCATION_BIT 1 +#define EXCEPTION_ERROR_CODE_DESCRIPTOR_LOCATION_FLAG 0x02 +#define EXCEPTION_ERROR_CODE_DESCRIPTOR_LOCATION_MASK 0x01 +#define EXCEPTION_ERROR_CODE_DESCRIPTOR_LOCATION(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] Only used when the IDT flag is clear. When set, the TI flag indicates that the index portion of the error code + * refers to a segment or gate descriptor in the LDT; when clear, it indicates that the index refers to a descriptor in the + * current GDT. + */ + uint32_t gdt_ldt : 1; +#define EXCEPTION_ERROR_CODE_GDT_LDT_BIT 2 +#define EXCEPTION_ERROR_CODE_GDT_LDT_FLAG 0x04 +#define EXCEPTION_ERROR_CODE_GDT_LDT_MASK 0x01 +#define EXCEPTION_ERROR_CODE_GDT_LDT(_) (((_) >> 2) & 0x01) + + /** + * [Bits 15:3] The segment selector index field provides an index into the IDT, GDT, or current LDT to the segment or gate + * selector being referenced by the error code. In some cases the error code is null (all bits are clear except possibly + * EXT). A null error code indicates that the error was not caused by a reference to a specific segment or that a null + * segment selector was referenced in an operation. + * + * @note The format of the error code is different for page-fault exceptions (#PF). + */ + uint32_t index : 13; +#define EXCEPTION_ERROR_CODE_INDEX_BIT 3 +#define EXCEPTION_ERROR_CODE_INDEX_FLAG 0xFFF8 +#define EXCEPTION_ERROR_CODE_INDEX_MASK 0x1FFF +#define EXCEPTION_ERROR_CODE_INDEX(_) (((_) >> 3) & 0x1FFF) + uint32_t reserved1 : 16; + }; + + uint32_t flags; +} exception_error_code; + +/** + * @brief Page fault exception + * + * @see Vol3A[4.7(PAGE-FAULT EXCEPTIONS)] (reference) + */ +typedef union +{ + struct + { + /** + * [Bit 0] This flag is 0 if there is no translation for the linear address because the P flag was 0 in one of the + * pagingstructure entries used to translate that address. + */ + uint32_t present : 1; +#define PAGE_FAULT_EXCEPTION_PRESENT_BIT 0 +#define PAGE_FAULT_EXCEPTION_PRESENT_FLAG 0x01 +#define PAGE_FAULT_EXCEPTION_PRESENT_MASK 0x01 +#define PAGE_FAULT_EXCEPTION_PRESENT(_) (((_) >> 0) & 0x01) + + /** + * [Bit 1] If the access causing the page-fault exception was a write, this flag is 1; otherwise, it is 0. This flag + * describes the access causing the page-fault exception, not the access rights specified by paging. + */ + uint32_t write : 1; +#define PAGE_FAULT_EXCEPTION_WRITE_BIT 1 +#define PAGE_FAULT_EXCEPTION_WRITE_FLAG 0x02 +#define PAGE_FAULT_EXCEPTION_WRITE_MASK 0x01 +#define PAGE_FAULT_EXCEPTION_WRITE(_) (((_) >> 1) & 0x01) + + /** + * [Bit 2] If a user-mode access caused the page-fault exception, this flag is 1; it is 0 if a supervisor-mode access did + * so. This flag describes the access causing the page-fault exception, not the access rights specified by paging. + * + * @see Vol3A[4.6(ACCESS RIGHTS)] + */ + uint32_t user_mode_access : 1; +#define PAGE_FAULT_EXCEPTION_USER_MODE_ACCESS_BIT 2 +#define PAGE_FAULT_EXCEPTION_USER_MODE_ACCESS_FLAG 0x04 +#define PAGE_FAULT_EXCEPTION_USER_MODE_ACCESS_MASK 0x01 +#define PAGE_FAULT_EXCEPTION_USER_MODE_ACCESS(_) (((_) >> 2) & 0x01) + + /** + * [Bit 3] This flag is 1 if there is no translation for the linear address because a reserved bit was set in one of the + * pagingstructure entries used to translate that address. (Because reserved bits are not checked in a paging-structure + * entry whose P flag is 0, bit 3 of the error code can be set only if bit 0 is also set). Bits reserved in the + * paging-structure entries are reserved for future functionality. Software developers should be aware that such bits may + * be used in the future and that a paging-structure entry that causes a page-fault exception on one processor might not do + * so in the future. + */ + uint32_t reserved_bit_violation : 1; +#define PAGE_FAULT_EXCEPTION_RESERVED_BIT_VIOLATION_BIT 3 +#define PAGE_FAULT_EXCEPTION_RESERVED_BIT_VIOLATION_FLAG 0x08 +#define PAGE_FAULT_EXCEPTION_RESERVED_BIT_VIOLATION_MASK 0x01 +#define PAGE_FAULT_EXCEPTION_RESERVED_BIT_VIOLATION(_) (((_) >> 3) & 0x01) + + /** + * [Bit 4] This flag is 1 if (1) the access causing the page-fault exception was an instruction fetch; and (2) either (a) + * CR4.SMEP = 1; or (b) both (i) CR4.PAE = 1 (either PAE paging or 4-level paging is in use); and (ii) IA32_EFER.NXE = 1. + * Otherwise, the flag is 0. This flag describes the access causing the page-fault exception, not the access rights + * specified by paging. + */ + uint32_t execute : 1; +#define PAGE_FAULT_EXCEPTION_EXECUTE_BIT 4 +#define PAGE_FAULT_EXCEPTION_EXECUTE_FLAG 0x10 +#define PAGE_FAULT_EXCEPTION_EXECUTE_MASK 0x01 +#define PAGE_FAULT_EXCEPTION_EXECUTE(_) (((_) >> 4) & 0x01) + + /** + * [Bit 5] This flag is 1 if (1) IA32_EFER.LMA = CR4.PKE = 1; (2) the access causing the page-fault exception was a data + * access; (3) the linear address was a user-mode address with protection key i; and (5) the PKRU register is such that + * either (a) ADi = 1; or (b) the following all hold: (i) WDi = 1; (ii) the access is a write access; and (iii) either + * CR0.WP = 1 or the access causing the page-fault exception was a user-mode access. + * + * @see Vol3A[4.6.2(Protection Keys)] + */ + uint32_t protection_key_violation : 1; +#define PAGE_FAULT_EXCEPTION_PROTECTION_KEY_VIOLATION_BIT 5 +#define PAGE_FAULT_EXCEPTION_PROTECTION_KEY_VIOLATION_FLAG 0x20 +#define PAGE_FAULT_EXCEPTION_PROTECTION_KEY_VIOLATION_MASK 0x01 +#define PAGE_FAULT_EXCEPTION_PROTECTION_KEY_VIOLATION(_) (((_) >> 5) & 0x01) + uint32_t reserved1 : 9; + + /** + * [Bit 15] This flag is 1 if the exception is unrelated to paging and resulted from violation of SGX-specific + * access-control requirements. Because such a violation can occur only if there is no ordinary page fault, this flag is + * set only if the P flag (bit 0) is 1 and the RSVD flag (bit 3) and the PK flag (bit 5) are both 0. + */ + uint32_t sgx : 1; +#define PAGE_FAULT_EXCEPTION_SGX_BIT 15 +#define PAGE_FAULT_EXCEPTION_SGX_FLAG 0x8000 +#define PAGE_FAULT_EXCEPTION_SGX_MASK 0x01 +#define PAGE_FAULT_EXCEPTION_SGX(_) (((_) >> 15) & 0x01) + uint32_t reserved2 : 16; + }; + + uint32_t flags; +} page_fault_exception; + +/** + * @} + */ + + /** + * @defgroup memory_type \ + * Memory caching type + * + * The processor allows any area of system memory to be cached in the L1, L2, and L3 caches. In individual pages or regions + * of system memory, it allows the type of caching (also called memory type) to be specified. + * + * @see Vol3A[11.11(MEMORY TYPE RANGE REGISTERS (MTRRS))] + * @see Vol3A[11.5(CACHE CONTROL)] + * @see Vol3A[11.3(METHODS OF CACHING AVAILABLE)] (reference) + * @{ + */ + /** + * @brief Strong Uncacheable (UC) + * + * System memory locations are not cached. All reads and writes appear on the system bus and are executed in program order + * without reordering. No speculative memory accesses, pagetable walks, or prefetches of speculated branch targets are + * made. This type of cache-control is useful for memory-mapped I/O devices. When used with normal RAM, it greatly reduces + * processor performance. + */ +#define MEMORY_TYPE_UNCACHEABLE 0x00000000 + + /** + * @brief Write Combining (WC) + * + * System memory locations are not cached (as with uncacheable memory) and coherency is not enforced by the processor's bus + * coherency protocol. Speculative reads are allowed. Writes may be delayed and combined in the write combining buffer (WC + * buffer) to reduce memory accesses. If the WC buffer is partially filled, the writes may be delayed until the next + * occurrence of a serializing event; such as, an SFENCE or MFENCE instruction, CPUID execution, a read or write to + * uncached memory, an interrupt occurrence, or a LOCK instruction execution. This type of cache-control is appropriate for + * video frame buffers, where the order of writes is unimportant as long as the writes update memory so they can be seen on + * the graphics display. This memory type is available in the Pentium Pro and Pentium II processors by programming the + * MTRRs; or in processor families starting from the Pentium III processors by programming the MTRRs or by selecting it + * through the PAT. + * + * @see Vol3A[11.3.1(Buffering of Write Combining Memory Locations)] + */ +#define MEMORY_TYPE_WRITE_COMBINING 0x00000001 + + /** + * @brief Write-through (WT) + * + * Writes and reads to and from system memory are cached. Reads come from cache lines on cache hits; read misses cause + * cache fills. Speculative reads are allowed. All writes are written to a cache line (when possible) and through to system + * memory. When writing through to memory, invalid cache lines are never filled, and valid cache lines are either filled or + * invalidated. Write combining is allowed. This type of cache-control is appropriate for frame buffers or when there are + * devices on the system bus that access system memory, but do not perform snooping of memory accesses. It enforces + * coherency between caches in the processors and system memory. + */ +#define MEMORY_TYPE_WRITE_THROUGH 0x00000004 + + /** + * @brief Write protected (WP) + * + * Reads come from cache lines when possible, and read misses cause cache fills. Writes are propagated to the system bus + * and cause corresponding cache lines on all processors on the bus to be invalidated. Speculative reads are allowed. This + * memory type is available in processor families starting from the P6 family processors by programming the MTRRs. + */ +#define MEMORY_TYPE_WRITE_PROTECTED 0x00000005 + + /** + * @brief Write-back (WB) + * + * Writes and reads to and from system memory are cached. Reads come from cache lines on cache hits; read misses cause + * cache fills. Speculative reads are allowed. Write misses cause cache line fills (in processor families starting with the + * P6 family processors), and writes are performed entirely in the cache, when possible. Write combining is allowed. The + * write-back memory type reduces bus traffic by eliminating many unnecessary writes to system memory. Writes to a cache + * line are not immediately forwarded to system memory; instead, they are accumulated in the cache. The modified cache + * lines are written to system memory later, when a write-back operation is performed. Write-back operations are triggered + * when cache lines need to be deallocated, such as when new cache lines are being allocated in a cache that is already + * full. They also are triggered by the mechanisms used to maintain cache consistency. This type of cache-control provides + * the best performance, but it requires that all devices that access system memory on the system bus be able to snoop + * memory accesses to insure system memory and cache coherency. + */ +#define MEMORY_TYPE_WRITE_BACK 0x00000006 + + /** + * @brief Uncacheable (UC-) + * + * Has same characteristics as the strong uncacheable (UC) memory type, except that this memory type can be overridden by + * programming the MTRRs for the WC memory type. This memory type is available in processor families starting from the + * Pentium III processors and can only be selected through the PAT. + */ +#define MEMORY_TYPE_UNCACHEABLE_MINUS 0x00000007 +#define MEMORY_TYPE_INVALID 0x000000FF + /** + * @} + */ + + /** + * @} + */ + diff --git a/src/vmptest/main.cpp b/src/vmptest/main.cpp new file mode 100644 index 0000000..87b2eff --- /dev/null +++ b/src/vmptest/main.cpp @@ -0,0 +1,17 @@ +#include +#include +#include +#include "ia32.h" + +int main() +{ + /*cpuid_eax_01 cpuid_info; + __cpuid((int*)&cpuid_info, 1); + + if (cpuid_info.cpuid_feature_information_ecx.avx_support) + return 1; + + return 0;*/ + + MessageBoxA(NULL, "Hello World", "Hello World", NULL); +} \ No newline at end of file diff --git a/src/vmptest/vmptest.vcxproj b/src/vmptest/vmptest.vcxproj new file mode 100644 index 0000000..fde7d73 --- /dev/null +++ b/src/vmptest/vmptest.vcxproj @@ -0,0 +1,162 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {f98aafdc-aa2d-4ac2-924a-9bc9895e34d5} + vmptest + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + false + false + false + MultiThreadedDLL + + + Console + true + main + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + false + false + false + MultiThreadedDLL + + + Console + true + true + true + main + true + + + + + + + + + + + + \ No newline at end of file diff --git a/src/vmptest/vmptest.vcxproj.filters b/src/vmptest/vmptest.vcxproj.filters new file mode 100644 index 0000000..3cb779e --- /dev/null +++ b/src/vmptest/vmptest.vcxproj.filters @@ -0,0 +1,23 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + + + Header Files + + + + + Source Files + + + \ No newline at end of file

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%0AX13>X@1mXM{E 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 literal 0 HcmV?d00001 diff --git a/refbuilds/vmptest8.vmp.exe.i64 b/refbuilds/vmptest8.vmp.exe.i64 new file mode 100644 index 0000000000000000000000000000000000000000..d6080e715aea29e1c463ecff8c09f63aeb314feb GIT binary patch literal 1371776 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 GI_V*H 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 z%0D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�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