VirtualBox

Changeset 107037 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Nov 19, 2024 10:07:33 AM (3 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165986
Message:

Main/SystemTableBuilder: Start generating the PPI interface for the TPM in the ACPI tables, bufref:10777

File:
1 edited

Legend:

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

    r106955 r107037  
    704704    RTAcpiTblMethodFinalize(m_hAcpiDsdt);
    705705
     706    /* Build the PPI interface. */
     707    RTAcpiTblMethodStart(m_hAcpiDsdt, "_DSM", 4, RTACPI_METHOD_F_SERIALIZED, 0 /*uSyncLvl*/);
     708
     709    /*
     710     * Check that the UUID in Arg0 contains the Physical Presence Interface Specification UUID.
     711     */
     712    RTAcpiTblIfStart(m_hAcpiDsdt);
     713
     714    /* Predicate (LEqual(Arg0, ToUUID("3dddfaa6-361b-4eb4-a424-8d10089d1653")))*/
     715    RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     716    RTAcpiTblArgOpAppend(m_hAcpiDsdt, 0);
     717    RTAcpiTblUuidAppendFromStr(m_hAcpiDsdt, "3dddfaa6-361b-4eb4-a424-8d10089d1653");
     718
     719        /* Standard _DSM query function. */
     720        RTAcpiTblIfStart(m_hAcpiDsdt);
     721
     722            /* LEqual(Arg2, Zero). */
     723            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     724            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     725            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     726
     727            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     728            uint8_t abDsmQuery[2] = { 0xff, 0x01 };
     729            RTAcpiTblBufferAppend(m_hAcpiDsdt, &abDsmQuery[0], sizeof(abDsmQuery));
     730
     731        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     732
     733        /* Query supported PPI revision . */
     734        RTAcpiTblIfStart(m_hAcpiDsdt);
     735
     736            /* LEqual(Arg2, Zero). */
     737            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     738            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     739            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     740
     741            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     742            RTAcpiTblStringAppend(m_hAcpiDsdt, "1.3");
     743
     744        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     745
     746
     747        /* Submit TPM Operation Requested to pre-OS environment. */
     748        RTAcpiTblIfStart(m_hAcpiDsdt);
     749
     750            /* LEqual(Arg2, Zero). */
     751            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     752            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     753            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2);
     754
     755            /** @todo */
     756
     757        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     758
     759
     760        /* Get Pending TPM Operation Requested by the OS. */
     761        RTAcpiTblIfStart(m_hAcpiDsdt);
     762
     763            /* LEqual(Arg2, Zero). */
     764            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     765            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     766            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 3);
     767
     768            /** @todo */
     769
     770        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     771
     772
     773        /* Get Platform-specific Action to Transition to Pre-OS Environment. */
     774        RTAcpiTblIfStart(m_hAcpiDsdt);
     775
     776            /* LEqual(Arg2, Zero). */
     777            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     778            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     779            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 4);
     780
     781            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     782            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 2); /* Reboot */
     783
     784        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     785
     786
     787        /* Return TPM Operation Response to OS Environment. */
     788        RTAcpiTblIfStart(m_hAcpiDsdt);
     789
     790            /* LEqual(Arg2, Zero). */
     791            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     792            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     793            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 5);
     794
     795            /** @todo */
     796
     797        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     798
     799
     800        /* Submit Preferred user language - deprecated. */
     801        RTAcpiTblIfStart(m_hAcpiDsdt);
     802
     803            /* LEqual(Arg2, Zero). */
     804            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     805            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     806            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 6);
     807
     808            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     809            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 3); /* Not implemented */
     810
     811        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     812
     813
     814        /* Submit TPM Operation Request to Pre-OS Environment 2. */
     815        RTAcpiTblIfStart(m_hAcpiDsdt);
     816
     817            /* LEqual(Arg2, Zero). */
     818            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     819            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     820            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 7);
     821
     822            /** @todo */
     823
     824        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     825
     826
     827        /* Get User Confirmation Status for Operation. */
     828        RTAcpiTblIfStart(m_hAcpiDsdt);
     829
     830            /* LEqual(Arg2, Zero). */
     831            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     832            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     833            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 8);
     834
     835            /** @todo */
     836
     837        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     838
     839
     840        /* Return Unknown function. */
     841        uint8_t bUnkFunc = 0x00;
     842        RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     843        RTAcpiTblBufferAppend(m_hAcpiDsdt, &bUnkFunc, sizeof(bUnkFunc));
     844
     845    RTAcpiTblIfFinalize(m_hAcpiDsdt);
     846
     847
     848    /*
     849     * TCG Platform Reset Attack Mitigation Specification interface.
     850     */
     851    RTAcpiTblIfStart(m_hAcpiDsdt);
     852
     853    /* Predicate (LEqual(Arg0, ToUUID("376054ed-cc13-4675-901c-4756d7f2d45d")))*/
     854    RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     855    RTAcpiTblArgOpAppend(m_hAcpiDsdt, 0);
     856    RTAcpiTblUuidAppendFromStr(m_hAcpiDsdt, "376054ed-cc13-4675-901c-4756d7f2d45d");
     857
     858        /* Standard _DSM query function. */
     859        RTAcpiTblIfStart(m_hAcpiDsdt);
     860
     861            /* LEqual(Arg2, Zero). */
     862            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     863            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     864            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0);
     865
     866            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     867            uint8_t bBuf = 0x03;
     868            RTAcpiTblBufferAppend(m_hAcpiDsdt, &bBuf, sizeof(bBuf));
     869
     870        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     871
     872        /* Set Memory Overwrite Request (MOR) bit to specified value. */
     873        RTAcpiTblIfStart(m_hAcpiDsdt);
     874
     875            /* LEqual(Arg2, Zero). */
     876            RTAcpiTblBinaryOpAppend(m_hAcpiDsdt, kAcpiBinaryOp_LEqual);
     877            RTAcpiTblArgOpAppend(m_hAcpiDsdt, 2);
     878            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 1);
     879
     880            RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     881            RTAcpiTblIntegerAppend(m_hAcpiDsdt, 0); /* Memory always zeroed on reset. */
     882
     883        RTAcpiTblIfFinalize(m_hAcpiDsdt);
     884
     885        /* Return Unknown function. */
     886        bUnkFunc = 0x00;
     887        RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     888        RTAcpiTblBufferAppend(m_hAcpiDsdt, &bUnkFunc, sizeof(bUnkFunc));
     889
     890    RTAcpiTblIfFinalize(m_hAcpiDsdt);
     891
     892    /* Return Unknown function. */
     893    bUnkFunc = 0x00;
     894    RTAcpiTblStmtSimpleAppend(m_hAcpiDsdt, kAcpiStmt_Return);
     895    RTAcpiTblBufferAppend(m_hAcpiDsdt, &bUnkFunc, sizeof(bUnkFunc));
     896
     897    RTAcpiTblMethodFinalize(m_hAcpiDsdt);
     898
    706899    return RTAcpiTblDeviceFinalize(m_hAcpiDsdt);
    707900}
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