/* ----------------------------------------------------------------------- * * * Copyright 2006 Erwan Velu - All Rights Reserved * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, Inc., 53 Temple Place Ste 330, * Boston MA 02111-1307, USA; either version 2 of the License, or * (at your option) any later version; incorporated herein by reference. * * ----------------------------------------------------------------------- */ #ifndef DMI_PROCESSOR_H #define DMI_PROCESSOR_H #include "stdbool.h" #include "string.h" #define PROCESSOR_SOCKET_DESIGNATION_SIZE 65 #define PROCESSOR_TYPE_SIZE 32 #define PROCESSOR_FAMILY_SIZE 32 #define PROCESSOR_MANUFACTURER_SIZE 65 #define PROCESSOR_VERSION_SIZE 65 #define PROCESSOR_VOLTAGE_SIZE 16 #define PROCESSOR_STATUS_SIZE 16 #define PROCESSOR_UPGRADE_SIZE 16 #define PROCESSOR_CACHE_SIZE 16 #define PROCESSOR_SERIAL_SIZE 65 #define PROCESSOR_ASSET_TAG_SIZE 65 #define PROCESSOR_PART_NUMBER_SIZE 65 #define PROCESSOR_ID_SIZE 32 #define PROCESSOR_FLAGS_ELEMENTS 32 /* Intel AP-485 revision 28, table 5 */ extern const char *cpu_flags_strings[PROCESSOR_FLAGS_ELEMENTS]; /* this struct have PROCESSOR_FLAGS_ELEMENTS */ /* each bool is associated to the relevant message above */ typedef struct { bool fpu; bool vme; bool de; bool pse; bool tsc; bool msr; bool pae; bool mce; bool cx8; bool apic; bool null_10; bool sep; bool mtrr; bool pge; bool mca; bool cmov; bool pat; bool pse_36; bool psn; bool clfsh; bool null_20; bool ds; bool acpi; bool mmx; bool fxsr; bool sse; bool sse2; bool ss; bool htt; bool tm; bool null_30; bool pbe; } __attribute__ ((__packed__)) s_dmi_cpu_flags; typedef struct { uint8_t type; uint8_t family; uint8_t model; uint8_t stepping; uint8_t minor_stepping; } __attribute__ ((__packed__)) s_signature; typedef struct { char socket_designation[PROCESSOR_SOCKET_DESIGNATION_SIZE]; char type[PROCESSOR_TYPE_SIZE]; char family[PROCESSOR_FAMILY_SIZE]; char manufacturer[PROCESSOR_MANUFACTURER_SIZE]; char version[PROCESSOR_VERSION_SIZE]; uint16_t voltage_mv; uint16_t external_clock; uint16_t max_speed; uint16_t current_speed; char status[PROCESSOR_STATUS_SIZE]; char upgrade[PROCESSOR_UPGRADE_SIZE]; char cache1[PROCESSOR_CACHE_SIZE]; char cache2[PROCESSOR_CACHE_SIZE]; char cache3[PROCESSOR_CACHE_SIZE]; char serial[PROCESSOR_SERIAL_SIZE]; char asset_tag[PROCESSOR_ASSET_TAG_SIZE]; char part_number[PROCESSOR_PART_NUMBER_SIZE]; char id[PROCESSOR_ID_SIZE]; uint16_t core_count; uint16_t core_enabled; uint16_t thread_count; s_dmi_cpu_flags cpu_flags; s_signature signature; /* The filled field have to be set to true when the dmitable implement that item */ bool filled; } s_processor; const char *dmi_processor_type(uint8_t code); const char *dmi_processor_family(uint8_t code, char *manufacturer); const char *dmi_processor_status(uint8_t code); const char *dmi_processor_upgrade(uint8_t code); void dmi_processor_cache(uint16_t code, const char *level, uint16_t ver, char *cache); #endif