|  | #include <stdint.h> | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #include <errno.h> | 
|  | #include <parlib/arch/arch.h> | 
|  |  | 
|  | int main(int argc, char *argv[]) | 
|  | { | 
|  | uint32_t eax, ebx, ecx, edx; | 
|  | uint32_t info1, info2 = 0; | 
|  |  | 
|  | if (argc < 2) { | 
|  | printf("%s: eax_leaf [ecx_leaf]\n", argv[0]); | 
|  | exit(-1); | 
|  | } | 
|  | errno = 0; | 
|  | info1 = strtoul(argv[1], 0, 16); | 
|  | if (errno) { | 
|  | perror("info1"); | 
|  | exit(-1); | 
|  | } | 
|  | if (argc > 2) { | 
|  | errno = 0; | 
|  | info2 = strtoul(argv[2], 0, 16); | 
|  | if (errno) { | 
|  | perror("info2"); | 
|  | exit(-1); | 
|  | } | 
|  | } | 
|  | eax = ebx = ecx = edx = 0xffffffff; | 
|  | parlib_cpuid(info1, info2, &eax, &ebx, &ecx, &edx); | 
|  | printf("CPUID for Leaf 0x%08x, Sublevel 0x%08x:\n", info1, info2); | 
|  | printf("\teax: %08x\n\tebx: %08x\n\tecx: %08x\n\tedx: %08x\n", eax, ebx, | 
|  | ecx, edx); | 
|  | return 0; | 
|  | } |