libcpuid_dump/
info_01h_ebx.rs

1use crate::{cpuid, CpuidResult};
2
3/// Information available from `CPUID.(EAX=01h):EBX`
4#[derive(Debug, Clone)]
5pub struct Info01h {
6    pub local_apic_id: u8,
7    pub max_apic_id: u8,
8    pub clflush_size: u8,
9    pub brand_id: u8,
10}
11
12impl From<u32> for Info01h {
13    fn from(ebx: u32) -> Self {
14        Self {
15            local_apic_id: ((ebx >> 24) & 0xFF) as u8,
16            max_apic_id: ((ebx >> 16) & 0xFF) as u8,
17            clflush_size: (((ebx >> 8) & 0xFF) as u8).saturating_mul(8),
18            brand_id: (ebx & 0xFF) as u8,
19        }
20    }
21}
22
23impl From<&CpuidResult> for Info01h {
24    fn from(cpuid: &CpuidResult) -> Self {
25        Self::from(cpuid.ebx)
26    }
27}
28
29impl Info01h {
30    pub fn get() -> Self {
31        Self::from(&cpuid!(0x1, 0x0))
32    }
33}