class ApicIdDecoder

Defined at line 65 of file ../../zircon/kernel/lib/arch/include/lib/arch/x86/apic-id.h

ApicIdDecoder is a utility for extracting particular topological level

IDs from an (x2)APIC ID.

In full generality, an APIC ID might decompose as follows:

[intel/vol3]: Figure 8-5. Generalized Seven Level Interpretation of the APIC ID.

-----------------------------------------------------------------------------

| CLUSTER ID | PACKAGE ID | DIE ID | TILE ID | MODULE ID | CORE ID | SMT ID |

-----------------------------------------------------------------------------

where the full ID width is 32-bit (if x2APIC) or 8-bit.

This, however, is higher fidelity than we are able to make use of. Since

CLUSTER ID and PACKAGE_ID are not directly enumerable from CPUID, we elide

the two IDs into a single PACKAGE ID, defined as the rest of the ID above

DIE. Moreover, the system currently has no use for enumerating tiles and

modules directly (which is also a practice that AMD does not do): we elide

the TILE and MODULE IDs into DIE ID alone. Accordingly, ApicIdDecoder

partitions up the APIC address space as

------------------------------------------

| PACKAGE ID | DIE ID | CORE ID | SMT ID |

------------------------------------------

Public Methods

template <typename CpuidIoProvider, typename = std::enable_if_t<!std::is_same_v<CpuidIoProvider, ApicIdDecoder>>>
void ApicIdDecoder (CpuidIoProvider && io)

To avoid precedence over copy and move constructors.

Defined at line 70 of file ../../zircon/kernel/lib/arch/include/lib/arch/x86/apic-id.h

void ApicIdDecoder ()

Defined at line 142 of file ../../zircon/kernel/lib/arch/include/lib/arch/x86/apic-id.h

uint32_t smt_id (uint32_t apic_id)

Defined at line 144 of file ../../zircon/kernel/lib/arch/include/lib/arch/x86/apic-id.h

uint32_t core_id (uint32_t apic_id)

Defined at line 146 of file ../../zircon/kernel/lib/arch/include/lib/arch/x86/apic-id.h

uint32_t die_id (uint32_t apic_id)

Defined at line 150 of file ../../zircon/kernel/lib/arch/include/lib/arch/x86/apic-id.h

uint32_t package_id (uint32_t apic_id)

Defined at line 154 of file ../../zircon/kernel/lib/arch/include/lib/arch/x86/apic-id.h