84bb7e78f5
- provide getline only for older netbsd - don't install executable man pages
213 lines
5.1 KiB
Text
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);
|