-
- ifp->if_addr = *(struct sockaddr *)sin;
- ifp->if_net = in_netof(sin->sin_addr);
- ifp->if_host[0] = in_lnaof(sin->sin_addr);
- sin = (struct sockaddr_in *)&ifp->if_broadaddr;
- sin->sin_family = AF_INET;
- sin->sin_addr = if_makeaddr(ifp->if_net, INADDR_ANY);
- ifp->if_flags |= IFF_BROADCAST;
+ register struct de_softc *ds = &de_softc[unit];
+ register struct uba_device *ui = deinfo[unit];
+ register struct dedevice *addr= (struct dedevice *)ui->ui_addr;
+ int csr0;
+
+ if (! (ds->ds_flags & DSF_RUNNING))
+ return;
+
+ bcopy(physaddr, &ds->ds_pcbb.pcbb2, 6);
+ ds->ds_pcbb.pcbb0 = FC_WTPHYAD;
+ addr->pclow = PCSR0_INTE|CMD_PDMD;
+ csr0 = addr->pcsr0;
+ addr->pchigh = csr0 >> 8;
+ if (csr0 & PCSR0_PCEI)
+ printf("de%d: wtphyad failed, csr0=%b csr1=%b\n",
+ ui->ui_unit, csr0, PCSR0_BITS,
+ addr->pcsr1, PCSR1_BITS);