aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xfree86/os-support/linux/lnx_axp.c
blob: d65a3a4878e31c4fa3dd7d0e7b4838050d899873 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103

#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif

#include <stdio.h>
#include "xf86.h"
#include "shared/xf86Axp.h"

axpDevice lnxGetAXP(void);

typedef struct {
    char *sysName;
    char *sysVari;
    char *cpu;
    axpDevice sys;
} AXP;

static AXP axpList[] = {
    {"Tsunami", NULL, NULL, TSUNAMI},
    {"Eiger", NULL, NULL, TSUNAMI},
    {"Noname", NULL, NULL, LCA},
    {"AlphaBook1", NULL, NULL, LCA},
    {"EB66", NULL, NULL, LCA},
    {"EB64+", NULL, NULL, APECS},
    {"Noritake", NULL, "EV5", CIA},
    {"Noritake", NULL, "EV56", CIA},
    {"Noritake", NULL, NULL, APECS},
    {"XL", NULL, NULL, APECS},
    {"Avanti", NULL, NULL, APECS},
    {"Mikasa", NULL, "EV5", CIA},
    {"Mikasa", NULL, "EV56", CIA},
    {"Mikasa", NULL, NULL, APECS},
    {"EB164", "EB164", NULL, CIA},
    {"EB164", "PC164", NULL, CIA},
    {"EB164", "LX164", NULL, PYXIS},
    {"EB164", "SX164", NULL, PYXIS},
    {"EB164", "RX164", NULL, POLARIS},
    {"Alcor", NULL, NULL, CIA},
    {"Takara", NULL, NULL, CIA},
    {"Sable", NULL, "EV5", T2_GAMMA},
    {"Sable", NULL, "EV56", T2_GAMMA},
    {"Sable", NULL, NULL, T2},
    {"Rawhide", NULL, NULL, MCPCIA},
    {"Jensen", NULL, NULL, JENSEN},
    {"Miata", NULL, NULL, PYXIS_CIA},
    {"Ruffian", NULL, NULL, PYXIS_CIA},
    {"Nautilus", NULL, NULL, IRONGATE},
    {NULL, NULL, NULL, SYS_NONE}
};

axpDevice
lnxGetAXP(void)
{
    FILE *file;
    int count = 0;
    char res[256];
    char cpu[255];
    char systype[255];
    char sysvari[255];

    if (!(file = fopen("/proc/cpuinfo", "r")))
        return SYS_NONE;
    do {
        if (!fgets(res, 0xff, file))
            return SYS_NONE;
        switch (count) {
        case 1:
            sscanf(res, "cpu model : %s", cpu);
            DebugF("CPU %s\n", cpu);
            break;
        case 5:
            sscanf(res, "system type : %s", systype);
            DebugF("system type : %s\n", systype);
            break;
        case 6:
            sscanf(res, "system variation : %s", sysvari);
            DebugF("system variation: %s\n", sysvari);
            break;
        }
        count++;
    } while (count < 8);

    fclose(file);

    count = 0;

    do {
        if (!axpList[count].sysName || !strcmp(axpList[count].sysName, systype)) {
            if (axpList[count].sysVari &&
                strcmp(axpList[count].sysVari, sysvari)) {
                count++;
                continue;
            };
            if (axpList[count].cpu && strcmp(axpList[count].cpu, cpu)) {
                count++;
                continue;
            }
            return axpList[count].sys;
        }
        count++;
    } while (1);
}