Skip to content

Commit 9da15f9

Browse files
committed
freebsd: Get platform from kenv
Signed-off-by: Daniel Schaefer <[email protected]>
1 parent c06e473 commit 9da15f9

File tree

1 file changed

+32
-40
lines changed

1 file changed

+32
-40
lines changed

framework_lib/src/smbios.rs

Lines changed: 32 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,27 @@ pub fn get_smbios() -> Option<SMBiosData> {
104104
println!("Failed to get SMBIOS: {:?}", err);
105105
None
106106
}
107+
108+
fn get_product_name() -> Option<String> {
109+
// On FreeBSD we can short-circuit and avoid parsing SMBIOS
110+
#[cfg(target_os = "freebsd")]
111+
if let Ok(product) = kenv_get("smbios.system.product") {
112+
return Some(product);
113+
}
114+
115+
let smbios = get_smbios();
116+
if smbios.is_none() {
117+
println!("Failed to find SMBIOS");
107118
}
119+
let mut smbios = smbios.into_iter().flatten();
120+
smbios.find_map(|undefined_struct| {
121+
if let DefinedStruct::SystemInformation(data) = undefined_struct.defined_struct() {
122+
if let Some(product_name) = dmidecode_string_val(&data.product_name()) {
123+
return Some(product_name.as_str().to_string());
124+
}
125+
}
126+
None
127+
})
108128
}
109129

110130
pub fn get_platform() -> Option<Platform> {
@@ -127,46 +147,18 @@ pub fn get_platform() -> Option<Platform> {
127147
}
128148
}
129149

130-
let smbios = get_smbios();
131-
if smbios.is_none() {
132-
println!("Failed to find SMBIOS");
133-
}
134-
let mut smbios = smbios.into_iter().flatten();
135-
let platform = smbios.find_map(|undefined_struct| {
136-
if let DefinedStruct::SystemInformation(data) = undefined_struct.defined_struct() {
137-
if let Some(product_name) = dmidecode_string_val(&data.product_name()) {
138-
match product_name.as_str() {
139-
"Laptop" => return Some(Platform::IntelGen11),
140-
"Laptop (12th Gen Intel Core)" => return Some(Platform::IntelGen12),
141-
"Laptop (13th Gen Intel Core)" => return Some(Platform::IntelGen13),
142-
"Laptop 13 (AMD Ryzen 7040Series)" => return Some(Platform::Framework13Amd),
143-
"Laptop 13 (AMD Ryzen 7040 Series)" => return Some(Platform::Framework13Amd),
144-
"Laptop 13 (Intel Core Ultra Series 1)" => {
145-
return Some(Platform::IntelCoreUltra1)
146-
}
147-
"Laptop 16 (AMD Ryzen 7040 Series)" => return Some(Platform::Framework16),
148-
_ => {}
149-
}
150-
}
151-
if let Some(family) = dmidecode_string_val(&data.family()) {
152-
// Actually "Laptop", "13in Laptop", and "16in Laptop"
153-
match family.as_str() {
154-
// TGL Mainboard (I don't this ever appears in family)
155-
"FRANBMCP" => return Some(Platform::IntelGen11),
156-
// ADL Mainboard (I don't this ever appears in family)
157-
"FRANMACP" => return Some(Platform::IntelGen12),
158-
// RPL Mainboard (I don't this ever appears in family)
159-
"FRANMCCP" => return Some(Platform::IntelGen13),
160-
// Framework 13 AMD Mainboard
161-
"FRANMDCP" => return Some(Platform::Framework13Amd),
162-
// Framework 16 Mainboard
163-
"FRANMZCP" => return Some(Platform::Framework16),
164-
_ => {}
165-
}
166-
}
167-
}
168-
None
169-
});
150+
let product_name = get_product_name()?;
151+
152+
let platform = match product_name.as_str() {
153+
"Laptop" => Some(Platform::IntelGen11),
154+
"Laptop (12th Gen Intel Core)" => Some(Platform::IntelGen12),
155+
"Laptop (13th Gen Intel Core)" => Some(Platform::IntelGen13),
156+
"Laptop 13 (AMD Ryzen 7040Series)" => Some(Platform::Framework13Amd),
157+
"Laptop 13 (AMD Ryzen 7040 Series)" => Some(Platform::Framework13Amd),
158+
"Laptop 13 (Intel Core Ultra Series 1)" => Some(Platform::IntelCoreUltra1),
159+
"Laptop 16 (AMD Ryzen 7040 Series)" => Some(Platform::Framework16),
160+
_ => None,
161+
};
170162

171163
if platform.is_none() {
172164
println!("Failed to find PlatformFamily");

0 commit comments

Comments
 (0)