Module Name: xsrc
Committed By: macallan
Date: Fri Aug 11 20:55:49 UTC 2017
Modified Files:
xsrc/external/mit/xf86-video-ati/dist/src: radeon_output.c
Log Message:
add voodoo to get the Mac model name from OpenFirmware so the driver can
automatically enable model specific workarounds
Now X works out of the box on my Mini
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.10 -r1.2 \
xsrc/external/mit/xf86-video-ati/dist/src/radeon_output.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: xsrc/external/mit/xf86-video-ati/dist/src/radeon_output.c
diff -u xsrc/external/mit/xf86-video-ati/dist/src/radeon_output.c:1.1.1.10 xsrc/external/mit/xf86-video-ati/dist/src/radeon_output.c:1.2
--- xsrc/external/mit/xf86-video-ati/dist/src/radeon_output.c:1.1.1.10 Sun Sep 23 19:49:36 2012
+++ xsrc/external/mit/xf86-video-ati/dist/src/radeon_output.c Fri Aug 11 20:55:49 2017
@@ -33,7 +33,10 @@
#include <string.h>
#include <stdio.h>
#include <fcntl.h>
-
+#ifdef __NetBSD__
+#include <sys/ioctl.h>
+#include <dev/ofw/openfirmio.h>
+#endif
/* X and server generic header files */
#include "xf86.h"
#include "xf86_OSproc.h"
@@ -2731,6 +2734,25 @@ static RADEONMacModel RADEONDetectMacMod
if (f != NULL) {
while (fgets(cpuline, sizeof cpuline, f)) {
if (!strncmp(cpuline, "machine", strlen ("machine"))) {
+#elif defined(__NetBSD__)
+ char cpuline[50];
+ int of;
+ struct ofiocdesc ofio;
+
+ of = open("/dev/openfirm", O_RDONLY);
+ if (of > 0) {
+ ofio.of_nodeid = 0;
+ ofio.of_name = "/";
+ ofio.of_namelen = 1;
+ if (ioctl(of, OFIOCFINDDEVICE, &ofio) != -1) {
+ ofio.of_name = "model";
+ ofio.of_namelen = 5;
+ ofio.of_buf = cpuline;
+ ofio.of_buflen = sizeof(cpuline);
+ while (ioctl(of, OFIOCGET, &ofio) != -1) {
+ cpuline[49] = 0;
+ xf86Msg(X_ERROR, "model %s\n", cpuline);
+#endif
if (strstr(cpuline, "PowerBook5,1") ||
strstr(cpuline, "PowerBook5,2") ||
strstr(cpuline, "PowerBook5,3") ||
@@ -2767,6 +2789,7 @@ static RADEONMacModel RADEONDetectMacMod
ret = RADEON_MAC_MINI_EXTERNAL; /* external tmds */
break;
}
+#ifdef __linux__
} else if (!strncmp(cpuline, "detected as", strlen("detected as"))) {
if (strstr(cpuline, "iBook")) {
ret = RADEON_MAC_IBOOK;
@@ -2781,19 +2804,25 @@ static RADEONMacModel RADEONDetectMacMod
ret = RADEON_MAC_EMAC;
break;
}
-
+#endif
/* No known PowerMac model detected */
break;
}
}
+#ifdef __linux__
fclose (f);
} else
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Cannot detect PowerMac model because /proc/cpuinfo not "
"readable.\n");
-
-#endif /* __linux */
+#elif defined(__NetBSD__)
+ close(of);
+ } else
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "Cannot detect PowerMac model because /dev/openfirm not "
+ "readable.\n");
+#endif
#ifdef __OpenBSD__
char model[32];