[cpu] Reimplement CPUID features as util::bitset

The cpu::cpu_id class no longer looks up all known features in the
constructor, but instead provides access to the map of supported
features as a bitset from the verify() method. It also exposes the
brand_name() method instead of loading the brand name string in the
constructor and storing it as part of the object.
This commit is contained in:
Justin C. Miller
2022-03-13 17:33:16 -07:00
parent e2eaf43b4a
commit 54aef00913
6 changed files with 69 additions and 59 deletions

View File

@@ -1,5 +1,6 @@
#include <cpu/cpu_id.h>
#include "console.h"
#include "cpu/cpu_id.h"
#include "error.h"
#include "hardware.h"
#include "status.h"
@@ -83,19 +84,21 @@ check_cpu_supported()
status_line status {L"Checking CPU features"};
cpu::cpu_id cpu;
uint64_t missing = cpu.missing();
if (missing) {
cpu::cpu_id::features features = cpu.validate();
bool supported = true;
#define CPU_FEATURE_OPT(...)
#define CPU_FEATURE_REQ(name, ...) \
if (!cpu.has_feature(cpu::feature::name)) { \
status::fail(L"CPU required feature " L ## #name, uefi::status::unsupported); \
}
if (!features[cpu::feature::name]) { \
status::fail(L"CPU required feature " L ## #name, uefi::status::unsupported); \
supported = false; \
}
#include "cpu/features.inc"
#undef CPU_FEATURE_REQ
#undef CPU_FEATURE_OPT
if (!supported)
error::raise(uefi::status::unsupported, L"CPU not supported");
}
}