summaryrefslogtreecommitdiff
path: root/hw/xfree86/os-support/bsd/bsd_axp.c
blob: cb10a9d40182505e052825959b49e7f5a4bcb573 (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

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

#include <X11/X.h>
#include "os.h"
#include "xf86.h"
#include "xf86Priv.h"
#include "shared/xf86Axp.h"
#include <sys/param.h>
#include "xf86_OSlib.h"
#include <stdio.h>
#include <sys/sysctl.h>

axpDevice bsdGetAXP(void);

/*
 * BSD does a very nice job providing system information to
 * user space programs. Unfortunately it doesn't provide all
 * the information required. Therefore we just obtain the
 * system type and look up the rest from a list we maintain
 * ourselves.
 */

typedef struct {
	char *name;
	int type;
} _AXP; 

static _AXP axpList[] = {
	{"apecs",APECS},
	{"pyxis",PYXIS},
	{"cia",CIA},
	{"irongate",IRONGATE},
	{"lca",LCA},
	{"t2",T2},
	{"tsunami",TSUNAMI},
	{NULL,NONE}
};

axpDevice
bsdGetAXP(void)
{
	int i;
	char sysname[64];
	size_t len = sizeof(sysname);
	
#ifdef __OpenBSD__
	int mib[3];
	int error;

	mib[0] = CTL_MACHDEP;
	mib[1] = CPU_CHIPSET;
	mib[2] = CPU_CHIPSET_TYPE;

	if ((error = sysctl(mib, 3, &sysname, &len, NULL, 0)) < 0)
#else	
	if ((sysctlbyname("hw.chipset.type", &sysname, &len,
                                  0, 0)) < 0)
#endif
            FatalError("bsdGetAXP: can't find machine type\n");
#ifdef DEBUG
	xf86Msg(X_INFO,"AXP is a: %s\n",sysname);
#endif
	for (i=0;;i++) {
		if (axpList[i].name == NULL)
			return NONE;
		if (!strcmp(sysname, axpList[i].name))
			return axpList[i].type;
	}
}