void DomainConfigTdpControl_001::createConfigTdpControlSet(UIntN domainIndex)
{
    // Build TDPL table
    UInt32 dataLength = 0;
    DptfMemory binaryData(Constants::DefaultBufferSize);
    m_participantServicesInterface->primitiveExecuteGet(
        esif_primitive_type::GET_PROC_CTDP_POINT_LIST,
        ESIF_DATA_BINARY,
        binaryData,
        binaryData.getSize(),
        &dataLength,
        domainIndex);
    std::vector<ConfigTdpControl> controls = BinaryParse::processorTdplObject(dataLength, binaryData);
    binaryData.deallocate();

    checkHWConfigTdpSupport(controls, domainIndex);

    // If any lock bit is set, we only provide 1 cTDP level to the policies.
    if (m_configTdpLock)
    {
        while (controls.size() > 1)
        {
            controls.pop_back();
        }
    }

    m_configTdpControlSet = new ConfigTdpControlSet(controls);
}
Esempio n. 2
0
void DomainConfigTdpControl_001::createConfigTdpControlSet(UIntN domainIndex)
{
    // Build TDPL table
    DptfBuffer buffer = getParticipantServices()->primitiveExecuteGet(
        esif_primitive_type::GET_PROC_CTDP_POINT_LIST, ESIF_DATA_BINARY, domainIndex);
    std::vector<ConfigTdpControl> controls = BinaryParse::processorTdplObject(buffer);

    checkHWConfigTdpSupport(controls, domainIndex);

    // If any lock bit is set, we only provide 1 cTDP level to the policies.
    if (m_configTdpLock)
    {
        while (controls.size() > 1)
        {
            controls.pop_back();
        }
    }

    m_configTdpControlSet = new ConfigTdpControlSet(controls);
}