Lines Matching refs:sc
247 ee16_shutdown(struct ie_softc *sc) in ee16_shutdown() argument
250 ee16_reset_586(sc); in ee16_shutdown()
251 outb(PORT(sc) + IEE16_ECTRL, IEE16_RESET_ASIC); in ee16_shutdown()
252 outb(PORT(sc) + IEE16_ECTRL, 0); in ee16_shutdown()
261 struct ie_softc * sc; in ie_attach() local
266 sc = device_get_softc(dev); in ie_attach()
267 ifp = sc->ifp = if_alloc(IFT_ETHER); in ie_attach()
269 device_printf(sc->dev, "can not if_alloc()\n"); in ie_attach()
273 sc->dev = dev; in ie_attach()
274 mtx_init(&sc->lock, device_get_nameunit(dev), MTX_NETWORK_LOCK, in ie_attach()
281 factor = rman_get_size(sc->mem_res) / 8192; in ie_attach()
282 sc->nframes = factor * NFRAMES; in ie_attach()
283 sc->nrxbufs = factor * NRXBUFS; in ie_attach()
284 sc->ntxbufs = factor * NTXBUFS; in ie_attach()
290 allocsize = sizeof(void *) * (sc->nframes in ie_attach()
291 + (sc->nrxbufs * 2) in ie_attach()
292 + (sc->ntxbufs * 3)); in ie_attach()
293 sc->rframes = (volatile struct ie_recv_frame_desc **) malloc(allocsize, in ie_attach()
296 if (sc->rframes == NULL) { in ie_attach()
297 mtx_destroy(&sc->lock); in ie_attach()
300 sc->rbuffs = in ie_attach()
301 (volatile struct ie_recv_buf_desc **)&sc->rframes[sc->nframes]; in ie_attach()
302 sc->cbuffs = (volatile u_char **)&sc->rbuffs[sc->nrxbufs]; in ie_attach()
303 sc->xmit_cmds = in ie_attach()
304 (volatile struct ie_xmit_cmd **)&sc->cbuffs[sc->nrxbufs]; in ie_attach()
305 sc->xmit_buffs = in ie_attach()
306 (volatile struct ie_xmit_buf **)&sc->xmit_cmds[sc->ntxbufs]; in ie_attach()
307 sc->xmit_cbuffs = (volatile u_char **)&sc->xmit_buffs[sc->ntxbufs]; in ie_attach()
310 device_printf(sc->dev, "hardware type %s, revision %d\n", in ie_attach()
311 ie_hardware_names[sc->hard_type], sc->hard_vers + 1); in ie_attach()
313 ifp->if_softc = sc; in ie_attach()
321 ether_ifattach(ifp, sc->enaddr); in ie_attach()
323 error = bus_setup_intr(dev, sc->irq_res, INTR_TYPE_NET | INTR_MPSAFE, in ie_attach()
324 NULL, ie_intr, sc, &sc->irq_ih); in ie_attach()
327 mtx_destroy(&sc->lock); in ie_attach()
337 ie_ack(struct ie_softc *sc, u_int mask) in ie_ack() argument
340 sc->scb->ie_command = sc->scb->ie_status & mask; in ie_ack()
341 (*sc->ie_chan_attn) (sc); in ie_ack()
350 struct ie_softc *sc = (struct ie_softc *)xsc; in ie_intr() local
353 IE_LOCK(sc); in ie_intr()
356 if (sc->hard_type == IE_3C507 in ie_intr()
357 && (inb(PORT(sc) + IE507_CTRL) & EL_CTRL_INTL)) in ie_intr()
358 outb(PORT(sc) + IE507_ICTRL, 1); in ie_intr()
361 if (sc->hard_type == IE_EE16) in ie_intr()
362 outb(PORT(sc) + IEE16_IRQ, sc->irq_encoded); in ie_intr()
364 status = sc->scb->ie_status; in ie_intr()
369 ie_ack(sc, IE_ST_WHENCE & status); in ie_intr()
375 if_printf(sc->ifp, "rint\n"); in ie_intr()
377 ierint(sc); in ie_intr()
386 if_printf(sc->ifp, "tint\n"); in ie_intr()
388 ietint(sc); in ie_intr()
396 if_printf(sc->ifp, "rnr\n"); in ie_intr()
398 iernr(sc); in ie_intr()
402 if_printf(sc->ifp, "cna\n"); in ie_intr()
405 if ((status = sc->scb->ie_status) & IE_ST_WHENCE) in ie_intr()
409 if (sc->hard_type == IE_3C507) in ie_intr()
410 outb(PORT(sc) + IE507_ICTRL, 1); in ie_intr()
413 if (sc->hard_type == IE_EE16) in ie_intr()
414 outb(PORT(sc) + IEE16_IRQ, sc->irq_encoded | IEE16_IRQ_ENABLE); in ie_intr()
415 IE_UNLOCK(sc); in ie_intr()
422 ierint(struct ie_softc *sc) in ierint() argument
427 i = sc->rfhead; in ierint()
429 status = sc->rframes[i]->ie_fd_status; in ierint()
432 if_inc_counter(sc->ifp, IFCOUNTER_IPACKETS, 1); in ierint()
434 if_inc_counter(sc->ifp, IFCOUNTER_IERRORS, in ierint()
435 sc->scb->ie_err_crc + in ierint()
436 sc->scb->ie_err_align + in ierint()
437 sc->scb->ie_err_resource + in ierint()
438 sc->scb->ie_err_overrun); in ierint()
439 sc->scb->ie_err_crc = 0; in ierint()
440 sc->scb->ie_err_align = 0; in ierint()
441 sc->scb->ie_err_resource = 0; in ierint()
442 sc->scb->ie_err_overrun = 0; in ierint()
445 ie_readframe(sc, i); in ierint()
448 if (!(sc->scb->ie_status & IE_RU_READY)) { in ierint()
449 sc->rframes[0]->ie_fd_next = in ierint()
450 MK_16(MEM(sc), sc->rbuffs[0]); in ierint()
451 sc->scb->ie_recv_list = in ierint()
452 MK_16(MEM(sc), sc->rframes[0]); in ierint()
453 command_and_wait(sc, IE_RU_START, 0, 0); in ierint()
458 i = (i + 1) % sc->nframes; in ierint()
469 ietint(struct ie_softc *sc) in ietint() argument
471 struct ifnet *ifp = sc->ifp; in ietint()
477 for (i = 0; i < sc->xmit_count; i++) { in ietint()
478 status = sc->xmit_cmds[i]->ie_xmit_status; in ietint()
502 sc->xmit_count = 0; in ietint()
509 if (sc->want_mcsetup) { in ietint()
510 mc_setup(sc); in ietint()
511 sc->want_mcsetup = 0; in ietint()
514 sc->xmit_cmds[0]->ie_xmit_status |= IE_STAT_COMPL; in ietint()
526 iernr(struct ie_softc *sc) in iernr() argument
529 setup_rfa(sc, (v_caddr_t) sc->rframes[0]); in iernr()
531 sc->scb->ie_recv_list = MK_16(MEM(sc), sc->rframes[0]); in iernr()
532 command_and_wait(sc, IE_RU_START, 0, 0); in iernr()
535 command_and_wait(sc, IE_RU_DISABLE, 0, 0); /* just in case */ in iernr()
536 setup_rfa(sc, (v_caddr_t) sc->rframes[0]); /* ignore cast-qual */ in iernr()
538 sc->scb->ie_recv_list = MK_16(MEM(sc), sc->rframes[0]); in iernr()
539 command_and_wait(sc, IE_RU_START, 0, 0); /* was ENABLE */ in iernr()
542 ie_ack(sc, IE_ST_WHENCE); in iernr()
544 if_inc_counter(sc->ifp, IFCOUNTER_IERRORS, 1); in iernr()
579 check_eh(struct ie_softc *sc, struct ether_header *eh) in check_eh() argument
583 if (sc->promisc == 0) { in check_eh()
595 for (i = 0; i < sc->mcast_count; i++) { in check_eh()
597 (u_char *)&sc->mcast_addrs[i])) in check_eh()
604 if ((sc->promisc & IFF_PROMISC) != 0) in check_eh()
608 if (ether_equal(eh->ether_dhost, IF_LLADDR(sc->ifp))) in check_eh()
622 ie_buflen(struct ie_softc *sc, int head) in ie_buflen() argument
624 return (sc->rbuffs[head]->ie_rbd_actual in ie_buflen()
629 ie_packet_len(struct ie_softc *sc) in ie_packet_len() argument
632 int head = sc->rbhead; in ie_packet_len()
636 if (!(sc->rbuffs[sc->rbhead]->ie_rbd_actual & IE_RBD_USED)) { in ie_packet_len()
638 print_rbd(sc->rbuffs[sc->rbhead]); in ie_packet_len()
642 sc->ifp->if_xname, sc->rbhead); in ie_packet_len()
643 iereset(sc); in ie_packet_len()
646 i = sc->rbuffs[head]->ie_rbd_actual & IE_RBD_LAST; in ie_packet_len()
648 acc += ie_buflen(sc, head); in ie_packet_len()
649 head = (head + 1) % sc->nrxbufs; in ie_packet_len()
666 ieget(struct ie_softc *sc, struct mbuf **mp) in ieget() argument
675 totlen = ie_packet_len(sc); in ieget()
682 bcopy(sc->cbuffs[sc->rbhead], &eh, sizeof(struct ether_header)); in ieget()
691 if (!check_eh(sc, &eh)) { in ieget()
692 ie_drop_packet_buffer(sc); in ieget()
698 ie_drop_packet_buffer(sc); in ieget()
703 m->m_pkthdr.rcvif = sc->ifp; in ieget()
727 ie_drop_packet_buffer(sc); in ieget()
752 head = sc->rbhead; /* current rx buffer */ in ieget()
760 int thislen = ie_buflen(sc, head) - offset; in ieget()
769 bcopy((v_caddr_t) (sc->cbuffs[head] + offset), in ieget()
786 bcopy((v_caddr_t) (sc->cbuffs[head] + offset), in ieget()
798 bcopy((v_caddr_t) (sc->cbuffs[head] + offset), in ieget()
810 sc->rbuffs[head]->ie_rbd_actual = 0; in ieget()
811 sc->rbuffs[head]->ie_rbd_length |= IE_RBD_LAST; in ieget()
812 sc->rbhead = head = (head + 1) % sc->nrxbufs; in ieget()
813 sc->rbuffs[sc->rbtail]->ie_rbd_length &= ~IE_RBD_LAST; in ieget()
814 sc->rbtail = (sc->rbtail + 1) % sc->nrxbufs; in ieget()
835 ie_readframe(struct ie_softc *sc, int num/* frame number to read */) in ie_readframe() argument
837 struct ifnet *ifp = sc->ifp; in ie_readframe()
844 bcopy((v_caddr_t) (sc->rframes[num]), &rfd, in ie_readframe()
851 sc->rframes[num]->ie_fd_status = 0; in ie_readframe()
852 sc->rframes[num]->ie_fd_last |= IE_FD_LAST; in ie_readframe()
853 sc->rframes[sc->rftail]->ie_fd_last &= ~IE_FD_LAST; in ie_readframe()
854 sc->rftail = (sc->rftail + 1) % sc->nframes; in ie_readframe()
855 sc->rfhead = (sc->rfhead + 1) % sc->nframes; in ie_readframe()
858 if (ieget(sc, &m)) { in ie_readframe()
859 if_inc_counter(sc->ifp, IFCOUNTER_IERRORS, 1); /* this counts as an in ie_readframe()
881 IE_UNLOCK(sc); in ie_readframe()
883 IE_LOCK(sc); in ie_readframe()
887 ie_drop_packet_buffer(struct ie_softc *sc) in ie_drop_packet_buffer() argument
896 if (!(sc->rbuffs[sc->rbhead]->ie_rbd_actual & IE_RBD_USED)) { in ie_drop_packet_buffer()
898 print_rbd(sc->rbuffs[sc->rbhead]); in ie_drop_packet_buffer()
901 sc->ifp->if_xname, sc->rbhead); in ie_drop_packet_buffer()
902 iereset(sc); in ie_drop_packet_buffer()
905 i = sc->rbuffs[sc->rbhead]->ie_rbd_actual & IE_RBD_LAST; in ie_drop_packet_buffer()
907 sc->rbuffs[sc->rbhead]->ie_rbd_length |= IE_RBD_LAST; in ie_drop_packet_buffer()
908 sc->rbuffs[sc->rbhead]->ie_rbd_actual = 0; in ie_drop_packet_buffer()
909 sc->rbhead = (sc->rbhead + 1) % sc->nrxbufs; in ie_drop_packet_buffer()
910 sc->rbuffs[sc->rbtail]->ie_rbd_length &= ~IE_RBD_LAST; in ie_drop_packet_buffer()
911 sc->rbtail = (sc->rbtail + 1) % sc->nrxbufs; in ie_drop_packet_buffer()
922 struct ie_softc *sc = ifp->if_softc; in iestart() local
924 IE_LOCK(sc); in iestart()
926 IE_UNLOCK(sc); in iestart()
932 struct ie_softc *sc = ifp->if_softc; in iestart_locked() local
941 volatile u_short *bptr = &sc->scb->ie_command_list; in iestart_locked()
949 IF_DEQUEUE(&sc->ifp->if_snd, m); in iestart_locked()
955 buffer = sc->xmit_cbuffs[sc->xmit_count]; in iestart_locked()
967 sc->xmit_buffs[sc->xmit_count]->ie_xmit_flags = in iestart_locked()
969 sc->xmit_buffs[sc->xmit_count]->ie_xmit_next = 0xffff; in iestart_locked()
970 sc->xmit_buffs[sc->xmit_count]->ie_xmit_buf = in iestart_locked()
971 MK_24(sc->iomem, sc->xmit_cbuffs[sc->xmit_count]); in iestart_locked()
973 sc->xmit_cmds[sc->xmit_count]->com.ie_cmd_cmd = IE_CMD_XMIT; in iestart_locked()
974 sc->xmit_cmds[sc->xmit_count]->ie_xmit_status = 0; in iestart_locked()
975 sc->xmit_cmds[sc->xmit_count]->ie_xmit_desc = in iestart_locked()
976 MK_16(sc->iomem, sc->xmit_buffs[sc->xmit_count]); in iestart_locked()
978 *bptr = MK_16(sc->iomem, sc->xmit_cmds[sc->xmit_count]); in iestart_locked()
979 bptr = &sc->xmit_cmds[sc->xmit_count]->com.ie_cmd_link; in iestart_locked()
980 sc->xmit_count++; in iestart_locked()
981 } while (sc->xmit_count < sc->ntxbufs); in iestart_locked()
986 if (sc->xmit_count) { in iestart_locked()
987 sc->xmit_cmds[sc->xmit_count - 1]->com.ie_cmd_cmd |= in iestart_locked()
995 command_and_wait(sc, IE_CU_START, 0, 0); in iestart_locked()
1005 check_ie_present(struct ie_softc *sc) in check_ie_present() argument
1012 realbase = (uintptr_t) sc->iomembot + sc->iosize - (1 << 24); in check_ie_present()
1024 iscp = (volatile struct ie_int_sys_conf_ptr *) sc->iomembot; in check_ie_present()
1027 scb = (volatile struct ie_sys_ctl_block *) sc->iomembot; in check_ie_present()
1030 scp->ie_bus_use = sc->bus_use; /* 8-bit or 16-bit */ in check_ie_present()
1037 (*sc->ie_reset_586) (sc); in check_ie_present()
1038 (*sc->ie_chan_attn) (sc); in check_ie_present()
1060 (*sc->ie_reset_586) (sc); in check_ie_present()
1061 (*sc->ie_chan_attn) (sc); in check_ie_present()
1068 sc->iomem = (caddr_t) (uintptr_t) realbase; in check_ie_present()
1070 sc->iscp = iscp; in check_ie_present()
1071 sc->scb = scb; in check_ie_present()
1076 ie_ack(sc, IE_ST_WHENCE); in check_ie_present()
1082 el_reset_586(struct ie_softc *sc) in el_reset_586() argument
1084 outb(PORT(sc) + IE507_CTRL, EL_CTRL_RESET); in el_reset_586()
1086 outb(PORT(sc) + IE507_CTRL, EL_CTRL_NORMAL); in el_reset_586()
1091 sl_reset_586(struct ie_softc *sc) in sl_reset_586() argument
1093 outb(PORT(sc) + IEATT_RESET, 0); in sl_reset_586()
1097 ee16_reset_586(struct ie_softc *sc) in ee16_reset_586() argument
1099 outb(PORT(sc) + IEE16_ECTRL, IEE16_RESET_586); in ee16_reset_586()
1101 outb(PORT(sc) + IEE16_ECTRL, 0); in ee16_reset_586()
1106 el_chan_attn(struct ie_softc *sc) in el_chan_attn() argument
1108 outb(PORT(sc) + IE507_ATTN, 1); in el_chan_attn()
1112 sl_chan_attn(struct ie_softc *sc) in sl_chan_attn() argument
1114 outb(PORT(sc) + IEATT_ATTN, 0); in sl_chan_attn()
1118 ee16_chan_attn(struct ie_softc *sc) in ee16_chan_attn() argument
1120 outb(PORT(sc) + IEE16_ATTN, 0); in ee16_chan_attn()
1124 ee16_interrupt_enable(struct ie_softc *sc) in ee16_interrupt_enable() argument
1127 outb(sc->port + IEE16_IRQ, sc->irq_encoded | IEE16_IRQ_ENABLE); in ee16_interrupt_enable()
1132 sl_read_ether(struct ie_softc *sc, unsigned char *addr) in sl_read_ether() argument
1137 addr[i] = inb(PORT(sc) + i); in sl_read_ether()
1141 iereset(struct ie_softc *sc) in iereset() argument
1143 struct ifnet *ifp = sc->ifp; in iereset()
1146 ie_stop(sc); in iereset()
1151 if (command_and_wait(sc, IE_RU_ABORT | IE_CU_ABORT, 0, 0)) in iereset()
1154 if (command_and_wait(sc, IE_RU_DISABLE | IE_CU_STOP, 0, 0)) in iereset()
1158 if (!check_ie_present(sc)) in iereset()
1163 ieinit_locked(sc); in iereset()
1178 command_and_wait(struct ie_softc *sc, int cmd, volatile void *pcmd, int mask) in command_and_wait() argument
1183 sc->scb->ie_command = (u_short) cmd; in command_and_wait()
1186 (*sc->ie_chan_attn) (sc); in command_and_wait()
1210 (*sc->ie_chan_attn) (sc); in command_and_wait()
1212 while (sc->scb->ie_command); /* spin lock */ in command_and_wait()
1222 run_tdr(struct ie_softc *sc, volatile struct ie_tdr_cmd *cmd) in run_tdr() argument
1231 sc->scb->ie_command_list = MK_16(MEM(sc), cmd); in run_tdr()
1234 if (command_and_wait(sc, IE_CU_START, cmd, IE_STAT_COMPL)) in run_tdr()
1239 ie_ack(sc, IE_ST_WHENCE); in run_tdr()
1245 if_printf(sc->ifp, "transceiver problem\n"); in run_tdr()
1247 if_printf(sc->ifp, "TDR detected an open %d clocks away\n", in run_tdr()
1250 if_printf(sc->ifp, "TDR detected a short %d clocks away\n", in run_tdr()
1253 if_printf(sc->ifp, "TDR returned unknown status %x\n", result); in run_tdr()
1258 start_receiver(struct ie_softc *sc) in start_receiver() argument
1261 sc->scb->ie_recv_list = MK_16(MEM(sc), sc->rframes[0]); in start_receiver()
1262 command_and_wait(sc, IE_RU_START, 0, 0); in start_receiver()
1264 ie_ack(sc, IE_ST_WHENCE); in start_receiver()
1272 setup_rfa(struct ie_softc *sc, v_caddr_t ptr) in setup_rfa() argument
1279 for (i = 0; i < sc->nframes; i++) { in setup_rfa()
1280 sc->rframes[i] = rfd; in setup_rfa()
1288 for (i = 0; i < sc->nframes; i++) { in setup_rfa()
1289 sc->rframes[i]->ie_fd_next = in setup_rfa()
1290 MK_16(MEM(sc), sc->rframes[(i + 1) % sc->nframes]); in setup_rfa()
1294 sc->rframes[sc->nframes - 1]->ie_fd_last |= IE_FD_LAST; in setup_rfa()
1303 for (i = 0; i < sc->nrxbufs; i++) { in setup_rfa()
1304 sc->rbuffs[i] = rbd; in setup_rfa()
1308 rbd->ie_rbd_buffer = MK_24(MEM(sc), ptr); in setup_rfa()
1309 sc->cbuffs[i] = (volatile void *) ptr; in setup_rfa()
1315 for (i = 0; i < sc->nrxbufs; i++) { in setup_rfa()
1316 sc->rbuffs[i]->ie_rbd_next = in setup_rfa()
1317 MK_16(MEM(sc), sc->rbuffs[(i + 1) % sc->nrxbufs]); in setup_rfa()
1321 sc->rbuffs[sc->nrxbufs - 1]->ie_rbd_length |= IE_RBD_LAST; in setup_rfa()
1327 sc->rfhead = 0; in setup_rfa()
1328 sc->rftail = sc->nframes - 1; in setup_rfa()
1329 sc->rbhead = 0; in setup_rfa()
1330 sc->rbtail = sc->nrxbufs - 1; in setup_rfa()
1332 sc->scb->ie_recv_list = MK_16(MEM(sc), sc->rframes[0]); in setup_rfa()
1333 sc->rframes[0]->ie_fd_buf_desc = MK_16(MEM(sc), sc->rbuffs[0]); in setup_rfa()
1343 mc_setup(struct ie_softc *sc) in mc_setup() argument
1345 volatile struct ie_mcast_cmd *cmd = (volatile void *)sc->xmit_cbuffs[0]; in mc_setup()
1352 bcopy((v_caddr_t) sc->mcast_addrs, (v_caddr_t) cmd->ie_mcast_addrs, in mc_setup()
1353 sc->mcast_count * sizeof *sc->mcast_addrs); in mc_setup()
1355 cmd->ie_mcast_bytes = sc->mcast_count * 6; /* grrr... */ in mc_setup()
1357 sc->scb->ie_command_list = MK_16(MEM(sc), cmd); in mc_setup()
1358 if (command_and_wait(sc, IE_CU_START, cmd, IE_STAT_COMPL) in mc_setup()
1360 if_printf(sc->ifp, "multicast address setup command failed\n"); in mc_setup()
1376 struct ie_softc *sc = xsc; local
1378 IE_LOCK(sc);
1379 ieinit_locked(sc);
1380 IE_UNLOCK(sc);
1384 ieinit_locked(struct ie_softc *sc) in ieinit_locked() argument
1386 struct ifnet *ifp = sc->ifp; in ieinit_locked()
1387 volatile struct ie_sys_ctl_block *scb = sc->scb; in ieinit_locked()
1399 ie_setup_config(cmd, sc->promisc, in ieinit_locked()
1400 sc->hard_type == IE_STARLAN10); in ieinit_locked()
1405 scb->ie_command_list = MK_16(MEM(sc), cmd); in ieinit_locked()
1407 if (command_and_wait(sc, IE_CU_START, cmd, IE_STAT_COMPL) in ieinit_locked()
1425 scb->ie_command_list = MK_16(MEM(sc), cmd); in ieinit_locked()
1426 if (command_and_wait(sc, IE_CU_START, cmd, IE_STAT_COMPL) in ieinit_locked()
1437 run_tdr(sc, (volatile void *) ptr); in ieinit_locked()
1442 ie_ack(sc, IE_ST_WHENCE); in ieinit_locked()
1447 ptr = setup_rfa(sc, ptr); in ieinit_locked()
1455 for (i = 0; i < sc->ntxbufs; i++) { in ieinit_locked()
1456 sc->xmit_cmds[i] = (volatile void *) ptr; in ieinit_locked()
1457 ptr += sizeof *sc->xmit_cmds[i]; in ieinit_locked()
1459 sc->xmit_buffs[i] = (volatile void *)ptr; in ieinit_locked()
1460 ptr += sizeof *sc->xmit_buffs[i]; in ieinit_locked()
1465 for (i = 0; i < sc->ntxbufs - 1; i++) { in ieinit_locked()
1466 sc->xmit_cbuffs[i] = (volatile void *)ptr; in ieinit_locked()
1470 sc->xmit_cbuffs[sc->ntxbufs - 1] = (volatile void *) ptr; in ieinit_locked()
1472 for (i = 1; i < sc->ntxbufs; i++) { in ieinit_locked()
1473 bzero((v_caddr_t) sc->xmit_cmds[i], sizeof *sc->xmit_cmds[i]); in ieinit_locked()
1474 bzero((v_caddr_t) sc->xmit_buffs[i], sizeof *sc->xmit_buffs[i]); in ieinit_locked()
1480 sc->xmit_cmds[0]->ie_xmit_status = IE_STAT_COMPL; in ieinit_locked()
1483 if (sc->hard_type == IE_EE16) { in ieinit_locked()
1486 bart_config = inb(PORT(sc) + IEE16_CONFIG); in ieinit_locked()
1490 outb(PORT(sc) + IEE16_CONFIG, bart_config); in ieinit_locked()
1491 ee16_interrupt_enable(sc); in ieinit_locked()
1492 ee16_chan_attn(sc); in ieinit_locked()
1498 start_receiver(sc); in ieinit_locked()
1504 ie_stop(struct ie_softc *sc) in ie_stop() argument
1506 struct ifnet *ifp = sc->ifp; in ie_stop()
1509 command_and_wait(sc, IE_RU_DISABLE, 0, 0); in ie_stop()
1516 struct ie_softc *sc = ifp->if_softc; in ieioctl() local
1525 IE_LOCK(sc); in ieioctl()
1528 ie_stop(sc); in ieioctl()
1531 sc->promisc = in ieioctl()
1533 ieinit_locked(sc); in ieioctl()
1534 } else if (sc->promisc ^ in ieioctl()
1536 sc->promisc = in ieioctl()
1538 ieinit_locked(sc); in ieioctl()
1540 IE_UNLOCK(sc); in ieioctl()
1549 IE_LOCK(sc); in ieioctl()
1550 ie_mc_reset(sc); in ieioctl()
1551 IE_UNLOCK(sc); in ieioctl()
1564 ie_mc_reset(struct ie_softc *sc) in ie_mc_reset() argument
1571 sc->mcast_count = 0; in ie_mc_reset()
1572 if_maddr_rlock(sc->ifp); in ie_mc_reset()
1573 TAILQ_FOREACH(ifma, &sc->ifp->if_multiaddrs, ifma_link) { in ie_mc_reset()
1578 if (sc->mcast_count >= MAXMCAST) { in ie_mc_reset()
1579 sc->ifp->if_flags |= IFF_ALLMULTI; in ie_mc_reset()
1580 if (sc->ifp->if_flags & IFF_UP) in ie_mc_reset()
1581 ieinit_locked(sc); in ie_mc_reset()
1585 &(sc->mcast_addrs[sc->mcast_count]), 6); in ie_mc_reset()
1586 sc->mcast_count++; in ie_mc_reset()
1588 if_maddr_runlock(sc->ifp); in ie_mc_reset()
1591 sc->want_mcsetup = 1; in ie_mc_reset()
1613 struct ie_softc * sc; in ie_alloc_resources() local
1617 sc = device_get_softc(dev); in ie_alloc_resources()
1619 sc->io_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &sc->io_rid, in ie_alloc_resources()
1621 if (!sc->io_res) { in ie_alloc_resources()
1626 sc->io_bt = rman_get_bustag(sc->io_res); in ie_alloc_resources()
1627 sc->io_bh = rman_get_bushandle(sc->io_res); in ie_alloc_resources()
1629 sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->mem_rid, in ie_alloc_resources()
1631 if (!sc->mem_res) { in ie_alloc_resources()
1636 sc->mem_bt = rman_get_bustag(sc->mem_res); in ie_alloc_resources()
1637 sc->mem_bh = rman_get_bushandle(sc->mem_res); in ie_alloc_resources()
1639 sc->irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &sc->irq_rid, in ie_alloc_resources()
1641 if (!sc->irq_res) { in ie_alloc_resources()
1647 sc->port = rman_get_start(sc->io_res); /* XXX hack */ in ie_alloc_resources()
1648 sc->iomembot = rman_get_virtual(sc->mem_res); in ie_alloc_resources()
1649 sc->iosize = rman_get_size(sc->mem_res); in ie_alloc_resources()
1659 struct ie_softc * sc; in ie_release_resources() local
1661 sc = device_get_softc(dev); in ie_release_resources()
1663 if (sc->irq_ih) in ie_release_resources()
1664 bus_teardown_intr(dev, sc->irq_res, sc->irq_ih); in ie_release_resources()
1665 if (sc->rframes) in ie_release_resources()
1666 free(sc->rframes, M_DEVBUF); in ie_release_resources()
1667 if (sc->io_res) in ie_release_resources()
1669 sc->io_rid, sc->io_res); in ie_release_resources()
1670 if (sc->irq_res) in ie_release_resources()
1672 sc->irq_rid, sc->irq_res); in ie_release_resources()
1673 if (sc->mem_res) in ie_release_resources()
1675 sc->mem_rid, sc->mem_res); in ie_release_resources()
1676 if (sc->ifp) in ie_release_resources()
1677 if_free(sc->ifp); in ie_release_resources()
1685 struct ie_softc * sc; in ie_detach() local
1688 sc = device_get_softc(dev); in ie_detach()
1689 ifp = sc->ifp; in ie_detach()
1691 IE_LOCK(sc); in ie_detach()
1692 if (sc->hard_type == IE_EE16) in ie_detach()
1693 ee16_shutdown(sc); in ie_detach()
1695 ie_stop(sc); in ie_detach()
1696 IE_UNLOCK(sc); in ie_detach()
1699 mtx_destroy(&sc->lock); in ie_detach()