1
2#ifdef HAVE_XORG_CONFIG_H
3#include <xorg-config.h>
4#endif
5
6#include <X11/X.h>
7#include "os.h"
8#include "xf86.h"
9#include "xf86Priv.h"
10#include "shared/xf86Axp.h"
11#include <sys/param.h>
12#include "xf86_OSlib.h"
13#include <stdio.h>
14#include <sys/sysctl.h>
15
16axpDevice bsdGetAXP(void);
17
18/*
19 * BSD does a very nice job providing system information to
20 * user space programs. Unfortunately it doesn't provide all
21 * the information required. Therefore we just obtain the
22 * system type and look up the rest from a list we maintain
23 * ourselves.
24 */
25
26typedef struct {
27	char *name;
28	int type;
29} _AXP;
30
31static _AXP axpList[] = {
32	{"apecs",APECS},
33	{"pyxis",PYXIS},
34	{"cia",CIA},
35	{"irongate",IRONGATE},
36	{"lca",LCA},
37	{"t2",T2},
38	{"tsunami",TSUNAMI},
39	{NULL,SYS_NONE}
40};
41
42axpDevice
43bsdGetAXP(void)
44{
45	int i;
46	char sysname[64];
47	size_t len = sizeof(sysname);
48
49#ifdef __OpenBSD__
50	int mib[3];
51	int error;
52
53	mib[0] = CTL_MACHDEP;
54	mib[1] = CPU_CHIPSET;
55	mib[2] = CPU_CHIPSET_TYPE;
56
57	if ((error = sysctl(mib, 3, &sysname, &len, NULL, 0)) < 0)
58#else
59	if ((sysctlbyname("hw.chipset.type", &sysname, &len,
60                                  0, 0)) < 0)
61#endif
62            FatalError("bsdGetAXP: can't find machine type\n");
63#ifdef DEBUG
64	xf86Msg(X_INFO,"AXP is a: %s\n",sysname);
65#endif
66	for (i=0;;i++) {
67		if (axpList[i].name == NULL)
68			return SYS_NONE;
69		if (!strcmp(sysname, axpList[i].name))
70			return axpList[i].type;
71	}
72}
73