summaryrefslogtreecommitdiffstats
path: root/usr.sbin/pccard/pccardc/dumpcis.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin/pccard/pccardc/dumpcis.c')
-rw-r--r--usr.sbin/pccard/pccardc/dumpcis.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/usr.sbin/pccard/pccardc/dumpcis.c b/usr.sbin/pccard/pccardc/dumpcis.c
new file mode 100644
index 0000000..eacf73a
--- /dev/null
+++ b/usr.sbin/pccard/pccardc/dumpcis.c
@@ -0,0 +1,79 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/ioctl.h>
+
+#include <pccard/card.h>
+#include <pccard/cis.h>
+#include "readcis.h"
+
+int nocards;
+
+int
+dumpcis_main(int argc, char **argv)
+{
+int node;
+
+ for (node = 0; node < 8; node++)
+ scan(node);
+ printf("%d slots found\n", nocards);
+}
+scan(slot)
+int slot;
+{
+int fd, i;
+char name[64];
+struct cis *cp;
+struct slotstate st;
+
+ sprintf(name, "/dev/card%d", slot);
+ fd = open(name, 0);
+ if (fd < 0)
+ return;
+ nocards++;
+ ioctl(fd, PIOCGSTATE, &st);
+ if (st.state == filled)
+ {
+ cp = readcis(fd);
+ if (cp)
+ {
+ printf("Configuration data for card in slot %d\n",
+ slot);
+ dumpcis(cp);
+ freecis(cp);
+ }
+ }
+}
+dump(p, sz)
+unsigned char *p;
+int sz;
+{
+int ad = 0, i;
+ while (sz > 0)
+ {
+ printf("%03x: ", ad);
+ for (i = 0; i < ((sz < 16) ? sz : 16); i++)
+ printf(" %02x", p[i]);
+ printf("\n");
+ sz -= 16;
+ p += 16;
+ ad += 16;
+ }
+}
+void *
+xmalloc(int sz)
+{
+void *p;
+
+ sz = (sz + 7) & ~7;
+ p = malloc(sz);
+ if (p)
+ bzero(p, sz);
+ else
+ {
+ perror("malloc");
+ exit(1);
+ }
+ return(p);
+}
OpenPOWER on IntegriCloud