| 1 | |
| 2 | #ifdef HAVE_XORG_CONFIG_H |
| 3 | #include <xorg-config.h> |
| 4 | #endif |
| 5 | |
| 6 | #include <stdio.h> |
| 7 | #include "xf86.h" |
| 8 | #include "shared/xf86Axp.h" |
| 9 | |
| 10 | axpDevice lnxGetAXP(void); |
| 11 | |
| 12 | typedef struct { |
| 13 | char *sysName; |
| 14 | char *sysVari; |
| 15 | char *cpu; |
| 16 | axpDevice sys; |
| 17 | } AXP; |
| 18 | |
| 19 | static AXP axpList[] = { |
| 20 | {"Tsunami", NULL, NULL, TSUNAMI}, |
| 21 | {"Eiger", NULL, NULL, TSUNAMI}, |
| 22 | {"Noname", NULL, NULL, LCA}, |
| 23 | {"AlphaBook1", NULL, NULL, LCA}, |
| 24 | {"EB66", NULL, NULL, LCA}, |
| 25 | {"EB64+", NULL, NULL, APECS}, |
| 26 | {"Noritake", NULL, "EV5", CIA}, |
| 27 | {"Noritake", NULL, "EV56", CIA}, |
| 28 | {"Noritake", NULL, NULL, APECS}, |
| 29 | {"XL", NULL, NULL, APECS}, |
| 30 | {"Avanti", NULL, NULL, APECS}, |
| 31 | {"Mikasa", NULL, "EV5", CIA}, |
| 32 | {"Mikasa", NULL, "EV56", CIA}, |
| 33 | {"Mikasa", NULL, NULL, APECS}, |
| 34 | {"EB164", "EB164", NULL, CIA}, |
| 35 | {"EB164", "PC164", NULL, CIA}, |
| 36 | {"EB164", "LX164", NULL, PYXIS}, |
| 37 | {"EB164", "SX164", NULL, PYXIS}, |
| 38 | {"EB164", "RX164", NULL, POLARIS}, |
| 39 | {"Alcor", NULL, NULL, CIA}, |
| 40 | {"Takara", NULL, NULL, CIA}, |
| 41 | {"Sable", NULL, "EV5", T2_GAMMA}, |
| 42 | {"Sable", NULL, "EV56", T2_GAMMA}, |
| 43 | {"Sable", NULL, NULL, T2}, |
| 44 | {"Rawhide", NULL, NULL, MCPCIA}, |
| 45 | {"Jensen", NULL, NULL, JENSEN}, |
| 46 | {"Miata", NULL, NULL, PYXIS_CIA}, |
| 47 | {"Ruffian", NULL, NULL, PYXIS_CIA}, |
| 48 | {"Nautilus", NULL, NULL, IRONGATE}, |
| 49 | {NULL, NULL, NULL, SYS_NONE} |
| 50 | }; |
| 51 | |
| 52 | axpDevice |
| 53 | lnxGetAXP(void) |
| 54 | { |
| 55 | FILE *file; |
| 56 | int count = 0; |
| 57 | char res[256]; |
| 58 | char cpu[255]; |
| 59 | char systype[255]; |
| 60 | char sysvari[255]; |
| 61 | |
| 62 | if (!(file = fopen("/proc/cpuinfo", "r"))) |
| 63 | return SYS_NONE; |
| 64 | do { |
| 65 | if (!fgets(res, 0xff, file)) |
| 66 | return SYS_NONE; |
| 67 | switch (count) { |
| 68 | case 1: |
| 69 | sscanf(res, "cpu model : %s", cpu); |
| 70 | DebugF("CPU %s\n", cpu); |
| 71 | break; |
| 72 | case 5: |
| 73 | sscanf(res, "system type : %s", systype); |
| 74 | DebugF("system type : %s\n", systype); |
| 75 | break; |
| 76 | case 6: |
| 77 | sscanf(res, "system variation : %s", sysvari); |
| 78 | DebugF("system variation: %s\n", sysvari); |
| 79 | break; |
| 80 | } |
| 81 | count++; |
| 82 | } while (count < 8); |
| 83 | |
| 84 | fclose(file); |
| 85 | |
| 86 | count = 0; |
| 87 | |
| 88 | do { |
| 89 | if (!axpList[count].sysName || !strcmp(axpList[count].sysName, systype)) { |
| 90 | if (axpList[count].sysVari && |
| 91 | strcmp(axpList[count].sysVari, sysvari)) { |
| 92 | count++; |
| 93 | continue; |
| 94 | }; |
| 95 | if (axpList[count].cpu && strcmp(axpList[count].cpu, cpu)) { |
| 96 | count++; |
| 97 | continue; |
| 98 | } |
| 99 | return axpList[count].sys; |
| 100 | } |
| 101 | count++; |
| 102 | } while (1); |
| 103 | } |