1 /* ----------------------------------------------------------------------- * 2 * 3 * Copyright 2006 Erwan Velu - All Rights Reserved 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation, Inc., 53 Temple Place Ste 330, 8 * Boston MA 02111-1307, USA; either version 2 of the License, or 9 * (at your option) any later version; incorporated herein by reference. 10 * 11 * ----------------------------------------------------------------------- */ 12 13 #ifndef DMI_PROCESSOR_H 14 #define DMI_PROCESSOR_H 15 16 #include "stdbool.h" 17 #include "string.h" 18 #define PROCESSOR_SOCKET_DESIGNATION_SIZE 65 19 #define PROCESSOR_TYPE_SIZE 32 20 #define PROCESSOR_FAMILY_SIZE 32 21 #define PROCESSOR_MANUFACTURER_SIZE 65 22 #define PROCESSOR_VERSION_SIZE 65 23 #define PROCESSOR_VOLTAGE_SIZE 16 24 #define PROCESSOR_STATUS_SIZE 16 25 #define PROCESSOR_UPGRADE_SIZE 16 26 #define PROCESSOR_CACHE_SIZE 16 27 #define PROCESSOR_SERIAL_SIZE 65 28 #define PROCESSOR_ASSET_TAG_SIZE 65 29 #define PROCESSOR_PART_NUMBER_SIZE 65 30 #define PROCESSOR_ID_SIZE 32 31 32 #define PROCESSOR_FLAGS_ELEMENTS 32 33 /* Intel AP-485 revision 28, table 5 */ 34 extern const char *cpu_flags_strings[PROCESSOR_FLAGS_ELEMENTS]; 35 36 /* this struct have PROCESSOR_FLAGS_ELEMENTS */ 37 /* each bool is associated to the relevant message above */ 38 typedef struct { 39 bool fpu; 40 bool vme; 41 bool de; 42 bool pse; 43 bool tsc; 44 bool msr; 45 bool pae; 46 bool mce; 47 bool cx8; 48 bool apic; 49 bool null_10; 50 bool sep; 51 bool mtrr; 52 bool pge; 53 bool mca; 54 bool cmov; 55 bool pat; 56 bool pse_36; 57 bool psn; 58 bool clfsh; 59 bool null_20; 60 bool ds; 61 bool acpi; 62 bool mmx; 63 bool fxsr; 64 bool sse; 65 bool sse2; 66 bool ss; 67 bool htt; 68 bool tm; 69 bool null_30; 70 bool pbe; 71 } __attribute__ ((__packed__)) s_dmi_cpu_flags; 72 73 typedef struct { 74 uint8_t type; 75 uint8_t family; 76 uint8_t model; 77 uint8_t stepping; 78 uint8_t minor_stepping; 79 } __attribute__ ((__packed__)) s_signature; 80 81 typedef struct { 82 char socket_designation[PROCESSOR_SOCKET_DESIGNATION_SIZE]; 83 char type[PROCESSOR_TYPE_SIZE]; 84 char family[PROCESSOR_FAMILY_SIZE]; 85 char manufacturer[PROCESSOR_MANUFACTURER_SIZE]; 86 char version[PROCESSOR_VERSION_SIZE]; 87 uint16_t voltage_mv; 88 uint16_t external_clock; 89 uint16_t max_speed; 90 uint16_t current_speed; 91 char status[PROCESSOR_STATUS_SIZE]; 92 char upgrade[PROCESSOR_UPGRADE_SIZE]; 93 char cache1[PROCESSOR_CACHE_SIZE]; 94 char cache2[PROCESSOR_CACHE_SIZE]; 95 char cache3[PROCESSOR_CACHE_SIZE]; 96 char serial[PROCESSOR_SERIAL_SIZE]; 97 char asset_tag[PROCESSOR_ASSET_TAG_SIZE]; 98 char part_number[PROCESSOR_PART_NUMBER_SIZE]; 99 char id[PROCESSOR_ID_SIZE]; 100 uint16_t core_count; 101 uint16_t core_enabled; 102 uint16_t thread_count; 103 s_dmi_cpu_flags cpu_flags; 104 s_signature signature; 105 /* The filled field have to be set to true when the dmitable implement that item */ 106 bool filled; 107 } s_processor; 108 109 const char *dmi_processor_type(uint8_t code); 110 const char *dmi_processor_family(uint8_t code, char *manufacturer); 111 const char *dmi_processor_status(uint8_t code); 112 const char *dmi_processor_upgrade(uint8_t code); 113 void dmi_processor_cache(uint16_t code, const char *level, uint16_t ver, 114 char *cache); 115 #endif 116