/* * Copyright (c) 2022 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ #include /* Header provided by the toolchain. */ #include #include #include uint32_t z_x86_cpuid_extended_features(void) { uint32_t eax, ebx, ecx = 0U, edx; if (__get_cpuid(CPUID_EXTENDED_FEATURES_LVL, &eax, &ebx, &ecx, &edx) == 0) { return 0; } return edx; } #define INITIAL_APIC_ID_SHIFT (24) #define INITIAL_APIC_ID_MASK (0xFF) uint8_t z_x86_cpuid_get_current_physical_apic_id(void) { uint32_t eax, ebx, ecx, edx; if (IS_ENABLED(CONFIG_X2APIC)) { /* leaf 0x1F should be used first prior to using 0x0B */ if (__get_cpuid(CPUID_EXTENDED_TOPOLOGY_ENUMERATION_V2, &eax, &ebx, &ecx, &edx) == 0) { if (__get_cpuid(CPUID_EXTENDED_TOPOLOGY_ENUMERATION, &eax, &ebx, &ecx, &edx) == 0) { return 0; } } } else { if (__get_cpuid(CPUID_BASIC_INFO_1, &eax, &ebx, &ecx, &edx) == 0) { return 0; } edx = (ebx >> INITIAL_APIC_ID_SHIFT); } return (uint8_t)(edx & INITIAL_APIC_ID_MASK); }