diff options
Diffstat (limited to 'usr.sbin/pccard/pccardc/dumpcis.c')
-rw-r--r-- | usr.sbin/pccard/pccardc/dumpcis.c | 79 |
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); +} |