1 /* ----------------------------------------------------------------------- * 2 * 3 * Copyright 2006 Erwan Velu - All Rights Reserved 4 * 5 * Permission is hereby granted, free of charge, to any person 6 * obtaining a copy of this software and associated documentation 7 * files (the "Software"), to deal in the Software without 8 * restriction, including without limitation the rights to use, 9 * copy, modify, merge, publish, distribute, sublicense, and/or 10 * sell copies of the Software, and to permit persons to whom 11 * the Software is furnished to do so, subject to the following 12 * conditions: 13 * 14 * The above copyright notice and this permission notice shall 15 * be included in all copies or substantial portions of the Software. 16 * 17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 19 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 20 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 21 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 22 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 23 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 24 * OTHER DEALINGS IN THE SOFTWARE. 25 * 26 * ----------------------------------------------------------------------- 27 */ 28 29 /* 30 * dmitest.c 31 * 32 * DMI demo program using libcom32 33 */ 34 35 #include <string.h> 36 #include <stdio.h> 37 #include <console.h> 38 #include "dmi/dmi.h" 39 40 char display_line; 41 42 void display_memory(s_dmi * dmi) 43 { 44 int i; 45 for (i = 0; i < dmi->memory_count; i++) { 46 moreprintf("Memory Bank %d\n", i); 47 moreprintf("\tForm Factor : %s\n", dmi->memory[i].form_factor); 48 moreprintf("\tType : %s\n", dmi->memory[i].type); 49 moreprintf("\tType Detail : %s\n", dmi->memory[i].type_detail); 50 moreprintf("\tSpeed : %s\n", dmi->memory[i].speed); 51 moreprintf("\tSize : %s\n", dmi->memory[i].size); 52 moreprintf("\tDevice Set : %s\n", dmi->memory[i].device_set); 53 moreprintf("\tDevice Loc. : %s\n", dmi->memory[i].device_locator); 54 moreprintf("\tBank Locator : %s\n", dmi->memory[i].bank_locator); 55 moreprintf("\tTotal Width : %s\n", dmi->memory[i].total_width); 56 moreprintf("\tData Width : %s\n", dmi->memory[i].data_width); 57 moreprintf("\tError : %s\n", dmi->memory[i].error); 58 moreprintf("\tVendor : %s\n", dmi->memory[i].manufacturer); 59 moreprintf("\tSerial : %s\n", dmi->memory[i].serial); 60 moreprintf("\tAsset Tag : %s\n", dmi->memory[i].asset_tag); 61 moreprintf("\tPart Number : %s\n", dmi->memory[i].part_number); 62 } 63 } 64 65 void display_battery(s_dmi * dmi) 66 { 67 moreprintf("Battery\n"); 68 moreprintf("\tVendor : %s\n", dmi->battery.manufacturer); 69 moreprintf("\tManufacture Date : %s\n", dmi->battery.manufacture_date); 70 moreprintf("\tSerial : %s\n", dmi->battery.serial); 71 moreprintf("\tName : %s\n", dmi->battery.name); 72 moreprintf("\tChemistry : %s\n", dmi->battery.chemistry); 73 moreprintf("\tDesign Capacity : %s\n", dmi->battery.design_capacity); 74 moreprintf("\tDesign Voltage : %s\n", dmi->battery.design_voltage); 75 moreprintf("\tSBDS : %s\n", dmi->battery.sbds); 76 moreprintf("\tSBDS Manufact. Date : %s\n", 77 dmi->battery.sbds_manufacture_date); 78 moreprintf("\tSBDS Chemistry : %s\n", dmi->battery.sbds_chemistry); 79 moreprintf("\tMaximum Error : %s\n", dmi->battery.maximum_error); 80 moreprintf("\tOEM Info : %s\n", dmi->battery.oem_info); 81 } 82 83 void display_bios(s_dmi * dmi) 84 { 85 moreprintf("BIOS\n"); 86 moreprintf("\tVendor: %s\n", dmi->bios.vendor); 87 moreprintf("\tVersion: %s\n", dmi->bios.version); 88 moreprintf("\tRelease: %s\n", dmi->bios.release_date); 89 moreprintf("\tBios Revision %s\n", dmi->bios.bios_revision); 90 moreprintf("\tFirmware Revision %s\n", dmi->bios.firmware_revision); 91 moreprintf("\tAddress: 0x%04X0\n", dmi->bios.address); 92 moreprintf("\tRuntime address: %u %s\n", dmi->bios.runtime_size, 93 dmi->bios.runtime_size_unit); 94 moreprintf("\tRom size: %u %s\n", dmi->bios.rom_size, 95 dmi->bios.rom_size_unit); 96 display_bios_characteristics(dmi); 97 } 98 99 void display_system(s_dmi * dmi) 100 { 101 moreprintf("\nSystem\n"); 102 moreprintf("\tManufacturer %s\n", dmi->system.manufacturer); 103 moreprintf("\tProduct Name %s\n", dmi->system.product_name); 104 moreprintf("\tVersion %s\n", dmi->system.version); 105 moreprintf("\tSerial %s\n", dmi->system.serial); 106 moreprintf("\tUUID %s\n", dmi->system.uuid); 107 moreprintf("\tWakeup Type %s\n", dmi->system.wakeup_type); 108 moreprintf("\tSKU Number %s\n", dmi->system.sku_number); 109 moreprintf("\tFamily %s\n", dmi->system.family); 110 } 111 112 void display_base_board(s_dmi * dmi) 113 { 114 moreprintf("Base board\n"); 115 moreprintf("\tManufacturer %s\n", dmi->base_board.manufacturer); 116 moreprintf("\tProduct Name %s\n", dmi->base_board.product_name); 117 moreprintf("\tVersion %s\n", dmi->base_board.version); 118 moreprintf("\tSerial %s\n", dmi->base_board.serial); 119 moreprintf("\tAsset Tag %s\n", dmi->base_board.asset_tag); 120 moreprintf("\tLocation %s\n", dmi->base_board.location); 121 moreprintf("\tType %s\n", dmi->base_board.type); 122 display_base_board_features(dmi); 123 } 124 125 void display_chassis(s_dmi * dmi) 126 { 127 moreprintf("\nChassis\n"); 128 moreprintf("\tManufacturer %s\n", dmi->chassis.manufacturer); 129 moreprintf("\tType %s\n", dmi->chassis.type); 130 moreprintf("\tLock %s\n", dmi->chassis.lock); 131 moreprintf("\tVersion %s\n", dmi->chassis.version); 132 moreprintf("\tSerial %s\n", dmi->chassis.serial); 133 moreprintf("\tAsset Tag %s\n", dmi->chassis.asset_tag); 134 moreprintf("\tBoot up state %s\n", dmi->chassis.boot_up_state); 135 moreprintf("\tPower supply state %s\n", dmi->chassis.power_supply_state); 136 moreprintf("\tThermal state %s\n", dmi->chassis.thermal_state); 137 moreprintf("\tSecurity Status %s\n", dmi->chassis.security_status); 138 moreprintf("\tOEM Information %s\n", dmi->chassis.oem_information); 139 moreprintf("\tHeight %u\n", dmi->chassis.height); 140 moreprintf("\tNB Power Cords %u\n", dmi->chassis.nb_power_cords); 141 } 142 143 void display_cpu(s_dmi * dmi) 144 { 145 moreprintf("\nCPU\n"); 146 moreprintf("\tSocket Designation %s\n", dmi->processor.socket_designation); 147 moreprintf("\tType %s\n", dmi->processor.type); 148 moreprintf("\tFamily %s\n", dmi->processor.family); 149 moreprintf("\tManufacturer %s\n", dmi->processor.manufacturer); 150 moreprintf("\tVersion %s\n", dmi->processor.version); 151 moreprintf("\tExternal Clock %u\n", dmi->processor.external_clock); 152 moreprintf("\tMax Speed %u\n", dmi->processor.max_speed); 153 moreprintf("\tCurrent Speed %u\n", dmi->processor.current_speed); 154 moreprintf("\tCpu Type %u\n", dmi->processor.signature.type); 155 moreprintf("\tCpu Family %u\n", dmi->processor.signature.family); 156 moreprintf("\tCpu Model %u\n", dmi->processor.signature.model); 157 moreprintf("\tCpu Stepping %u\n", dmi->processor.signature.stepping); 158 moreprintf("\tCpu Minor Stepping %u\n", 159 dmi->processor.signature.minor_stepping); 160 moreprintf("\tVoltage %d mV\n", dmi->processor.voltage_mv); 161 moreprintf("\tStatus %s\n", dmi->processor.status); 162 moreprintf("\tUpgrade %s\n", dmi->processor.upgrade); 163 moreprintf("\tCache L1 Handle %s\n", dmi->processor.cache1); 164 moreprintf("\tCache L2 Handle %s\n", dmi->processor.cache2); 165 moreprintf("\tCache L3 Handle %s\n", dmi->processor.cache3); 166 moreprintf("\tSerial %s\n", dmi->processor.serial); 167 moreprintf("\tPart Number %s\n", dmi->processor.part_number); 168 if (dmi->processor.core_count != 0) 169 moreprintf("\tCores Count %d\n", dmi->processor.core_count); 170 if (dmi->processor.core_enabled != 0) 171 moreprintf("\tCores Enabled %d\n", dmi->processor.core_enabled); 172 if (dmi->processor.thread_count != 0) 173 moreprintf("\tThreads Count %d\n", dmi->processor.thread_count); 174 moreprintf("\tID %s\n", dmi->processor.id); 175 display_processor_flags(dmi); 176 } 177 178 int main(void) 179 { 180 char buffer[1024]; 181 s_dmi dmi; 182 183 if (dmi_iterate(&dmi) == -ENODMITABLE) { 184 printf("No DMI Structure found\n"); 185 return -1; 186 } else { 187 printf("DMI %u.%u present.\n", dmi.dmitable.major_version, 188 dmi.dmitable.minor_version); 189 printf("%d structures occupying %d bytes.\n", dmi.dmitable.num, 190 dmi.dmitable.len); 191 printf("DMI table at 0x%08X.\n", dmi.dmitable.base); 192 } 193 194 parse_dmitable(&dmi); 195 196 for (;;) { 197 printf 198 ("Available commands are system, chassis, base_board, cpu, bios, memory, battery, all, exit\n"); 199 printf("dmi: "); 200 fgets(buffer, sizeof buffer, stdin); 201 if (!strncmp(buffer, "exit", 4)) 202 break; 203 if (!strncmp(buffer, "system", 6)) 204 display_system(&dmi); 205 if (!strncmp(buffer, "chassis", 6)) 206 display_chassis(&dmi); 207 if (!strncmp(buffer, "base_board", 10)) 208 display_base_board(&dmi); 209 if (!strncmp(buffer, "cpu", 3)) 210 display_cpu(&dmi); 211 if (!strncmp(buffer, "bios", 4)) 212 display_bios(&dmi); 213 if (!strncmp(buffer, "memory", 6)) 214 display_memory(&dmi); 215 if (!strncmp(buffer, "battery", 7)) 216 display_battery(&dmi); 217 if (!strncmp(buffer, "all", 3)) { 218 display_bios(&dmi); 219 display_system(&dmi); 220 display_chassis(&dmi); 221 display_base_board(&dmi); 222 display_cpu(&dmi); 223 display_memory(&dmi); 224 display_battery(&dmi); 225 } 226 } 227 228 return 0; 229 } 230