| 161 | } |
| 162 | |
| 163 | static int cpuinfo_module_redraw(WINDOW *win) |
| 164 | { |
| 165 | uint32_t eax, ebx, ecx, edx; |
| 166 | unsigned int brand; |
| 167 | char *vstr; |
| 168 | int row = 2; |
| 169 | |
| 170 | print_module_title(win, "CPU Information"); |
| 171 | |
| 172 | docpuid(0, NULL, &vendor, NULL, NULL); |
| 173 | |
| 174 | switch (vendor) { |
| 175 | case VENDOR_INTEL: |
| 176 | vstr = "Intel"; |
| 177 | break; |
| 178 | case VENDOR_AMD: |
| 179 | vstr = "AMD"; |
| 180 | break; |
| 181 | case VENDOR_CYRIX: |
| 182 | vstr = "Cyrix"; |
| 183 | break; |
| 184 | case VENDOR_IDT: |
| 185 | vstr = "IDT"; |
| 186 | break; |
| 187 | case VENDOR_GEODE: |
| 188 | vstr = "NatSemi Geode"; |
| 189 | break; |
| 190 | case VENDOR_RISE: |
| 191 | case VENDOR_RISE2: |
| 192 | vstr = "RISE"; |
| 193 | break; |
| 194 | case VENDOR_SIS: |
| 195 | vstr = "SiS"; |
| 196 | break; |
| 197 | default: |
| 198 | vstr = "Unknown"; |
| 199 | break; |
| 200 | } |
| 201 | |
| 202 | mvwprintw(win, row++, 1, "Vendor: %s", vstr); |
| 203 | |
| 204 | do_name(win, row++); |
| 205 | |
| 206 | docpuid(0x00000001, &eax, &ebx, &ecx, &edx); |
| 207 | |
| 208 | mvwprintw(win, row++, 1, "Family: %X", (eax >> 8) & 0x0f); |
| 209 | mvwprintw(win, row++, 1, "Model: %X", |
| 210 | ((eax >> 4) & 0xf) | ((eax >> 16) & 0xf) << 4); |
| 211 | |
| 212 | mvwprintw(win, row++, 1, "Stepping: %X", eax & 0xf); |
| 213 | |
| 214 | if (vendor == VENDOR_AMD) { |
| 215 | docpuid(0x80000001, &eax, &ebx, &ecx, &edx); |
| 216 | brand = ((ebx >> 9) & 0x1f); |
| 217 | |
| 218 | mvwprintw(win, row++, 1, "Brand: %X", brand); |
| 219 | } |
| 220 |
nothing calls this directly
no test coverage detected