90#define CPUID_TAG( function, subfunction, flags, num_registers, \
91 register1, register2, register3, register4 ) \
92 ( (function) | ( (subfunction) << 24 ) | (flags) | \
93 ( ( (num_registers) - 1 ) << 16 ) | \
94 ( (register1) << 8 ) | ( (register2) << 10 ) | \
95 ( (register3) << 12 ) | ( (register4) << 14 ) )
103#define CPUID_FUNCTION( tag ) ( (tag) & 0xc00000ffUL )
111#define CPUID_SUBFUNCTION( tag ) ( ( (tag) >> 24 ) & 0x7f )
119#define CPUID_NUM_FUNCTIONS( tag ) ( ( ( (tag) >> 24 ) & 0x3f ) + 1 )
127#define CPUID_REGISTERS( tag ) ( ( (tag) >> 8 ) & 0xff )
135#define CPUID_NUM_REGISTERS( tag ) ( ( ( (tag) >> 16 ) & 0x3 ) + 1 )
173 size_t result_len = 0;
186 for ( ; num_functions-- ;
function++ ) {
198 DBGC (
settings,
"CPUID %#08x:%x => %#08x:%#08x:%#08x:%#08x\n",
204 for ( ; num_registers-- ; registers >>= 2 ) {
205 output = buf[ registers & 0x3 ];
208 frag_len =
sizeof (
output );
209 if ( frag_len >
len )
214 result_len +=
sizeof (
output );
246 DBG (
"CPUID could not register settings: %s\n",
262 .description =
"CPU vendor",
265 .type = &setting_type_string,
273 .description =
"CPU model",
276 .type = &setting_type_string,
#define NULL
NULL pointer (VOID *)
struct arbelprm_rc_send_wqe rc
int cpuid_supported(uint32_t function)
Check whether or not CPUID function is supported.
x86 CPU feature detection
#define CPUID_HYPERVISOR
CPUID hypervisor function.
#define CPUID_MODEL
Get CPU model.
static uint32_t subfunction
#define CPUID_VENDOR_ID
Get vendor ID and largest standard function.
cpuid_registers
CPUID setting tag register indices.
#define CPUID_NUM_FUNCTIONS(tag)
Extract number of consecutive functions from CPUID setting tag.
static struct settings_operations cpuid_settings_operations
CPUID settings operations.
static const struct settings_scope cpuid_settings_scope
CPUID settings scope.
#define CPUID_TAG(function, subfunction, flags, num_registers, register1, register2, register3, register4)
Construct CPUID setting tag.
static void cpuid_settings_init(void)
Initialise CPUID settings.
#define CPUID_NUM_REGISTERS(tag)
Extract number of registers from CPUID setting tag.
#define CPUID_FUNCTION(tag)
Extract starting function number from CPUID setting tag.
cpuid_flags
CPUID setting tag flags.
static int cpuid_settings_fetch(struct settings *settings, struct setting *setting, void *data, size_t len)
Fetch value of CPUID setting.
#define CPUID_SUBFUNCTION(tag)
Extract subfunction number from CPUID setting tag.
static int cpuid_settings_applies(struct settings *settings __unused, const struct setting *setting)
Check applicability of CPUID setting.
#define CPUID_REGISTERS(tag)
Extract register array from CPUID setting tag.
static struct settings cpuid_settings
CPUID settings.
uint8_t function
Function.
uint8_t data[48]
Additional event data.
#define __unused
Declare a variable or data structure as unused.
#define DBG(...)
Print a debugging message.
#define INIT_NORMAL
Normal initialisation.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define FILE_SECBOOT(_status)
Declare a file's UEFI Secure Boot permission status.
#define SETTING_HOST_EXTRA
Host identity additional settings.
#define cpu_to_be32(value)
#define __setting(setting_order, name)
Declare a configuration setting.
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define __init_fn(init_order)
Declare an initialisation functon.
#define LIST_HEAD_INIT(list)
Initialise a static list head.
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
char * strerror(int errno)
Retrieve string representation of error number.
An initialisation function.
const struct settings_scope * scope
Setting scope (or NULL)
const struct setting_type * type
Setting type.
uint64_t tag
Setting tag, if applicable.
Settings block operations.