gitlab.com/apertussolutions/u-root@v7.0.0+incompatible/pkg/smbios/type4_processor_information.go (about) 1 // Copyright 2016-2019 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package smbios 6 7 import ( 8 "errors" 9 "fmt" 10 "strings" 11 ) 12 13 // Much of this is auto-generated. If adding a new type, see README for instructions. 14 15 // ProcessorInfo is defined in DSP0134 x.x. 16 type ProcessorInfo struct { 17 Table 18 SocketDesignation string // 04h 19 Type ProcessorType // 05h 20 Family uint8 // 06h 21 Manufacturer string // 07h 22 ID uint64 // 08h 23 Version string // 10h 24 Voltage uint8 // 11h 25 ExternalClock uint16 // 12h 26 MaxSpeed uint16 // 14h 27 CurrentSpeed uint16 // 16h 28 Status ProcessorStatus // 18h 29 Upgrade ProcessorUpgrade // 19h 30 L1CacheHandle uint16 // 1Ah 31 L2CacheHandle uint16 // 1Ch 32 L3CacheHandle uint16 // 1Eh 33 SerialNumber string // 20h 34 AssetTag string // 21h 35 PartNumber string // 22h 36 CoreCount uint8 // 23h 37 CoreEnabled uint8 // 24h 38 ThreadCount uint8 // 25h 39 Characteristics ProcessorCharacteristics // 26h 40 Family2 ProcessorFamily // 28h 41 CoreCount2 uint16 // 2Ah 42 CoreEnabled2 uint16 // 2Ch 43 ThreadCount2 uint16 // 2Eh 44 } 45 46 // ParseProcessorInfo parses a generic Table into ProcessorInfo. 47 func ParseProcessorInfo(t *Table) (*ProcessorInfo, error) { 48 if t.Type != TableTypeProcessorInfo { 49 return nil, fmt.Errorf("invalid table type %d", t.Type) 50 } 51 if t.Len() < 0x1a { 52 return nil, errors.New("required fields missing") 53 } 54 pi := &ProcessorInfo{Table: *t} 55 _, err := parseStruct(t, 0 /* off */, false /* complete */, pi) 56 if err != nil { 57 return nil, err 58 } 59 return pi, nil 60 } 61 62 // GetFamily returns the processor family, taken from the appropriate field. 63 func (pi *ProcessorInfo) GetFamily() ProcessorFamily { 64 if pi.Family == 0xfe && pi.Len() >= 0x2a { 65 return pi.Family2 66 } 67 return ProcessorFamily(pi.Family) 68 } 69 70 // GetVoltage returns the processor voltage, in volts. 71 func (pi *ProcessorInfo) GetVoltage() float32 { 72 if pi.Voltage&0x80 == 0 { 73 switch { 74 case pi.Voltage&1 != 0: 75 return 5.0 76 case pi.Voltage&2 != 0: 77 return 3.3 78 case pi.Voltage&4 != 0: 79 return 2.9 80 } 81 return 0 82 } 83 return float32(pi.Voltage&0x7f) / 10.0 84 } 85 86 // GetCoreCount returns the number of cores detected by the BIOS for this processor socket. 87 func (pi *ProcessorInfo) GetCoreCount() int { 88 if pi.Len() >= 0x2c && pi.CoreCount == 0xff { 89 return int(pi.CoreCount2) 90 } 91 return int(pi.CoreCount) 92 } 93 94 // GetCoreEnabled returns the number of cores that are enabled by the BIOS and available for Operating System use. 95 func (pi *ProcessorInfo) GetCoreEnabled() int { 96 if pi.Len() >= 0x2e && pi.CoreEnabled == 0xff { 97 return int(pi.CoreEnabled2) 98 } 99 return int(pi.CoreEnabled) 100 } 101 102 // GetThreadCount returns the total number of threads detected by the BIOS for this processor socket. 103 func (pi *ProcessorInfo) GetThreadCount() int { 104 if pi.Len() >= 0x30 && pi.ThreadCount == 0xff { 105 return int(pi.ThreadCount2) 106 } 107 return int(pi.ThreadCount) 108 } 109 110 func (pi *ProcessorInfo) String() string { 111 freqStr := func(v uint16) string { 112 if v == 0 { 113 return "Unknown" 114 } 115 return fmt.Sprintf("%d MHz", v) 116 } 117 cacheHandleStr := func(h uint16) string { 118 if h == 0xffff { 119 return "Not Provided" 120 } 121 return fmt.Sprintf("0x%04X", h) 122 } 123 f := pi.GetFamily() 124 sig := "" 125 haveFlags := false 126 switch { 127 // Intel 128 case (f >= 0x0B && f <= 0x15) || /* Intel, Cyrix */ 129 (f >= 0x28 && f <= 0x2F) || 130 (f >= 0xA1 && f <= 0xB3) || 131 f == 0xB5 || 132 (f >= 0xB9 && f <= 0xC7) || 133 (f >= 0xCD && f <= 0xCF) || 134 (f >= 0xD2 && f <= 0xDB) || /* VIA, Intel */ 135 (f >= 0xDD && f <= 0xE0): 136 eax := uint32(pi.ID & 0xffffffff) 137 sig = fmt.Sprintf("Type %d, Family %d, Model %d, Stepping %d", 138 (eax>>12)&0x3, ((eax>>20)&0xff)+((eax>>8)&0xf), ((eax>>12)&0xf0)+((eax>>4)&0xf), eax&0xf) 139 haveFlags = true 140 // AMD 141 case (f >= 0x18 && f <= 0x1D) || 142 f == 0x1F || 143 (f >= 0x38 && f <= 0x3F) || 144 (f >= 0x46 && f <= 0x4F) || 145 (f >= 0x66 && f <= 0x6B) || 146 (f >= 0x83 && f <= 0x8F) || 147 (f >= 0xB6 && f <= 0xB7) || 148 (f >= 0xE4 && f <= 0xEF): 149 eax := uint32(pi.ID & 0xffffffff) 150 fam := (eax >> 8) & 0xf 151 if ((eax >> 8) & 0xf) == 0xf { 152 fam += (eax >> 20) & 0xff 153 } 154 mod := (eax >> 4) & 0xf 155 if ((eax >> 8) & 0xf) == 0xf { 156 mod += (eax >> 12) & 0xf0 157 } 158 sig = fmt.Sprintf("Family %d, Model %d, Stepping %d", fam, mod, eax&0xf) 159 haveFlags = true 160 // ARM 161 case (f >= 0x100 && f <= 0x101) || 162 (f >= 0x118 && f <= 0x119): 163 if midr := uint32(pi.ID & 0xffffffff); midr != 0 { 164 sig = fmt.Sprintf("Implementor 0x%02x, Variant 0x%x, Architecture %d, Part 0x%03x, Revision %d", 165 midr>>24, (midr>>20)&0xf, (midr>>16)&0xf, (midr>>4)&0xfff, midr&0xf) 166 } 167 } 168 lines := []string{ 169 pi.Header.String(), 170 fmt.Sprintf("Socket Designation: %s", pi.SocketDesignation), 171 fmt.Sprintf("Type: %s", pi.Type), 172 fmt.Sprintf("Family: %s", pi.GetFamily()), 173 fmt.Sprintf("Manufacturer: %s", pi.Manufacturer), 174 fmt.Sprintf("ID: %02X %02X %02X %02X %02X %02X %02X %02X", 175 (pi.ID>>0)&0xff, (pi.ID>>8)&0xff, (pi.ID>>16)&0xff, (pi.ID>>24)&0xff, 176 (pi.ID>>32)&0xff, (pi.ID>>40)&0xff, (pi.ID>>48)&0xff, (pi.ID>>56)&0xff, 177 ), 178 } 179 if sig != "" { 180 lines = append(lines, fmt.Sprintf("Signature: %s", sig)) 181 } 182 if haveFlags { 183 lines = append(lines, "Flags:") 184 edx := uint32(pi.ID >> 32) 185 for n, s := range [32]string{ 186 "FPU (Floating-point unit on-chip)", /* 0 */ 187 "VME (Virtual mode extension)", 188 "DE (Debugging extension)", 189 "PSE (Page size extension)", 190 "TSC (Time stamp counter)", 191 "MSR (Model specific registers)", 192 "PAE (Physical address extension)", 193 "MCE (Machine check exception)", 194 "CX8 (CMPXCHG8 instruction supported)", 195 "APIC (On-chip APIC hardware supported)", 196 "", /* 10 */ 197 "SEP (Fast system call)", 198 "MTRR (Memory type range registers)", 199 "PGE (Page global enable)", 200 "MCA (Machine check architecture)", 201 "CMOV (Conditional move instruction supported)", 202 "PAT (Page attribute table)", 203 "PSE-36 (36-bit page size extension)", 204 "PSN (Processor serial number present and enabled)", 205 "CLFSH (CLFLUSH instruction supported)", 206 "", /* 20 */ 207 "DS (Debug store)", 208 "ACPI (ACPI supported)", 209 "MMX (MMX technology supported)", 210 "FXSR (FXSAVE and FXSTOR instructions supported)", 211 "SSE (Streaming SIMD extensions)", 212 "SSE2 (Streaming SIMD extensions 2)", 213 "SS (Self-snoop)", 214 "HTT (Multi-threading)", 215 "TM (Thermal monitor supported)", 216 "", /* 30 */ 217 "PBE (Pending break enabled)", /* 31 */ 218 } { 219 if edx&(1<<uint(n)) != 0 && s != "" { 220 lines = append(lines, "\t"+s) 221 } 222 } 223 } 224 lines = append(lines, 225 fmt.Sprintf("Version: %s", pi.Version), 226 fmt.Sprintf("Voltage: %.1f V", pi.GetVoltage()), 227 fmt.Sprintf("External Clock: %s", freqStr(pi.ExternalClock)), 228 fmt.Sprintf("Max Speed: %s", freqStr(pi.MaxSpeed)), 229 fmt.Sprintf("Current Speed: %s", freqStr(pi.CurrentSpeed)), 230 fmt.Sprintf("Status: %s", pi.Status), 231 fmt.Sprintf("Upgrade: %s", pi.Upgrade), 232 ) 233 if pi.Len() > 0x1a { 234 lines = append(lines, 235 fmt.Sprintf("L1 Cache Handle: %s", cacheHandleStr(pi.L1CacheHandle)), 236 fmt.Sprintf("L2 Cache Handle: %s", cacheHandleStr(pi.L2CacheHandle)), 237 fmt.Sprintf("L3 Cache Handle: %s", cacheHandleStr(pi.L3CacheHandle)), 238 ) 239 } 240 if pi.Len() > 0x20 { 241 lines = append(lines, 242 fmt.Sprintf("Serial Number: %s", pi.SerialNumber), 243 fmt.Sprintf("Asset Tag: %s", pi.AssetTag), 244 fmt.Sprintf("Part Number: %s", pi.PartNumber), 245 ) 246 } 247 if pi.Len() > 0x23 { 248 lines = append(lines, 249 fmt.Sprintf("Core Count: %d", pi.GetCoreCount()), 250 fmt.Sprintf("Core Enabled: %d", pi.GetCoreEnabled()), 251 ) 252 if pi.GetThreadCount() > 0 { 253 lines = append(lines, fmt.Sprintf("Thread Count: %d", pi.GetThreadCount())) 254 } 255 lines = append(lines, fmt.Sprintf("Characteristics:\n%s", pi.Characteristics)) 256 } 257 return strings.Join(lines, "\n\t") 258 } 259 260 // ProcessorType is defined in DSP0134 7.5.1. 261 type ProcessorType uint8 262 263 // ProcessorType values are defined in DSP0134 7.5.1. 264 const ( 265 ProcessorTypeOther ProcessorType = 0x01 // Other 266 ProcessorTypeUnknown ProcessorType = 0x02 // Unknown 267 ProcessorTypeCentralProcessor ProcessorType = 0x03 // Central Processor 268 ProcessorTypeMathProcessor ProcessorType = 0x04 // Math Processor 269 ProcessorTypeDSPProcessor ProcessorType = 0x05 // DSP Processor 270 ProcessorTypeVideoProcessor ProcessorType = 0x06 // Video Processor 271 ) 272 273 func (v ProcessorType) String() string { 274 names := map[ProcessorType]string{ 275 ProcessorTypeOther: "Other", 276 ProcessorTypeUnknown: "Unknown", 277 ProcessorTypeCentralProcessor: "Central Processor", 278 ProcessorTypeMathProcessor: "Math Processor", 279 ProcessorTypeDSPProcessor: "DSP Processor", 280 ProcessorTypeVideoProcessor: "Video Processor", 281 } 282 if name, ok := names[v]; ok { 283 return name 284 } 285 return fmt.Sprintf("%#x", uint8(v)) 286 } 287 288 // ProcessorFamily is defined in DSP0134 7.5.2. 289 type ProcessorFamily uint16 290 291 // ProcessorFamily values are defined in DSP0134 7.5.2. 292 const ( 293 ProcessorFamilyOther ProcessorFamily = 0x01 // Other 294 ProcessorFamilyUnknown ProcessorFamily = 0x02 // Unknown 295 ProcessorFamily8086 ProcessorFamily = 0x03 // 8086 296 ProcessorFamily80286 ProcessorFamily = 0x04 // 80286 297 ProcessorFamily80386 ProcessorFamily = 0x05 // 80386 298 ProcessorFamily80486 ProcessorFamily = 0x06 // 80486 299 ProcessorFamily8087 ProcessorFamily = 0x07 // 8087 300 ProcessorFamily80287 ProcessorFamily = 0x08 // 80287 301 ProcessorFamily80387 ProcessorFamily = 0x09 // 80387 302 ProcessorFamily80487 ProcessorFamily = 0x0a // 80487 303 ProcessorFamilyPentium ProcessorFamily = 0x0b // Pentium 304 ProcessorFamilyPentiumPro ProcessorFamily = 0x0c // Pentium Pro 305 ProcessorFamilyPentiumII ProcessorFamily = 0x0d // Pentium II 306 ProcessorFamilyPentiumMMX ProcessorFamily = 0x0e // Pentium MMX 307 ProcessorFamilyCeleron ProcessorFamily = 0x0f // Celeron 308 ProcessorFamilyPentiumIIXeon ProcessorFamily = 0x10 // Pentium II Xeon 309 ProcessorFamilyPentiumIII ProcessorFamily = 0x11 // Pentium III 310 ProcessorFamilyM1 ProcessorFamily = 0x12 // M1 311 ProcessorFamilyM2 ProcessorFamily = 0x13 // M2 312 ProcessorFamilyCeleronM ProcessorFamily = 0x14 // Celeron M 313 ProcessorFamilyPentium4HT ProcessorFamily = 0x15 // Pentium 4 HT 314 ProcessorFamilyDuron ProcessorFamily = 0x18 // Duron 315 ProcessorFamilyK5 ProcessorFamily = 0x19 // K5 316 ProcessorFamilyK6 ProcessorFamily = 0x1a // K6 317 ProcessorFamilyK62 ProcessorFamily = 0x1b // K6-2 318 ProcessorFamilyK63 ProcessorFamily = 0x1c // K6-3 319 ProcessorFamilyAthlon ProcessorFamily = 0x1d // Athlon 320 ProcessorFamilyAMD29000 ProcessorFamily = 0x1e // AMD29000 321 ProcessorFamilyK62Plus ProcessorFamily = 0x1f // K6-2+ 322 ProcessorFamilyPowerPC ProcessorFamily = 0x20 // Power PC 323 ProcessorFamilyPowerPC601 ProcessorFamily = 0x21 // Power PC 601 324 ProcessorFamilyPowerPC603 ProcessorFamily = 0x22 // Power PC 603 325 ProcessorFamilyPowerPC603Plus ProcessorFamily = 0x23 // Power PC 603+ 326 ProcessorFamilyPowerPC604 ProcessorFamily = 0x24 // Power PC 604 327 ProcessorFamilyPowerPC620 ProcessorFamily = 0x25 // Power PC 620 328 ProcessorFamilyPowerPCX704 ProcessorFamily = 0x26 // Power PC x704 329 ProcessorFamilyPowerPC750 ProcessorFamily = 0x27 // Power PC 750 330 ProcessorFamilyCoreDuo ProcessorFamily = 0x28 // Core Duo 331 ProcessorFamilyCoreDuoMobile ProcessorFamily = 0x29 // Core Duo Mobile 332 ProcessorFamilyCoreSoloMobile ProcessorFamily = 0x2a // Core Solo Mobile 333 ProcessorFamilyAtom ProcessorFamily = 0x2b // Atom 334 ProcessorFamilyCoreM ProcessorFamily = 0x2c // Core M 335 ProcessorFamilyCoreM3 ProcessorFamily = 0x2d // Core m3 336 ProcessorFamilyCoreM5 ProcessorFamily = 0x2e // Core m5 337 ProcessorFamilyCoreM7 ProcessorFamily = 0x2f // Core m7 338 ProcessorFamilyAlpha ProcessorFamily = 0x30 // Alpha 339 ProcessorFamilyAlpha21064 ProcessorFamily = 0x31 // Alpha 21064 340 ProcessorFamilyAlpha21066 ProcessorFamily = 0x32 // Alpha 21066 341 ProcessorFamilyAlpha21164 ProcessorFamily = 0x33 // Alpha 21164 342 ProcessorFamilyAlpha21164PC ProcessorFamily = 0x34 // Alpha 21164PC 343 ProcessorFamilyAlpha21164a ProcessorFamily = 0x35 // Alpha 21164a 344 ProcessorFamilyAlpha21264 ProcessorFamily = 0x36 // Alpha 21264 345 ProcessorFamilyAlpha21364 ProcessorFamily = 0x37 // Alpha 21364 346 ProcessorFamilyTurionIIUltraDualCoreMobileM ProcessorFamily = 0x38 // Turion II Ultra Dual-Core Mobile M 347 ProcessorFamilyTurionIIDualCoreMobileM ProcessorFamily = 0x39 // Turion II Dual-Core Mobile M 348 ProcessorFamilyAthlonIIDualCoreM ProcessorFamily = 0x3a // Athlon II Dual-Core M 349 ProcessorFamilyOpteron6100 ProcessorFamily = 0x3b // Opteron 6100 350 ProcessorFamilyOpteron4100 ProcessorFamily = 0x3c // Opteron 4100 351 ProcessorFamilyOpteron6200 ProcessorFamily = 0x3d // Opteron 6200 352 ProcessorFamilyOpteron4200 ProcessorFamily = 0x3e // Opteron 4200 353 ProcessorFamilyFX ProcessorFamily = 0x3f // FX 354 ProcessorFamilyMIPS ProcessorFamily = 0x40 // MIPS 355 ProcessorFamilyMIPSR4000 ProcessorFamily = 0x41 // MIPS R4000 356 ProcessorFamilyMIPSR4200 ProcessorFamily = 0x42 // MIPS R4200 357 ProcessorFamilyMIPSR4400 ProcessorFamily = 0x43 // MIPS R4400 358 ProcessorFamilyMIPSR4600 ProcessorFamily = 0x44 // MIPS R4600 359 ProcessorFamilyMIPSR10000 ProcessorFamily = 0x45 // MIPS R10000 360 ProcessorFamilyCSeries ProcessorFamily = 0x46 // C-Series 361 ProcessorFamilyESeries ProcessorFamily = 0x47 // E-Series 362 ProcessorFamilyASeries ProcessorFamily = 0x48 // A-Series 363 ProcessorFamilyGSeries ProcessorFamily = 0x49 // G-Series 364 ProcessorFamilyZSeries ProcessorFamily = 0x4a // Z-Series 365 ProcessorFamilyRSeries ProcessorFamily = 0x4b // R-Series 366 ProcessorFamilyOpteron4300 ProcessorFamily = 0x4c // Opteron 4300 367 ProcessorFamilyOpteron6300 ProcessorFamily = 0x4d // Opteron 6300 368 ProcessorFamilyOpteron3300 ProcessorFamily = 0x4e // Opteron 3300 369 ProcessorFamilyFirePro ProcessorFamily = 0x4f // FirePro 370 ProcessorFamilySPARC ProcessorFamily = 0x50 // SPARC 371 ProcessorFamilySuperSPARC ProcessorFamily = 0x51 // SuperSPARC 372 ProcessorFamilyMicroSPARCII ProcessorFamily = 0x52 // MicroSPARC II 373 ProcessorFamilyMicroSPARCIIep ProcessorFamily = 0x53 // MicroSPARC IIep 374 ProcessorFamilyUltraSPARC ProcessorFamily = 0x54 // UltraSPARC 375 ProcessorFamilyUltraSPARCII ProcessorFamily = 0x55 // UltraSPARC II 376 ProcessorFamilyUltraSPARCIIi ProcessorFamily = 0x56 // UltraSPARC IIi 377 ProcessorFamilyUltraSPARCIII ProcessorFamily = 0x57 // UltraSPARC III 378 ProcessorFamilyUltraSPARCIIIi ProcessorFamily = 0x58 // UltraSPARC IIIi 379 ProcessorFamily68040 ProcessorFamily = 0x60 // 68040 380 ProcessorFamily68xxx ProcessorFamily = 0x61 // 68xxx 381 ProcessorFamily68000 ProcessorFamily = 0x62 // 68000 382 ProcessorFamily68010 ProcessorFamily = 0x63 // 68010 383 ProcessorFamily68020 ProcessorFamily = 0x64 // 68020 384 ProcessorFamily68030 ProcessorFamily = 0x65 // 68030 385 ProcessorFamilyAthlonX4 ProcessorFamily = 0x66 // Athlon X4 386 ProcessorFamilyOpteronX1000 ProcessorFamily = 0x67 // Opteron X1000 387 ProcessorFamilyOpteronX2000 ProcessorFamily = 0x68 // Opteron X2000 388 ProcessorFamilyOpteronASeries ProcessorFamily = 0x69 // Opteron A-Series 389 ProcessorFamilyOpteronX3000 ProcessorFamily = 0x6a // Opteron X3000 390 ProcessorFamilyZen ProcessorFamily = 0x6b // Zen 391 ProcessorFamilyHobbit ProcessorFamily = 0x70 // Hobbit 392 ProcessorFamilyCrusoeTM5000 ProcessorFamily = 0x78 // Crusoe TM5000 393 ProcessorFamilyCrusoeTM3000 ProcessorFamily = 0x79 // Crusoe TM3000 394 ProcessorFamilyEfficeonTM8000 ProcessorFamily = 0x7a // Efficeon TM8000 395 ProcessorFamilyWeitek ProcessorFamily = 0x80 // Weitek 396 ProcessorFamilyItanium ProcessorFamily = 0x82 // Itanium 397 ProcessorFamilyAthlon64 ProcessorFamily = 0x83 // Athlon 64 398 ProcessorFamilyOpteron ProcessorFamily = 0x84 // Opteron 399 ProcessorFamilySempron ProcessorFamily = 0x85 // Sempron 400 ProcessorFamilyTurion64 ProcessorFamily = 0x86 // Turion 64 401 ProcessorFamilyDualCoreOpteron ProcessorFamily = 0x87 // Dual-Core Opteron 402 ProcessorFamilyAthlon64X2 ProcessorFamily = 0x88 // Athlon 64 X2 403 ProcessorFamilyTurion64X2 ProcessorFamily = 0x89 // Turion 64 X2 404 ProcessorFamilyQuadCoreOpteron ProcessorFamily = 0x8a // Quad-Core Opteron 405 ProcessorFamilyThirdGenerationOpteron ProcessorFamily = 0x8b // Third-Generation Opteron 406 ProcessorFamilyPhenomFX ProcessorFamily = 0x8c // Phenom FX 407 ProcessorFamilyPhenomX4 ProcessorFamily = 0x8d // Phenom X4 408 ProcessorFamilyPhenomX2 ProcessorFamily = 0x8e // Phenom X2 409 ProcessorFamilyAthlonX2 ProcessorFamily = 0x8f // Athlon X2 410 ProcessorFamilyPARISC ProcessorFamily = 0x90 // PA-RISC 411 ProcessorFamilyPARISC8500 ProcessorFamily = 0x91 // PA-RISC 8500 412 ProcessorFamilyPARISC8000 ProcessorFamily = 0x92 // PA-RISC 8000 413 ProcessorFamilyPARISC7300LC ProcessorFamily = 0x93 // PA-RISC 7300LC 414 ProcessorFamilyPARISC7200 ProcessorFamily = 0x94 // PA-RISC 7200 415 ProcessorFamilyPARISC7100LC ProcessorFamily = 0x95 // PA-RISC 7100LC 416 ProcessorFamilyPARISC7100 ProcessorFamily = 0x96 // PA-RISC 7100 417 ProcessorFamilyV30 ProcessorFamily = 0xa0 // V30 418 ProcessorFamilyQuadCoreXeon3200 ProcessorFamily = 0xa1 // Quad-Core Xeon 3200 419 ProcessorFamilyDualCoreXeon3000 ProcessorFamily = 0xa2 // Dual-Core Xeon 3000 420 ProcessorFamilyQuadCoreXeon5300 ProcessorFamily = 0xa3 // Quad-Core Xeon 5300 421 ProcessorFamilyDualCoreXeon5100 ProcessorFamily = 0xa4 // Dual-Core Xeon 5100 422 ProcessorFamilyDualCoreXeon5000 ProcessorFamily = 0xa5 // Dual-Core Xeon 5000 423 ProcessorFamilyDualCoreXeonLV ProcessorFamily = 0xa6 // Dual-Core Xeon LV 424 ProcessorFamilyDualCoreXeonULV ProcessorFamily = 0xa7 // Dual-Core Xeon ULV 425 ProcessorFamilyDualCoreXeon7100 ProcessorFamily = 0xa8 // Dual-Core Xeon 7100 426 ProcessorFamilyQuadCoreXeon5400 ProcessorFamily = 0xa9 // Quad-Core Xeon 5400 427 ProcessorFamilyQuadCoreXeon ProcessorFamily = 0xaa // Quad-Core Xeon 428 ProcessorFamilyDualCoreXeon5200 ProcessorFamily = 0xab // Dual-Core Xeon 5200 429 ProcessorFamilyDualCoreXeon7200 ProcessorFamily = 0xac // Dual-Core Xeon 7200 430 ProcessorFamilyQuadCoreXeon7300 ProcessorFamily = 0xad // Quad-Core Xeon 7300 431 ProcessorFamilyQuadCoreXeon7400 ProcessorFamily = 0xae // Quad-Core Xeon 7400 432 ProcessorFamilyMultiCoreXeon7400 ProcessorFamily = 0xaf // Multi-Core Xeon 7400 433 ProcessorFamilyPentiumIIIXeon ProcessorFamily = 0xb0 // Pentium III Xeon 434 ProcessorFamilyPentiumIIISpeedstep ProcessorFamily = 0xb1 // Pentium III Speedstep 435 ProcessorFamilyPentium4 ProcessorFamily = 0xb2 // Pentium 4 436 ProcessorFamilyXeon ProcessorFamily = 0xb3 // Xeon 437 ProcessorFamilyAS400 ProcessorFamily = 0xb4 // AS400 438 ProcessorFamilyXeonMP ProcessorFamily = 0xb5 // Xeon MP 439 ProcessorFamilyAthlonXP ProcessorFamily = 0xb6 // Athlon XP 440 ProcessorFamilyAthlonMP ProcessorFamily = 0xb7 // Athlon MP 441 ProcessorFamilyItanium2 ProcessorFamily = 0xb8 // Itanium 2 442 ProcessorFamilyPentiumM ProcessorFamily = 0xb9 // Pentium M 443 ProcessorFamilyCeleronD ProcessorFamily = 0xba // Celeron D 444 ProcessorFamilyPentiumD ProcessorFamily = 0xbb // Pentium D 445 ProcessorFamilyPentiumEE ProcessorFamily = 0xbc // Pentium EE 446 ProcessorFamilyCoreSolo ProcessorFamily = 0xbd // Core Solo 447 ProcessorFamilyHandledAsASpecialCase ProcessorFamily = 0xbe // handled as a special case */ 448 ProcessorFamilyCore2Duo ProcessorFamily = 0xbf // Core 2 Duo 449 ProcessorFamilyCore2Solo ProcessorFamily = 0xc0 // Core 2 Solo 450 ProcessorFamilyCore2Extreme ProcessorFamily = 0xc1 // Core 2 Extreme 451 ProcessorFamilyCore2Quad ProcessorFamily = 0xc2 // Core 2 Quad 452 ProcessorFamilyCore2ExtremeMobile ProcessorFamily = 0xc3 // Core 2 Extreme Mobile 453 ProcessorFamilyCore2DuoMobile ProcessorFamily = 0xc4 // Core 2 Duo Mobile 454 ProcessorFamilyCore2SoloMobile ProcessorFamily = 0xc5 // Core 2 Solo Mobile 455 ProcessorFamilyCoreI7 ProcessorFamily = 0xc6 // Core i7 456 ProcessorFamilyDualCoreCeleron ProcessorFamily = 0xc7 // Dual-Core Celeron 457 ProcessorFamilyIBM390 ProcessorFamily = 0xc8 // IBM390 458 ProcessorFamilyG4 ProcessorFamily = 0xc9 // G4 459 ProcessorFamilyG5 ProcessorFamily = 0xca // G5 460 ProcessorFamilyESA390G6 ProcessorFamily = 0xcb // ESA/390 G6 461 ProcessorFamilyZarchitecture ProcessorFamily = 0xcc // z/Architecture 462 ProcessorFamilyCoreI5 ProcessorFamily = 0xcd // Core i5 463 ProcessorFamilyCoreI3 ProcessorFamily = 0xce // Core i3 464 ProcessorFamilyCoreI9 ProcessorFamily = 0xcf // Core i9 465 ProcessorFamilyC7M ProcessorFamily = 0xd2 // C7-M 466 ProcessorFamilyC7D ProcessorFamily = 0xd3 // C7-D 467 ProcessorFamilyC7 ProcessorFamily = 0xd4 // C7 468 ProcessorFamilyEden ProcessorFamily = 0xd5 // Eden 469 ProcessorFamilyMultiCoreXeon ProcessorFamily = 0xd6 // Multi-Core Xeon 470 ProcessorFamilyDualCoreXeon3xxx ProcessorFamily = 0xd7 // Dual-Core Xeon 3xxx 471 ProcessorFamilyQuadCoreXeon3xxx ProcessorFamily = 0xd8 // Quad-Core Xeon 3xxx 472 ProcessorFamilyNano ProcessorFamily = 0xd9 // Nano 473 ProcessorFamilyDualCoreXeon5xxx ProcessorFamily = 0xda // Dual-Core Xeon 5xxx 474 ProcessorFamilyQuadCoreXeon5xxx ProcessorFamily = 0xdb // Quad-Core Xeon 5xxx 475 ProcessorFamilyDualCoreXeon7xxx ProcessorFamily = 0xdd // Dual-Core Xeon 7xxx 476 ProcessorFamilyQuadCoreXeon7xxx ProcessorFamily = 0xde // Quad-Core Xeon 7xxx 477 ProcessorFamilyMultiCoreXeon7xxx ProcessorFamily = 0xdf // Multi-Core Xeon 7xxx 478 ProcessorFamilyMultiCoreXeon3400 ProcessorFamily = 0xe0 // Multi-Core Xeon 3400 479 ProcessorFamilyOpteron3000 ProcessorFamily = 0xe4 // Opteron 3000 480 ProcessorFamilySempronII ProcessorFamily = 0xe5 // Sempron II 481 ProcessorFamilyEmbeddedOpteronQuadCore ProcessorFamily = 0xe6 // Embedded Opteron Quad-Core 482 ProcessorFamilyPhenomTripleCore ProcessorFamily = 0xe7 // Phenom Triple-Core 483 ProcessorFamilyTurionUltraDualCoreMobile ProcessorFamily = 0xe8 // Turion Ultra Dual-Core Mobile 484 ProcessorFamilyTurionDualCoreMobile ProcessorFamily = 0xe9 // Turion Dual-Core Mobile 485 ProcessorFamilyAthlonDualCore ProcessorFamily = 0xea // Athlon Dual-Core 486 ProcessorFamilySempronSI ProcessorFamily = 0xeb // Sempron SI 487 ProcessorFamilyPhenomII ProcessorFamily = 0xec // Phenom II 488 ProcessorFamilyAthlonII ProcessorFamily = 0xed // Athlon II 489 ProcessorFamilySixCoreOpteron ProcessorFamily = 0xee // Six-Core Opteron 490 ProcessorFamilySempronM ProcessorFamily = 0xef // Sempron M 491 ProcessorFamilyI860 ProcessorFamily = 0xfa // i860 492 ProcessorFamilyI960 ProcessorFamily = 0xfb // i960 493 ProcessorFamilyARMv7 ProcessorFamily = 0x100 // ARMv7 494 ProcessorFamilyARMv8 ProcessorFamily = 0x101 // ARMv8 495 ProcessorFamilySH3 ProcessorFamily = 0x104 // SH-3 496 ProcessorFamilySH4 ProcessorFamily = 0x105 // SH-4 497 ProcessorFamilyARM ProcessorFamily = 0x118 // ARM 498 ProcessorFamilyStrongARM ProcessorFamily = 0x119 // StrongARM 499 ProcessorFamily6x86 ProcessorFamily = 0x12c // 6x86 500 ProcessorFamilyMediaGX ProcessorFamily = 0x12d // MediaGX 501 ProcessorFamilyMII ProcessorFamily = 0x12e // MII 502 ProcessorFamilyWinChip ProcessorFamily = 0x140 // WinChip 503 ProcessorFamilyDSP ProcessorFamily = 0x15e // DSP 504 ProcessorFamilyVideoProcessor ProcessorFamily = 0x1f4 // Video Processor 505 ) 506 507 func (v ProcessorFamily) String() string { 508 names := map[ProcessorFamily]string{ 509 ProcessorFamilyOther: "Other", 510 ProcessorFamilyUnknown: "Unknown", 511 ProcessorFamily8086: "8086", 512 ProcessorFamily80286: "80286", 513 ProcessorFamily80386: "80386", 514 ProcessorFamily80486: "80486", 515 ProcessorFamily8087: "8087", 516 ProcessorFamily80287: "80287", 517 ProcessorFamily80387: "80387", 518 ProcessorFamily80487: "80487", 519 ProcessorFamilyPentium: "Pentium", 520 ProcessorFamilyPentiumPro: "Pentium Pro", 521 ProcessorFamilyPentiumII: "Pentium II", 522 ProcessorFamilyPentiumMMX: "Pentium MMX", 523 ProcessorFamilyCeleron: "Celeron", 524 ProcessorFamilyPentiumIIXeon: "Pentium II Xeon", 525 ProcessorFamilyPentiumIII: "Pentium III", 526 ProcessorFamilyM1: "M1", 527 ProcessorFamilyM2: "M2", 528 ProcessorFamilyCeleronM: "Celeron M", 529 ProcessorFamilyPentium4HT: "Pentium 4 HT", 530 ProcessorFamilyDuron: "Duron", 531 ProcessorFamilyK5: "K5", 532 ProcessorFamilyK6: "K6", 533 ProcessorFamilyK62: "K6-2", 534 ProcessorFamilyK63: "K6-3", 535 ProcessorFamilyAthlon: "Athlon", 536 ProcessorFamilyAMD29000: "AMD29000", 537 ProcessorFamilyK62Plus: "K6-2+", 538 ProcessorFamilyPowerPC: "Power PC", 539 ProcessorFamilyPowerPC601: "Power PC 601", 540 ProcessorFamilyPowerPC603: "Power PC 603", 541 ProcessorFamilyPowerPC603Plus: "Power PC 603+", 542 ProcessorFamilyPowerPC604: "Power PC 604", 543 ProcessorFamilyPowerPC620: "Power PC 620", 544 ProcessorFamilyPowerPCX704: "Power PC x704", 545 ProcessorFamilyPowerPC750: "Power PC 750", 546 ProcessorFamilyCoreDuo: "Core Duo", 547 ProcessorFamilyCoreDuoMobile: "Core Duo Mobile", 548 ProcessorFamilyCoreSoloMobile: "Core Solo Mobile", 549 ProcessorFamilyAtom: "Atom", 550 ProcessorFamilyCoreM: "Core M", 551 ProcessorFamilyCoreM3: "Core m3", 552 ProcessorFamilyCoreM5: "Core m5", 553 ProcessorFamilyCoreM7: "Core m7", 554 ProcessorFamilyAlpha: "Alpha", 555 ProcessorFamilyAlpha21064: "Alpha 21064", 556 ProcessorFamilyAlpha21066: "Alpha 21066", 557 ProcessorFamilyAlpha21164: "Alpha 21164", 558 ProcessorFamilyAlpha21164PC: "Alpha 21164PC", 559 ProcessorFamilyAlpha21164a: "Alpha 21164a", 560 ProcessorFamilyAlpha21264: "Alpha 21264", 561 ProcessorFamilyAlpha21364: "Alpha 21364", 562 ProcessorFamilyTurionIIUltraDualCoreMobileM: "Turion II Ultra Dual-Core Mobile M", 563 ProcessorFamilyTurionIIDualCoreMobileM: "Turion II Dual-Core Mobile M", 564 ProcessorFamilyAthlonIIDualCoreM: "Athlon II Dual-Core M", 565 ProcessorFamilyOpteron6100: "Opteron 6100", 566 ProcessorFamilyOpteron4100: "Opteron 4100", 567 ProcessorFamilyOpteron6200: "Opteron 6200", 568 ProcessorFamilyOpteron4200: "Opteron 4200", 569 ProcessorFamilyFX: "FX", 570 ProcessorFamilyMIPS: "MIPS", 571 ProcessorFamilyMIPSR4000: "MIPS R4000", 572 ProcessorFamilyMIPSR4200: "MIPS R4200", 573 ProcessorFamilyMIPSR4400: "MIPS R4400", 574 ProcessorFamilyMIPSR4600: "MIPS R4600", 575 ProcessorFamilyMIPSR10000: "MIPS R10000", 576 ProcessorFamilyCSeries: "C-Series", 577 ProcessorFamilyESeries: "E-Series", 578 ProcessorFamilyASeries: "A-Series", 579 ProcessorFamilyGSeries: "G-Series", 580 ProcessorFamilyZSeries: "Z-Series", 581 ProcessorFamilyRSeries: "R-Series", 582 ProcessorFamilyOpteron4300: "Opteron 4300", 583 ProcessorFamilyOpteron6300: "Opteron 6300", 584 ProcessorFamilyOpteron3300: "Opteron 3300", 585 ProcessorFamilyFirePro: "FirePro", 586 ProcessorFamilySPARC: "SPARC", 587 ProcessorFamilySuperSPARC: "SuperSPARC", 588 ProcessorFamilyMicroSPARCII: "MicroSPARC II", 589 ProcessorFamilyMicroSPARCIIep: "MicroSPARC IIep", 590 ProcessorFamilyUltraSPARC: "UltraSPARC", 591 ProcessorFamilyUltraSPARCII: "UltraSPARC II", 592 ProcessorFamilyUltraSPARCIIi: "UltraSPARC IIi", 593 ProcessorFamilyUltraSPARCIII: "UltraSPARC III", 594 ProcessorFamilyUltraSPARCIIIi: "UltraSPARC IIIi", 595 ProcessorFamily68040: "68040", 596 ProcessorFamily68xxx: "68xxx", 597 ProcessorFamily68000: "68000", 598 ProcessorFamily68010: "68010", 599 ProcessorFamily68020: "68020", 600 ProcessorFamily68030: "68030", 601 ProcessorFamilyAthlonX4: "Athlon X4", 602 ProcessorFamilyOpteronX1000: "Opteron X1000", 603 ProcessorFamilyOpteronX2000: "Opteron X2000", 604 ProcessorFamilyOpteronASeries: "Opteron A-Series", 605 ProcessorFamilyOpteronX3000: "Opteron X3000", 606 ProcessorFamilyZen: "Zen", 607 ProcessorFamilyHobbit: "Hobbit", 608 ProcessorFamilyCrusoeTM5000: "Crusoe TM5000", 609 ProcessorFamilyCrusoeTM3000: "Crusoe TM3000", 610 ProcessorFamilyEfficeonTM8000: "Efficeon TM8000", 611 ProcessorFamilyWeitek: "Weitek", 612 ProcessorFamilyItanium: "Itanium", 613 ProcessorFamilyAthlon64: "Athlon 64", 614 ProcessorFamilyOpteron: "Opteron", 615 ProcessorFamilySempron: "Sempron", 616 ProcessorFamilyTurion64: "Turion 64", 617 ProcessorFamilyDualCoreOpteron: "Dual-Core Opteron", 618 ProcessorFamilyAthlon64X2: "Athlon 64 X2", 619 ProcessorFamilyTurion64X2: "Turion 64 X2", 620 ProcessorFamilyQuadCoreOpteron: "Quad-Core Opteron", 621 ProcessorFamilyThirdGenerationOpteron: "Third-Generation Opteron", 622 ProcessorFamilyPhenomFX: "Phenom FX", 623 ProcessorFamilyPhenomX4: "Phenom X4", 624 ProcessorFamilyPhenomX2: "Phenom X2", 625 ProcessorFamilyAthlonX2: "Athlon X2", 626 ProcessorFamilyPARISC: "PA-RISC", 627 ProcessorFamilyPARISC8500: "PA-RISC 8500", 628 ProcessorFamilyPARISC8000: "PA-RISC 8000", 629 ProcessorFamilyPARISC7300LC: "PA-RISC 7300LC", 630 ProcessorFamilyPARISC7200: "PA-RISC 7200", 631 ProcessorFamilyPARISC7100LC: "PA-RISC 7100LC", 632 ProcessorFamilyPARISC7100: "PA-RISC 7100", 633 ProcessorFamilyV30: "V30", 634 ProcessorFamilyQuadCoreXeon3200: "Quad-Core Xeon 3200", 635 ProcessorFamilyDualCoreXeon3000: "Dual-Core Xeon 3000", 636 ProcessorFamilyQuadCoreXeon5300: "Quad-Core Xeon 5300", 637 ProcessorFamilyDualCoreXeon5100: "Dual-Core Xeon 5100", 638 ProcessorFamilyDualCoreXeon5000: "Dual-Core Xeon 5000", 639 ProcessorFamilyDualCoreXeonLV: "Dual-Core Xeon LV", 640 ProcessorFamilyDualCoreXeonULV: "Dual-Core Xeon ULV", 641 ProcessorFamilyDualCoreXeon7100: "Dual-Core Xeon 7100", 642 ProcessorFamilyQuadCoreXeon5400: "Quad-Core Xeon 5400", 643 ProcessorFamilyQuadCoreXeon: "Quad-Core Xeon", 644 ProcessorFamilyDualCoreXeon5200: "Dual-Core Xeon 5200", 645 ProcessorFamilyDualCoreXeon7200: "Dual-Core Xeon 7200", 646 ProcessorFamilyQuadCoreXeon7300: "Quad-Core Xeon 7300", 647 ProcessorFamilyQuadCoreXeon7400: "Quad-Core Xeon 7400", 648 ProcessorFamilyMultiCoreXeon7400: "Multi-Core Xeon 7400", 649 ProcessorFamilyPentiumIIIXeon: "Pentium III Xeon", 650 ProcessorFamilyPentiumIIISpeedstep: "Pentium III Speedstep", 651 ProcessorFamilyPentium4: "Pentium 4", 652 ProcessorFamilyXeon: "Xeon", 653 ProcessorFamilyAS400: "AS400", 654 ProcessorFamilyXeonMP: "Xeon MP", 655 ProcessorFamilyAthlonXP: "Athlon XP", 656 ProcessorFamilyAthlonMP: "Athlon MP", 657 ProcessorFamilyItanium2: "Itanium 2", 658 ProcessorFamilyPentiumM: "Pentium M", 659 ProcessorFamilyCeleronD: "Celeron D", 660 ProcessorFamilyPentiumD: "Pentium D", 661 ProcessorFamilyPentiumEE: "Pentium EE", 662 ProcessorFamilyCoreSolo: "Core Solo", 663 ProcessorFamilyHandledAsASpecialCase: "handled as a special case */", 664 ProcessorFamilyCore2Duo: "Core 2 Duo", 665 ProcessorFamilyCore2Solo: "Core 2 Solo", 666 ProcessorFamilyCore2Extreme: "Core 2 Extreme", 667 ProcessorFamilyCore2Quad: "Core 2 Quad", 668 ProcessorFamilyCore2ExtremeMobile: "Core 2 Extreme Mobile", 669 ProcessorFamilyCore2DuoMobile: "Core 2 Duo Mobile", 670 ProcessorFamilyCore2SoloMobile: "Core 2 Solo Mobile", 671 ProcessorFamilyCoreI7: "Core i7", 672 ProcessorFamilyDualCoreCeleron: "Dual-Core Celeron", 673 ProcessorFamilyIBM390: "IBM390", 674 ProcessorFamilyG4: "G4", 675 ProcessorFamilyG5: "G5", 676 ProcessorFamilyESA390G6: "ESA/390 G6", 677 ProcessorFamilyZarchitecture: "z/Architecture", 678 ProcessorFamilyCoreI5: "Core i5", 679 ProcessorFamilyCoreI3: "Core i3", 680 ProcessorFamilyCoreI9: "Core i9", 681 ProcessorFamilyC7M: "C7-M", 682 ProcessorFamilyC7D: "C7-D", 683 ProcessorFamilyC7: "C7", 684 ProcessorFamilyEden: "Eden", 685 ProcessorFamilyMultiCoreXeon: "Multi-Core Xeon", 686 ProcessorFamilyDualCoreXeon3xxx: "Dual-Core Xeon 3xxx", 687 ProcessorFamilyQuadCoreXeon3xxx: "Quad-Core Xeon 3xxx", 688 ProcessorFamilyNano: "Nano", 689 ProcessorFamilyDualCoreXeon5xxx: "Dual-Core Xeon 5xxx", 690 ProcessorFamilyQuadCoreXeon5xxx: "Quad-Core Xeon 5xxx", 691 ProcessorFamilyDualCoreXeon7xxx: "Dual-Core Xeon 7xxx", 692 ProcessorFamilyQuadCoreXeon7xxx: "Quad-Core Xeon 7xxx", 693 ProcessorFamilyMultiCoreXeon7xxx: "Multi-Core Xeon 7xxx", 694 ProcessorFamilyMultiCoreXeon3400: "Multi-Core Xeon 3400", 695 ProcessorFamilyOpteron3000: "Opteron 3000", 696 ProcessorFamilySempronII: "Sempron II", 697 ProcessorFamilyEmbeddedOpteronQuadCore: "Embedded Opteron Quad-Core", 698 ProcessorFamilyPhenomTripleCore: "Phenom Triple-Core", 699 ProcessorFamilyTurionUltraDualCoreMobile: "Turion Ultra Dual-Core Mobile", 700 ProcessorFamilyTurionDualCoreMobile: "Turion Dual-Core Mobile", 701 ProcessorFamilyAthlonDualCore: "Athlon Dual-Core", 702 ProcessorFamilySempronSI: "Sempron SI", 703 ProcessorFamilyPhenomII: "Phenom II", 704 ProcessorFamilyAthlonII: "Athlon II", 705 ProcessorFamilySixCoreOpteron: "Six-Core Opteron", 706 ProcessorFamilySempronM: "Sempron M", 707 ProcessorFamilyI860: "i860", 708 ProcessorFamilyI960: "i960", 709 ProcessorFamilyARMv7: "ARMv7", 710 ProcessorFamilyARMv8: "ARMv8", 711 ProcessorFamilySH3: "SH-3", 712 ProcessorFamilySH4: "SH-4", 713 ProcessorFamilyARM: "ARM", 714 ProcessorFamilyStrongARM: "StrongARM", 715 ProcessorFamily6x86: "6x86", 716 ProcessorFamilyMediaGX: "MediaGX", 717 ProcessorFamilyMII: "MII", 718 ProcessorFamilyWinChip: "WinChip", 719 ProcessorFamilyDSP: "DSP", 720 ProcessorFamilyVideoProcessor: "Video Processor", 721 } 722 if name, ok := names[v]; ok { 723 return name 724 } 725 return fmt.Sprintf("%#x", uint8(v)) 726 } 727 728 // ProcessorStatus is defined in DSP0134 7.5. 729 type ProcessorStatus uint8 730 731 var processorStatusStr = []string{ 732 "Unknown", "Enabled", "Disabled By User", "Disabled By BIOS", "Idle", "Reserved5", "Reserved6", "Other", 733 } 734 735 func (v ProcessorStatus) String() string { 736 if v&0x40 == 0 { 737 return "Unpopulated" 738 } 739 return "Populated, " + processorStatusStr[v&7] 740 } 741 742 // ProcessorUpgrade is defined in DSP0134 7.5.5. 743 type ProcessorUpgrade uint8 744 745 // ProcessorUpgrade values are defined in DSP0134 7.5.5. 746 const ( 747 ProcessorUpgradeOther ProcessorUpgrade = 0x01 // Other 748 ProcessorUpgradeUnknown ProcessorUpgrade = 0x02 // Unknown 749 ProcessorUpgradeDaughterBoard ProcessorUpgrade = 0x03 // Daughter Board 750 ProcessorUpgradeZIFSocket ProcessorUpgrade = 0x04 // ZIF Socket 751 ProcessorUpgradeReplaceablePiggyBack ProcessorUpgrade = 0x05 // Replaceable Piggy Back 752 ProcessorUpgradeNone ProcessorUpgrade = 0x06 // None 753 ProcessorUpgradeLIFSocket ProcessorUpgrade = 0x07 // LIF Socket 754 ProcessorUpgradeSlot1 ProcessorUpgrade = 0x08 // Slot 1 755 ProcessorUpgradeSlot2 ProcessorUpgrade = 0x09 // Slot 2 756 ProcessorUpgrade370pinSocket ProcessorUpgrade = 0x0a // 370-pin Socket 757 ProcessorUpgradeSlotA ProcessorUpgrade = 0x0b // Slot A 758 ProcessorUpgradeSlotM ProcessorUpgrade = 0x0c // Slot M 759 ProcessorUpgradeSocket423 ProcessorUpgrade = 0x0d // Socket 423 760 ProcessorUpgradeSocketA ProcessorUpgrade = 0x0e // Socket A (Socket 462) 761 ProcessorUpgradeSocket478 ProcessorUpgrade = 0x0f // Socket 478 762 ProcessorUpgradeSocket754 ProcessorUpgrade = 0x10 // Socket 754 763 ProcessorUpgradeSocket940 ProcessorUpgrade = 0x11 // Socket 940 764 ProcessorUpgradeSocket939 ProcessorUpgrade = 0x12 // Socket 939 765 ProcessorUpgradeSocketMpga604 ProcessorUpgrade = 0x13 // Socket mPGA604 766 ProcessorUpgradeSocketLGA771 ProcessorUpgrade = 0x14 // Socket LGA771 767 ProcessorUpgradeSocketLGA775 ProcessorUpgrade = 0x15 // Socket LGA775 768 ProcessorUpgradeSocketS1 ProcessorUpgrade = 0x16 // Socket S1 769 ProcessorUpgradeSocketAM2 ProcessorUpgrade = 0x17 // Socket AM2 770 ProcessorUpgradeSocketF1207 ProcessorUpgrade = 0x18 // Socket F (1207) 771 ProcessorUpgradeSocketLGA1366 ProcessorUpgrade = 0x19 // Socket LGA1366 772 ProcessorUpgradeSocketG34 ProcessorUpgrade = 0x1a // Socket G34 773 ProcessorUpgradeSocketAM3 ProcessorUpgrade = 0x1b // Socket AM3 774 ProcessorUpgradeSocketC32 ProcessorUpgrade = 0x1c // Socket C32 775 ProcessorUpgradeSocketLGA1156 ProcessorUpgrade = 0x1d // Socket LGA1156 776 ProcessorUpgradeSocketLGA1567 ProcessorUpgrade = 0x1e // Socket LGA1567 777 ProcessorUpgradeSocketPGA988A ProcessorUpgrade = 0x1f // Socket PGA988A 778 ProcessorUpgradeSocketBGA1288 ProcessorUpgrade = 0x20 // Socket BGA1288 779 ProcessorUpgradeSocketRpga988b ProcessorUpgrade = 0x21 // Socket rPGA988B 780 ProcessorUpgradeSocketBGA1023 ProcessorUpgrade = 0x22 // Socket BGA1023 781 ProcessorUpgradeSocketBGA1224 ProcessorUpgrade = 0x23 // Socket BGA1224 782 ProcessorUpgradeSocketBGA1155 ProcessorUpgrade = 0x24 // Socket BGA1155 783 ProcessorUpgradeSocketLGA1356 ProcessorUpgrade = 0x25 // Socket LGA1356 784 ProcessorUpgradeSocketLGA2011 ProcessorUpgrade = 0x26 // Socket LGA2011 785 ProcessorUpgradeSocketFS1 ProcessorUpgrade = 0x27 // Socket FS1 786 ProcessorUpgradeSocketFS2 ProcessorUpgrade = 0x28 // Socket FS2 787 ProcessorUpgradeSocketFM1 ProcessorUpgrade = 0x29 // Socket FM1 788 ProcessorUpgradeSocketFM2 ProcessorUpgrade = 0x2a // Socket FM2 789 ProcessorUpgradeSocketLGA20113 ProcessorUpgrade = 0x2b // Socket LGA2011-3 790 ProcessorUpgradeSocketLGA13563 ProcessorUpgrade = 0x2c // Socket LGA1356-3 791 ProcessorUpgradeSocketLGA1150 ProcessorUpgrade = 0x2d // Socket LGA1150 792 ProcessorUpgradeSocketBGA1168 ProcessorUpgrade = 0x2e // Socket BGA1168 793 ProcessorUpgradeSocketBGA1234 ProcessorUpgrade = 0x2f // Socket BGA1234 794 ProcessorUpgradeSocketBGA1364 ProcessorUpgrade = 0x30 // Socket BGA1364 795 ProcessorUpgradeSocketAM4 ProcessorUpgrade = 0x31 // Socket AM4 796 ProcessorUpgradeSocketLGA1151 ProcessorUpgrade = 0x32 // Socket LGA1151 797 ProcessorUpgradeSocketBGA1356 ProcessorUpgrade = 0x33 // Socket BGA1356 798 ProcessorUpgradeSocketBGA1440 ProcessorUpgrade = 0x34 // Socket BGA1440 799 ProcessorUpgradeSocketBGA1515 ProcessorUpgrade = 0x35 // Socket BGA1515 800 ProcessorUpgradeSocketLGA36471 ProcessorUpgrade = 0x36 // Socket LGA3647-1 801 ProcessorUpgradeSocketSP3 ProcessorUpgrade = 0x37 // Socket SP3 802 ProcessorUpgradeSocketSP3r2 ProcessorUpgrade = 0x38 // Socket SP3r2 803 ProcessorUpgradeSocketLGA2066 ProcessorUpgrade = 0x39 // Socket LGA2066 804 ProcessorUpgradeSocketBGA1392 ProcessorUpgrade = 0x3a // Socket BGA1392 805 ProcessorUpgradeSocketBGA1510 ProcessorUpgrade = 0x3b // Socket BGA1510 806 ProcessorUpgradeSocketBGA1528 ProcessorUpgrade = 0x3c // Socket BGA1528 807 ) 808 809 func (v ProcessorUpgrade) String() string { 810 names := map[ProcessorUpgrade]string{ 811 ProcessorUpgradeOther: "Other", 812 ProcessorUpgradeUnknown: "Unknown", 813 ProcessorUpgradeDaughterBoard: "Daughter Board", 814 ProcessorUpgradeZIFSocket: "ZIF Socket", 815 ProcessorUpgradeReplaceablePiggyBack: "Replaceable Piggy Back", 816 ProcessorUpgradeNone: "None", 817 ProcessorUpgradeLIFSocket: "LIF Socket", 818 ProcessorUpgradeSlot1: "Slot 1", 819 ProcessorUpgradeSlot2: "Slot 2", 820 ProcessorUpgrade370pinSocket: "370-pin Socket", 821 ProcessorUpgradeSlotA: "Slot A", 822 ProcessorUpgradeSlotM: "Slot M", 823 ProcessorUpgradeSocket423: "Socket 423", 824 ProcessorUpgradeSocketA: "Socket A (Socket 462)", 825 ProcessorUpgradeSocket478: "Socket 478", 826 ProcessorUpgradeSocket754: "Socket 754", 827 ProcessorUpgradeSocket940: "Socket 940", 828 ProcessorUpgradeSocket939: "Socket 939", 829 ProcessorUpgradeSocketMpga604: "Socket mPGA604", 830 ProcessorUpgradeSocketLGA771: "Socket LGA771", 831 ProcessorUpgradeSocketLGA775: "Socket LGA775", 832 ProcessorUpgradeSocketS1: "Socket S1", 833 ProcessorUpgradeSocketAM2: "Socket AM2", 834 ProcessorUpgradeSocketF1207: "Socket F (1207)", 835 ProcessorUpgradeSocketLGA1366: "Socket LGA1366", 836 ProcessorUpgradeSocketG34: "Socket G34", 837 ProcessorUpgradeSocketAM3: "Socket AM3", 838 ProcessorUpgradeSocketC32: "Socket C32", 839 ProcessorUpgradeSocketLGA1156: "Socket LGA1156", 840 ProcessorUpgradeSocketLGA1567: "Socket LGA1567", 841 ProcessorUpgradeSocketPGA988A: "Socket PGA988A", 842 ProcessorUpgradeSocketBGA1288: "Socket BGA1288", 843 ProcessorUpgradeSocketRpga988b: "Socket rPGA988B", 844 ProcessorUpgradeSocketBGA1023: "Socket BGA1023", 845 ProcessorUpgradeSocketBGA1224: "Socket BGA1224", 846 ProcessorUpgradeSocketBGA1155: "Socket BGA1155", 847 ProcessorUpgradeSocketLGA1356: "Socket LGA1356", 848 ProcessorUpgradeSocketLGA2011: "Socket LGA2011", 849 ProcessorUpgradeSocketFS1: "Socket FS1", 850 ProcessorUpgradeSocketFS2: "Socket FS2", 851 ProcessorUpgradeSocketFM1: "Socket FM1", 852 ProcessorUpgradeSocketFM2: "Socket FM2", 853 ProcessorUpgradeSocketLGA20113: "Socket LGA2011-3", 854 ProcessorUpgradeSocketLGA13563: "Socket LGA1356-3", 855 ProcessorUpgradeSocketLGA1150: "Socket LGA1150", 856 ProcessorUpgradeSocketBGA1168: "Socket BGA1168", 857 ProcessorUpgradeSocketBGA1234: "Socket BGA1234", 858 ProcessorUpgradeSocketBGA1364: "Socket BGA1364", 859 ProcessorUpgradeSocketAM4: "Socket AM4", 860 ProcessorUpgradeSocketLGA1151: "Socket LGA1151", 861 ProcessorUpgradeSocketBGA1356: "Socket BGA1356", 862 ProcessorUpgradeSocketBGA1440: "Socket BGA1440", 863 ProcessorUpgradeSocketBGA1515: "Socket BGA1515", 864 ProcessorUpgradeSocketLGA36471: "Socket LGA3647-1", 865 ProcessorUpgradeSocketSP3: "Socket SP3", 866 ProcessorUpgradeSocketSP3r2: "Socket SP3r2", 867 ProcessorUpgradeSocketLGA2066: "Socket LGA2066", 868 ProcessorUpgradeSocketBGA1392: "Socket BGA1392", 869 ProcessorUpgradeSocketBGA1510: "Socket BGA1510", 870 ProcessorUpgradeSocketBGA1528: "Socket BGA1528", 871 } 872 if name, ok := names[v]; ok { 873 return name 874 } 875 return fmt.Sprintf("%#x", uint8(v)) 876 } 877 878 // ProcessorCharacteristics values are defined in DSP0134 7.5.9. 879 type ProcessorCharacteristics uint16 880 881 // ProcessorCharacteristics fields are defined in DSP0134 x.x.x 882 const ( 883 ProcessorCharacteristicsReserved ProcessorCharacteristics = 1 << 0 // Reserved 884 ProcessorCharacteristicsUnknown ProcessorCharacteristics = 1 << 1 // Unknown 885 ProcessorCharacteristics64bitCapable ProcessorCharacteristics = 1 << 2 // 64-bit Capable 886 ProcessorCharacteristicsMultiCore ProcessorCharacteristics = 1 << 3 // Multi-Core 887 ProcessorCharacteristicsHardwareThread ProcessorCharacteristics = 1 << 4 // Hardware Thread 888 ProcessorCharacteristicsExecuteProtection ProcessorCharacteristics = 1 << 5 // Execute Protection 889 ProcessorCharacteristicsEnhancedVirtualization ProcessorCharacteristics = 1 << 6 // Enhanced Virtualization 890 ProcessorCharacteristicsPowerPerformanceControl ProcessorCharacteristics = 1 << 7 // Power/Performance Control 891 ) 892 893 func (v ProcessorCharacteristics) String() string { 894 var lines []string 895 if v&ProcessorCharacteristicsReserved != 0 { 896 lines = append(lines, "Reserved") 897 } 898 if v&ProcessorCharacteristicsUnknown != 0 { 899 lines = append(lines, "Unknown") 900 } 901 if v&ProcessorCharacteristics64bitCapable != 0 { 902 lines = append(lines, "64-bit capable") 903 } 904 if v&ProcessorCharacteristicsMultiCore != 0 { 905 lines = append(lines, "Multi-Core") 906 } 907 if v&ProcessorCharacteristicsHardwareThread != 0 { 908 lines = append(lines, "Hardware Thread") 909 } 910 if v&ProcessorCharacteristicsExecuteProtection != 0 { 911 lines = append(lines, "Execute Protection") 912 } 913 if v&ProcessorCharacteristicsEnhancedVirtualization != 0 { 914 lines = append(lines, "Enhanced Virtualization") 915 } 916 if v&ProcessorCharacteristicsPowerPerformanceControl != 0 { 917 lines = append(lines, "Power/Performance Control") 918 } 919 return "\t\t" + strings.Join(lines, "\n\t\t") 920 }