VirtualBox

Ignore:
Timestamp:
Feb 3, 2025 3:58:01 PM (3 weeks ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
167302
Message:

Runtime/RTAcpi: Some more work on the ASL -> AML compiler, can process our vbox-standard.dsl now, bugref:10733

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/acpi/acpi.cpp

    r108015 r108029  
    397397
    398398/**
     399 * Appends the given double word to the ACPI table, updating the package length of the current package.
     400 *
     401 * @param pThis                 The ACPI table instance.
     402 * @param u32                   The data to append.
     403 */
     404DECLINLINE(void) rtAcpiTblAppendDword(PRTACPITBLINT pThis, uint32_t u32)
     405{
     406    uint8_t *pb = rtAcpiTblBufEnsureSpace(pThis, sizeof(u32));
     407    if (pb)
     408    {
     409        pb[0] = (uint8_t)u32;
     410        pb[1] = (uint8_t)(u32 >>  8);
     411        pb[2] = (uint8_t)(u32 >> 16);
     412        pb[3] = (uint8_t)(u32 >> 24);
     413        rtAcpiTblUpdatePkgLength(pThis, sizeof(u32));
     414    }
     415}
     416
     417
     418/**
    399419 * Appends the given date to the ACPI table, updating the package length of the current package.
    400420 *
     
    696716RTDECL(int) RTAcpiTblDeviceStartV(RTACPITBL hAcpiTbl, const char *pszNameFmt, va_list va)
    697717{
    698     char szName[5];
     718    char szName[128];
    699719    ssize_t cch = RTStrPrintf2V(&szName[0], sizeof(szName), pszNameFmt, va);
    700720    if (cch <= 0)
     
    711731
    712732    return rtAcpiTblPkgFinish(pThis, ACPI_AML_BYTE_CODE_EXT_OP_DEVICE);
     733}
     734
     735
     736RTDECL(int) RTAcpiTblProcessorStart(RTACPITBL hAcpiTbl, const char *pszName, uint8_t bProcId, uint32_t u32PBlkAddr,
     737                                    uint8_t cbPBlk)
     738{
     739    PRTACPITBLINT pThis = hAcpiTbl;
     740    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     741
     742    rtAcpiTblPkgStartExt(pThis, ACPI_AML_BYTE_CODE_EXT_OP_PROCESSOR);
     743    rtAcpiTblAppendNameString(pThis, pszName);
     744    rtAcpiTblAppendByte(pThis, bProcId);
     745    rtAcpiTblAppendDword(pThis, u32PBlkAddr);
     746    rtAcpiTblAppendByte(pThis, cbPBlk);
     747    return pThis->rcErr;
     748}
     749
     750
     751RTDECL(int) RTAcpiTblProcessorStartF(RTACPITBL hAcpiTbl, uint8_t bProcId, uint32_t u32PBlkAddr, uint8_t cbPBlk,
     752                                     const char *pszNameFmt, ...)
     753{
     754    va_list va;
     755    va_start(va, pszNameFmt);
     756    int rc = RTAcpiTblProcessorStartV(hAcpiTbl, bProcId, u32PBlkAddr, cbPBlk, pszNameFmt, va);
     757    va_end(va);
     758    return rc;
     759}
     760
     761
     762RTDECL(int) RTAcpiTblProcessorStartV(RTACPITBL hAcpiTbl, uint8_t bProcId, uint32_t u32PBlkAddr, uint8_t cbPBlk,
     763                                     const char *pszNameFmt, va_list va)
     764{
     765    char szName[128];
     766    ssize_t cch = RTStrPrintf2V(&szName[0], sizeof(szName), pszNameFmt, va);
     767    if (cch <= 0)
     768        return VERR_BUFFER_OVERFLOW;
     769
     770    return RTAcpiTblProcessorStart(hAcpiTbl, &szName[0], bProcId, u32PBlkAddr, cbPBlk);
     771}
     772
     773
     774RTDECL(int) RTAcpiTblProcessorFinalize(RTACPITBL hAcpiTbl)
     775{
     776    PRTACPITBLINT pThis = hAcpiTbl;
     777    AssertPtrReturn(pThis, VERR_INVALID_HANDLE);
     778
     779    return rtAcpiTblPkgFinish(pThis, ACPI_AML_BYTE_CODE_EXT_OP_PROCESSOR);
    713780}
    714781
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