pkgsrc/sysutils/i810switch/patches/patch-ac
dholland 84bb7e78f5 - fix amd64 build (use size_t, not int, with getline)
- provide getline only for older netbsd
- don't install executable man pages
2011-10-01 22:32:11 +00:00

213 lines
5.1 KiB
Text

$NetBSD: patch-ac,v 1.2 2011/10/01 22:32:11 dholland Exp $
--- i810switch.c.orig 2005-06-12 04:36:36.000000000 +0000
+++ i810switch.c
@@ -1,3 +1,4 @@
+#include <assert.h>
#include <stdarg.h>
#include <stdlib.h>
#include <fcntl.h>
@@ -9,7 +10,11 @@
#include <errno.h>
#define VERSION "0.6.5beta"
+#ifdef __NetBSD__
+#define CMD_LSPCI "pcictl /dev/pci0"
+#else
#define CMD_LSPCI "lspci"
+#endif
static const char *Opt_lcd = NULL;
static const char *Opt_crt = NULL;
@@ -49,19 +54,31 @@ struct i810_par {
/* PCI IDs */
-#define I810STR "8086:7121"
-#define I810ESTR "8086:7123"
-#define I810_DC100STR_1 "8086:7125"
-#define I810_DC100STR_2 "8086:1102"
-#define I810_IGSTR "8086:1112"
-#define I810_CFCSTR "8086:1132"
-#define I830STR "8086:3577"
-#define I845STR "8086:2562"
-#define I855STR "8086:3582"
-//#define I865STR "8086:2572"
-#define I915STR "8086:2592"
-#define MEMSTR "Memory at"
+static const struct {
+ char *id;
+ int type;
+} i8xx[] = {
+/* I810STR */ { "7121", I810 },
+/* I810ESTR */ { "7123", I810 },
+/* I810_DC100STR_1 */ { "7125", I810 },
+/* I810_DC100STR_2 */ { "1102", I810 },
+/* I810_IGSTR */ { "1112", I810 },
+/* I810_CFCSTR */ { "1132", I810 },
+/* I830STR */ { "3577", I830 },
+/* I845STR */ { "2562", I855 },
+/* I855STR */ { "3582", I855 },
+/* I865STR { "2572", I865 }, */
+/* I915STR */ { "2592", I915 },
+ { NULL, 0 },
+};
+
+#ifdef __NetBSD__
+#define NONPRSTR "32-bit nonprefetchable memory"
+#define MEMSTR "base:"
+#else
#define NONPRSTR "32-bit, non-prefetchable"
+#define MEMSTR "Memory at"
+#endif
/* I810 registers */
#define I810_HVSYNC 0x05000
@@ -243,62 +260,48 @@ void probe_card_I830(struct i810_par *pa
i810_readl(par->mmio, I830_DSPBSTRIDE));
}
-char *i810_chip(char **buff_ptr, int *len_ptr, FILE *pci_f, int* chiptype)
+char *i810_chip(char **buff_ptr, size_t *len_ptr, FILE *pci_f, int* chiptype)
{
int i;
char *p;
+ char buf[10];
while (getline(buff_ptr, len_ptr, pci_f) > 0) {
- i = (p = strstr(*buff_ptr, I810STR)) != NULL ||
- (p = strstr(*buff_ptr, I810ESTR)) != NULL ||
- (p = strstr(*buff_ptr, I810_DC100STR_1)) != NULL ||
- (p = strstr(*buff_ptr, I810_DC100STR_2)) != NULL ||
- (p = strstr(*buff_ptr, I810_IGSTR)) != NULL ||
- (p = strstr(*buff_ptr, I810_CFCSTR)) != NULL;
- if (i)
- {
- *chiptype = I810;
- return p;
- }
-
- i = (p = strstr(*buff_ptr, I830STR)) != NULL ||
-#if defined (I865STR)
- (p = strstr(*buff_ptr, I865STR)) != NULL ||
-#endif /*defined (I865STR)*/
- (p = strstr(*buff_ptr, I845STR)) != NULL;
- if (i)
- {
- *chiptype = I830;
- return p;
- }
-
- i = (p = strstr(*buff_ptr, I855STR)) != NULL;
- if (i)
- {
- *chiptype = I855;
- return p;
- }
-
- i = (p = strstr(*buff_ptr, I915STR)) != NULL;
- if (i)
- {
- *chiptype = I915;
+ for (i = 0; i8xx[i].id != NULL; i++) {
+#ifdef __NetBSD__
+ snprintf(buf, sizeof(buf), "%s8086", i8xx[i].id);
+#else
+ snprintf(buf, sizeof(buf), "8086:%s", i8xx[i].id);
+#endif
+ if ((p = strstr(*buff_ptr, buf)) != NULL)
+ break;
+ }
+ if (i8xx[i].id) {
+ *chiptype = i8xx[i].type;
+#ifdef __NetBSD__
+ return *buff_ptr;
+#else
return p;
+#endif
}
}
return NULL;
}
-unsigned long i810_addr(char **buff_ptr, int *len_ptr, FILE *pci_f)
+unsigned long i810_addr(char **buff_ptr, size_t *len_ptr, FILE *pci_f)
{
char *p;
- while (getline(buff_ptr, len_ptr, pci_f) > 0)
+ while (getline(buff_ptr, len_ptr, pci_f) > 0) {
if (strstr(*buff_ptr, NONPRSTR) != NULL) {
+#ifdef __NetBSD__
+ assert(getline(buff_ptr, len_ptr, pci_f) > 0);
+#endif
p = strstr(*buff_ptr, MEMSTR);
if (p != NULL)
return strtoul(p+sizeof(MEMSTR), NULL, 16);
}
+ }
return 0;
}
@@ -316,10 +319,15 @@ int main (int argc, char *argv[])
{
struct i810_par par;
unsigned long addr;
- int i, crt = -1, lcd = -1, probe = 0, err = 0, count = 0, chiptype, len = 0;
+ int i, crt = -1, lcd = -1, probe = 0, err = 0, count = 0, chiptype;
+ size_t len = 0;
FILE *pci_f;
char *buff = NULL;
+#ifdef __NetBSD__
+ char lspcistr[] = CMD_LSPCI " dump -d %d -f %d";
+#else
char lspcistr[] = CMD_LSPCI " -v -d xxxx:xxxx";
+#endif
char *chip;
putenv("PATH=/sbin:/usr/sbin:/bin:/usr/bin");
@@ -357,7 +365,11 @@ int main (int argc, char *argv[])
}
}
- pci_f = popen(CMD_LSPCI " -n", "r");
+ pci_f = popen(CMD_LSPCI
+#ifdef __NetBSD__
+ " list"
+#endif
+ " -n", "r");
if (!pci_f) {
fprintf(stderr, "Something is wrong with lspci.\n");
exit(1);
@@ -369,6 +381,19 @@ int main (int argc, char *argv[])
}
pclose(pci_f);
+#ifdef __NetBSD__
+ {
+ char cmd[100];
+ int dev = -1, fun = -1;
+ sscanf(chip, "000:%d:%d:", &dev, &fun);
+ if (dev == -1 || fun == -1) {
+ fprintf(stderr, "CMD_LSPCI is wrong.\n");
+ exit(1);
+ }
+ snprintf(cmd, sizeof(cmd), lspcistr, dev, fun);
+ pci_f = popen(cmd, "r");
+ }
+#else
{
char *p = strstr(lspcistr, "xxxx:xxxx");
if (p == 0) {
@@ -376,9 +401,10 @@ int main (int argc, char *argv[])
exit(1);
}
memcpy(p, chip, 9);
+ pci_f = popen(lspcistr, "r");
}
+#endif
- pci_f = popen(lspcistr, "r");
if (!pci_f) {
fprintf(stderr, "Something is wrong with lspci.\n");
exit(1);