VirtualBox

Changeset 107065 in vbox


Ignore:
Timestamp:
Nov 20, 2024 8:22:49 PM (3 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
166019
Message:

Main/SystemTableBuilder: Finish generating the TPM PPI ACPI bytecode, bugref:10777

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/src-client/SystemTableBuilder.cpp

    r107037 r107065  
    704704    RTAcpiTblMethodFinalize(m_hAcpiDsdt);
    705705
    706     /* Build the PPI interface. */
     706    /* Build the PPI interface (this is as a verbatim translation from src/VBox/Devices/PC/vbox-tpm.dsl as possible). */
     707    RTAcpiTblMethodStart(m_hAcpiDsdt, "TPFS", 1, RTACPI_METHOD_F_SERIALIZED, 0 /*uSyncLvl*/);
     708
     709        RTAcpiTblIfStart(m_hAcpiDsdt);
     710            /* LGreaterEqual(Arg0, 0x100). */
     711            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LGreaterEqual);
     712            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 0);
     713            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0x100);
     714
     715            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     716            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     717        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     718
     719        RTAcpiTblOpRegionAppendEx(m_hAcpiDsdt, "TPP1", kAcpiOperationRegionSpace_SystemMemory);
     720        RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Add); /* Region offset */
     721        RTAcpiTblIntegerAppend(m_hAcpiDsdt, m_GCPhysTpm20Mmio + 0x5000);
     722        RTAcpiTblArgOpAppend(m_hAcpiDsdt, 0); /* Arg0 */
     723        RTAcpiTblNullNameAppend(m_hAcpiDsdt); /* Target -> NullName */
     724        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1); /* Region size */
     725
     726        /* Define the field accessor. */
     727        const RTACPIFIELDENTRY aPpiTpp1Fields[] =
     728        {
     729            { "TPPF",  8 },
     730        };
     731        RTAcpiTblFieldAppend(m_hAcpiDsdt, "TPP1", kAcpiFieldAcc_Any, false /*fLock*/, kAcpiFieldUpdate_Preserve,
     732                             &aPpiTpp1Fields[0], RT_ELEMENTS(aPpiTpp1Fields));
     733        RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     734        RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPPF");
     735
     736    RTAcpiTblMethodFinalize(m_hAcpiDsdt);
     737
     738
     739    /* Device specific method. */
    707740    RTAcpiTblMethodStart(m_hAcpiDsdt, "_DSM", 4, RTACPI_METHOD_F_SERIALIZED, 0 /*uSyncLvl*/);
     741
     742    /* Define the MMIO region for the PPI interface. */
     743    RTAcpiTblOpRegionAppend(m_hAcpiDsdt, "TPMP", kAcpiOperationRegionSpace_SystemMemory,
     744                            m_GCPhysTpm20Mmio + 0x5100, 0x5a /*cbRegion*/);
     745
     746    /* Define the field accessors for the PPI interface. */
     747    const RTACPIFIELDENTRY aPpiFields[] =
     748    {
     749        { "PPIN",  8 },
     750        { "PPIP", 32 },
     751        { "PPRP", 32 },
     752        { "PPRQ", 32 },
     753        { "PPRM", 32 },
     754        { "LPPR", 32 }
     755    };
     756    RTAcpiTblFieldAppend(m_hAcpiDsdt, "TPMP", kAcpiFieldAcc_Any, false /*fLock*/, kAcpiFieldUpdate_Preserve,
     757                         &aPpiFields[0], RT_ELEMENTS(aPpiFields));
     758
     759    /* Define some packages we need later on. */
     760    RTAcpiTblNameAppend(m_hAcpiDsdt, "TPB2");
     761        RTAcpiTblPackageStart(m_hAcpiDsdt, 2 /*cElements*/);
     762        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     763        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     764        RTAcpiTblPackageFinalize(m_hAcpiDsdt);
     765
     766    RTAcpiTblNameAppend(m_hAcpiDsdt, "TPB3");
     767        RTAcpiTblPackageStart(m_hAcpiDsdt, 3 /*cElements*/);
     768        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     769        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     770        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     771        RTAcpiTblPackageFinalize(m_hAcpiDsdt);
     772
    708773
    709774    /*
     
    753818            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2);
    754819
    755             /** @todo */
     820            /* Store(DerefOf(Index(Arg3, Zero)), Local0) */
     821            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     822                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_DerefOf);
     823                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     824                    RTAcpiTblArgOpAppend(m_hAcpiDsdt, 3);   /* Arg3 */
     825                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0); /* Zero */
     826                    RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     827                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0); /* Local0 */
     828
     829            /* Store (TPFS (Local0), Local1) */
     830            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     831                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPFS");
     832                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0); /* Local0 */
     833                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1); /* Local1 */
     834
     835            /* If (LEqual (And (Local1, 0x07), Zero)) */
     836            RTAcpiTblIfStart(m_hAcpiDsdt);
     837                RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     838                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_And);
     839                        RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1); /* Local1 */
     840                        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0x7);
     841                        RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     842                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     843
     844                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     845                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     846
     847            RTAcpiTblIfFinalize(m_hAcpiDsdt);
     848
     849            /* Store (Local0, PPRQ) */
     850            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     851                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0); /* Local0 */
     852                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRQ");
     853            /* Store (Zero, PPRM) */
     854            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     855                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     856                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRM");
     857
     858            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     859                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
    756860
    757861        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     
    766870            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 3);
    767871
    768             /** @todo */
     872            RTAcpiTblIfStart(m_hAcpiDsdt);
     873
     874                /* LEqual(Arg1, One). */
     875                RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     876                RTAcpiTblArgOpAppend(m_hAcpiDsdt, 1);
     877                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     878
     879                /* Store (PPRQ, Index(TPB2, One) */
     880                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     881                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRQ");
     882                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     883                        RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB2");
     884                        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     885                        RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     886
     887                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     888                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB2");
     889
     890            RTAcpiTblIfFinalize(m_hAcpiDsdt);
     891
     892            RTAcpiTblIfStart(m_hAcpiDsdt);
     893
     894                /* LEqual(Arg1, 0x02). */
     895                RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     896                RTAcpiTblArgOpAppend(m_hAcpiDsdt, 1);
     897                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2);
     898
     899                /* Store (PPRQ, Index(TPB3, One) */
     900                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     901                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRQ");
     902                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     903                        RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB3");
     904                        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     905                        RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     906
     907                /* Store (PPRM, Index(TPB3, 0x2) */
     908                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     909                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRM");
     910                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     911                        RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB3");
     912                        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2);
     913                        RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     914
     915                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     916                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB2");
     917
     918            RTAcpiTblIfFinalize(m_hAcpiDsdt);
     919
     920            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     921                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB3");
    769922
    770923        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     
    793946            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 5);
    794947
    795             /** @todo */
     948            /* Store (LPPR, Index(TPB3, One) */
     949            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     950                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "LPPR");
     951                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     952                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB3");
     953                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     954                    RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     955
     956            /* Store (PPRP, Index(TPB3, 0x2) */
     957            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     958                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRP");
     959                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     960                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB3");
     961                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2);
     962                    RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     963
     964            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     965                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPB3");
    796966
    797967        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     
    820990            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 7);
    821991
    822             /** @todo */
     992            /* Store(DerefOf(Index(Arg3, Zero)), Local0) */
     993            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     994                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_DerefOf);
     995                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     996                    RTAcpiTblArgOpAppend(m_hAcpiDsdt, 3);   /* Arg3 */
     997                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0); /* Zero */
     998                    RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     999                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0); /* Local0 */
     1000
     1001            /* Store (TPFS (Local0), Local1) */
     1002            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1003                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPFS");
     1004                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0); /* Local0 */
     1005                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1); /* Local1 */
     1006
     1007            /* Store(And(Local1, 0x07), Local1) */
     1008            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1009                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_And);
     1010                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1); /* Local1 */
     1011                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0x7);
     1012                    RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     1013                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1); /* Local1 */
     1014
     1015            /* LEqual(Local1, Zero) */
     1016            RTAcpiTblIfStart(m_hAcpiDsdt);
     1017
     1018                RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     1019                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1);
     1020                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     1021
     1022                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     1023                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     1024
     1025            RTAcpiTblIfFinalize(m_hAcpiDsdt);
     1026
     1027            /* LEqual(Local1, 2) */
     1028            RTAcpiTblIfStart(m_hAcpiDsdt);
     1029
     1030                RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     1031                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1);
     1032                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2);
     1033
     1034                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     1035                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 3);
     1036
     1037            RTAcpiTblIfFinalize(m_hAcpiDsdt);
     1038
     1039            /* LEqual(Arg1, One) */
     1040            RTAcpiTblIfStart(m_hAcpiDsdt);
     1041
     1042                RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     1043                RTAcpiTblArgOpAppend(m_hAcpiDsdt, 1);
     1044                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     1045
     1046                /* Store(Local0, PPRQ) */
     1047                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1048                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0);
     1049                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRQ");
     1050
     1051                /* Store(Zero, PPRM) */
     1052                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1053                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     1054                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRM");
     1055
     1056            RTAcpiTblIfFinalize(m_hAcpiDsdt);
     1057
     1058            /* LEqual(Arg1, 2) */
     1059            RTAcpiTblIfStart(m_hAcpiDsdt);
     1060
     1061                RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     1062                RTAcpiTblArgOpAppend(m_hAcpiDsdt, 1);
     1063                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2);
     1064
     1065                /* Store(DerefOf(Index(Arg3, One)), Local2) */
     1066                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1067                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_DerefOf);
     1068                        RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     1069                        RTAcpiTblArgOpAppend(m_hAcpiDsdt, 3);   /* Arg3 */
     1070                        RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1); /* ONe */
     1071                        RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     1072                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 2); /* Local2 */
     1073
     1074                /* Store(Local0, PPRQ) */
     1075                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1076                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0);
     1077                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRQ");
     1078
     1079                /* Store(Local2, PPRM) */
     1080                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1081                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 2);
     1082                    RTAcpiTblNameStringAppend(m_hAcpiDsdt, "PPRM");
     1083
     1084            RTAcpiTblIfFinalize(m_hAcpiDsdt);
     1085
     1086            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     1087                RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
    8231088
    8241089        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     
    8331098            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 8);
    8341099
    835             /** @todo */
     1100            /* Store(DerefOf(Index(Arg3, Zero)), Local0) */
     1101            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1102                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_DerefOf);
     1103                    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Index);
     1104                    RTAcpiTblArgOpAppend(m_hAcpiDsdt, 3);   /* Arg3 */
     1105                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0); /* Zero */
     1106                    RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
     1107                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0); /* Local0 */
     1108
     1109            /* Store (TPFS (Local0), Local1) */
     1110            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Store);
     1111                RTAcpiTblNameStringAppend(m_hAcpiDsdt, "TPFS");
     1112                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 0); /* Local0 */
     1113                RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1); /* Local1 */
     1114
     1115            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     1116                RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_And);
     1117                    RTAcpiTblLocalOpAppend(m_hAcpiDsdt, 1); /* Local1 */
     1118                    RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0x7);
     1119                    RTAcpiTblNullNameAppend(m_hAcpiDsdt);   /* Target -> NullName */
    8361120
    8371121        RTAcpiTblIfFinalize(m_hAcpiDsdt);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette