Fix it - now this programm should work probably..It is

still commented out in rc and i ask everybody to test it and
reply  if it makes any troubles...If no - very good..
This commit is contained in:
Ugen J.S. Antsilevich 1995-03-12 13:27:24 +00:00
parent d26be6f09d
commit 1079e644a8
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=7034

View file

@ -49,10 +49,7 @@ struct nlist nl[] = {
#define N_TABLAST N_TABNULL
struct nlist nlk[] = {
{"_isa_devtab_tty"},
{"_isa_devtab_bio"},
{"_isa_devtab_net"},
{"_isa_devtab_null"},
{"_isa_devlist"},
"",
};
@ -94,9 +91,9 @@ main(ac, av)
char **av;
{
int f, res, s;
int modified;
int modified,dev_found;
int sym;
u_long pos, entry, pos1;
u_long pos, entry, pos1, pos_t;
u_long flags;
struct isa_device buf, buf1;
struct isa_driver dbuf;
@ -170,41 +167,58 @@ main(ac, av)
printf("\nTable: %s\n", nl[sym].n_name);
pos = nl[sym].n_value + NBPG - entry;
pos1 = nlk[sym].n_value;
pos1 = nlk[0].n_value;
if (lseek(f, pos, SEEK_SET) != pos)
fatal("seek", NULL);
if (verbose)
printf("----------------------------------------------------\n");
do {
if (verbose)
printf("----------------------------------------------------\n");
if (kvm_read(kd, pos1, &buf1, sizeof(struct isa_device)) < 0)
fatal("kvmread", NULL);
if (buf1.id_id)
if (buf1.id_driver)
if (kvm_read(kd, (u_long) buf1.id_driver,
&dbuf, sizeof(struct isa_driver)) < 0) {
error("kvm_read", "no driver");
} else {
if (kvm_read(kd, (u_long) dbuf.name,
nbuf, sizeof(nbuf)) < 0) {
error("kvm_read", NULL);
} else {
nbuf[sizeof(nbuf) - 1] = 0;
if (verbose)
printf("Device: %s%d\n", nbuf, buf1.id_unit);
}
}
else
error("kvm_read", "no driver");
pos1 += sizeof(struct isa_device);
if ((res = read(f, (char *) &buf, sizeof(struct isa_device)))
<= 0)
fatal("read", NULL);
if (kvm_read(kd, pos1, &pos_t, sizeof(u_long)) < 0)
fatal("kvmread", NULL);
dev_found = 0;
while(pos_t!=NULL) {
if (kvm_read(kd, pos_t, &buf1, sizeof(struct isa_device)) < 0)
fatal("kvmread", NULL);
if (buf1.id_id !=buf.id_id) {
pos_t = (u_long)(buf1.id_next);
continue;
} else
dev_found=1;
if (buf1.id_driver)
if (kvm_read(kd, (u_long) buf1.id_driver,
&dbuf, sizeof(struct isa_driver)) < 0) {
error("kvm_read", "no driver");
} else {
if (kvm_read(kd, (u_long) dbuf.name,
nbuf, sizeof(nbuf)) < 0) {
error("kvm_read", NULL);
} else {
nbuf[sizeof(nbuf) - 1] = 0;
if (verbose)
printf("Device: %s%d\n", nbuf, buf1.id_unit);
}
}
else
error("kvm_read", "no driver");
break;
};
if (!dev_found)
continue;
if (buf1.id_id != 0)
if (verbose)
printf("kernel: id=%u io=%X irq=%u drq=%X maddr=%X flags=%X enabled=%X \n", buf1.id_id, buf1.id_iobase, buf1.id_irq, buf1.id_drq,
@ -221,30 +235,26 @@ main(ac, av)
*/
modified = FALSE;
if (buf.id_id != buf1.id_id) {
fprintf(stderr, "IDs don't match. Aborting\n");
exit(1);
}
if (buf.id_iobase != 0xFFFFFFFF && buf.id_iobase !=
if (buf.id_iobase != -1 && buf.id_iobase !=
buf1.id_iobase) {
if (verbose)
printf("Setting IO addr\n");
buf.id_iobase = buf1.id_iobase;
modified = TRUE;
}
if (buf.id_irq != buf1.id_irq) {
if (buf.id_irq != (u_short)-1 && buf.id_irq != buf1.id_irq) {
if (verbose)
printf("Setting IRQ\n");
buf.id_irq = buf1.id_irq;
modified = TRUE;
}
if (buf.id_drq != buf1.id_drq) {
if (buf.id_drq != -1 && buf.id_drq != buf1.id_drq) {
if (verbose)
printf("Setting DRQ\n");
buf.id_drq = buf1.id_drq;
modified = TRUE;
}
if (buf.id_maddr != buf1.id_maddr) {
if (buf.id_maddr != (caddr_t)-1 && buf.id_maddr != buf1.id_maddr) {
if (verbose)
printf("Setting memory addres\n");
buf.id_maddr = buf1.id_maddr;
@ -262,6 +272,8 @@ main(ac, av)
buf.id_enabled = buf1.id_enabled;
modified = TRUE;
}
if (verbose)
printf("----------------------------------------------------\n");
if (modified && !testonly) {
res = lseek(f, -(off_t) sizeof(struct isa_device),