- /*
- * Map the status buffer to the Unibus, do the status command,
- * and unmap the buffer.
- */
- ubaddr = uballoc(ui->ui_ubanum, &ilbuf, sizeof(ilbuf), 0);
- s = splimp();
- addr->il_bar = ubaddr & 0xffff;
- addr->il_bcr = sizeof(ilbuf);
- addr->il_csr = ((ubaddr>>2)&0xc000)|ILC_STAT;
- while (!(addr->il_csr & IL_CDONE))
- /* Busy wait */;
- if (addr->il_csr & IL_STATUS)
- printf("il%d: %s\n", ui->ui_unit,
- ilerrs[addr->il_csr & IL_STATUS]);
- splx(s);
- ubarelse(ui->ui_ubanum, &ubaddr);
- /*
- * Fill in the Ethernet address from the status buffer
- */
- for (i=0; i<6; i++)
- is->is_enaddr[i] = ilbuf.ils_addr[i];
+ is->is_ubaddr = uballoc(ui->ui_ubanum, (caddr_t)&is->is_stats,
+ sizeof (struct il_stats), 0);
+ addr->il_bar = is->is_ubaddr & 0xffff;
+ addr->il_bcr = sizeof (struct il_stats);
+ addr->il_csr = ((is->is_ubaddr >> 2) & IL_EUA)|ILC_STAT;
+ while ((addr->il_csr&IL_CDONE) == 0)
+ ;
+ if (addr->il_csr&IL_STATUS)
+ printf("il%d: status failed, csr=%b\n", ui->ui_unit,
+ addr->il_csr, IL_BITS);
+ ubarelse(ui->ui_ubanum, &is->is_ubaddr);