Lines Matching refs:sc

76 pdq_ifstop(pdq_softc_t *sc)
79 PDQ_IFNET(sc)->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
80 sc->sc_pdq->pdq_flags &= ~PDQ_RUNNING;
81 pdq_stop(sc->sc_pdq);
82 callout_stop(&sc->watchdog);
86 pdq_ifinit_locked(pdq_softc_t *sc)
89 PDQ_LOCK_ASSERT(sc);
90 if (PDQ_IFNET(sc)->if_flags & IFF_UP) {
91 PDQ_IFNET(sc)->if_drv_flags |= IFF_DRV_RUNNING;
92 if (PDQ_IFNET(sc)->if_flags & IFF_PROMISC) {
93 sc->sc_pdq->pdq_flags |= PDQ_PROMISC;
95 sc->sc_pdq->pdq_flags &= ~PDQ_PROMISC;
97 if (PDQ_IFNET(sc)->if_flags & IFF_LINK1) {
98 sc->sc_pdq->pdq_flags |= PDQ_PASS_SMT;
100 sc->sc_pdq->pdq_flags &= ~PDQ_PASS_SMT;
102 sc->sc_pdq->pdq_flags |= PDQ_RUNNING;
103 pdq_run(sc->sc_pdq);
104 callout_reset(&sc->watchdog, hz, pdq_watchdog, sc);
106 pdq_ifstop(sc);
112 pdq_softc_t *sc;
114 sc = arg;
115 PDQ_LOCK(sc);
116 pdq_ifinit_locked(sc);
117 PDQ_UNLOCK(sc);
124 pdq_softc_t *sc;
127 sc = arg;
128 PDQ_LOCK_ASSERT(sc);
129 callout_reset(&sc->watchdog, hz, pdq_watchdog, sc);
130 if (sc->timer == 0 || --sc->timer > 0)
137 ifp = PDQ_IFNET(sc);
151 pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
155 PDQ_LOCK_ASSERT(sc);
159 if (sc->timer == 0)
160 sc->timer = PDQ_OS_TX_TIMEOUT;
162 if ((sc->sc_pdq->pdq_flags & PDQ_TXOK) == 0) {
163 PDQ_IFNET(sc)->if_drv_flags |= IFF_DRV_OACTIVE;
166 sc->sc_flags |= PDQIF_DOWNCALL;
179 if (!bus_dmamap_create(sc->sc_dmatag, m->m_pkthdr.len, 255,
181 if (!bus_dmamap_load_mbuf(sc->sc_dmatag, map, m,
183 bus_dmamap_sync(sc->sc_dmatag, map, 0, m->m_pkthdr.len,
200 if (pdq_queue_transmit_data(sc->sc_pdq, m) == PDQ_FALSE)
208 PDQ_DO_TYPE2_PRODUCER(sc->sc_pdq);
209 sc->sc_flags &= ~PDQIF_DOWNCALL;
215 pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
217 PDQ_LOCK(sc);
219 PDQ_UNLOCK(sc);
230 pdq_softc_t *sc = pdq->pdq_os_ctx;
231 struct ifnet *ifp = PDQ_IFNET(sc);
245 pdq_os_databuf_sync(sc, m0, offset, m0->m_len, BUS_DMASYNC_POSTREAD);
246 bus_dmamap_unload(sc->sc_dmatag, M_GETCTX(m0, bus_dmamap_t));
247 bus_dmamap_destroy(sc->sc_dmatag, M_GETCTX(m0, bus_dmamap_t));
263 PDQ_UNLOCK(sc);
265 PDQ_LOCK(sc);
272 pdq_softc_t *sc = pdq->pdq_os_ctx;
273 PDQ_IFNET(sc)->if_drv_flags &= ~IFF_DRV_OACTIVE;
274 if (IFQ_IS_EMPTY(&PDQ_IFNET(sc)->if_snd) == 0) {
275 sc->timer = PDQ_OS_TX_TIMEOUT;
276 if ((sc->sc_flags & PDQIF_DOWNCALL) == 0)
277 pdq_ifstart_locked(PDQ_IFNET(sc));
279 sc->timer = 0;
288 pdq_softc_t *sc = pdq->pdq_os_ctx;
290 if (PQD_IFNET(sc)->if_bpf != NULL)
291 PDQ_BPF_MTAP(sc, m);
294 if_inc_counter(PDQ_IFNET(sc), IFCOUNTER_OPACKETS, 1);
304 pdq_softc_t *sc = pdq->pdq_os_ctx;
308 ifp = sc->ifp;
318 PDQ_IFNET(sc)->if_flags &= ~IFF_ALLMULTI;
321 if_maddr_rlock(PDQ_IFNET(sc));
322 for (ifma = TAILQ_FIRST(&PDQ_IFNET(sc)->if_multiaddrs); ifma && num_addrs > 0;
334 if_maddr_runlock(PDQ_IFNET(sc));
341 PDQ_IFNET(sc)->if_flags |= IFF_ALLMULTI;
352 pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
354 PDQ_LOCK(sc);
355 if (sc->sc_ifmedia.ifm_media & IFM_FDX) {
356 if ((sc->sc_pdq->pdq_flags & PDQ_WANT_FDX) == 0) {
357 sc->sc_pdq->pdq_flags |= PDQ_WANT_FDX;
358 if (sc->sc_pdq->pdq_flags & PDQ_RUNNING)
359 pdq_run(sc->sc_pdq);
361 } else if (sc->sc_pdq->pdq_flags & PDQ_WANT_FDX) {
362 sc->sc_pdq->pdq_flags &= ~PDQ_WANT_FDX;
363 if (sc->sc_pdq->pdq_flags & PDQ_RUNNING)
364 pdq_run(sc->sc_pdq);
366 PDQ_UNLOCK(sc);
376 pdq_softc_t * const sc = PDQ_OS_IFP_TO_SOFTC(ifp);
378 PDQ_LOCK(sc);
380 if (sc->sc_pdq->pdq_flags & PDQ_IS_ONRING)
384 if (sc->sc_pdq->pdq_flags & PDQ_IS_FDX)
386 PDQ_UNLOCK(sc);
394 pdq_softc_t * const sc = pdq->pdq_os_ctx;
409 sc->sc_ifmedia.ifm_media = media | IFM_FDDI;
420 pdq_softc_t *sc = PDQ_OS_IFP_TO_SOFTC(ifp);
425 pdq_ifinit(sc);
431 PDQ_LOCK(sc);
432 if (PDQ_IFNET(sc)->if_drv_flags & IFF_DRV_RUNNING) {
433 pdq_run(sc->sc_pdq);
436 PDQ_UNLOCK(sc);
444 error = ifmedia_ioctl(ifp, ifr, &sc->sc_ifmedia, cmd);
464 pdq_ifattach(pdq_softc_t *sc, const pdq_uint8_t *llc, pdq_type_t type)
468 ifp = PDQ_IFNET(sc) = if_alloc(IFT_FDDI);
470 device_printf(sc->dev, "can not if_alloc()\n");
474 mtx_init(&sc->mtx, device_get_nameunit(sc->dev), MTX_NETWORK_LOCK,
476 callout_init_mtx(&sc->watchdog, &sc->mtx, 0);
478 if_initname(ifp, device_get_name(sc->dev), device_get_unit(sc->dev));
479 ifp->if_softc = sc;
489 const int media = sc->sc_ifmedia.ifm_media;
490 ifmedia_init(&sc->sc_ifmedia, IFM_FDX,
492 ifmedia_add(&sc->sc_ifmedia, media, 0, 0);
493 ifmedia_set(&sc->sc_ifmedia, media);
497 sc->sc_pdq = pdq_initialize(sc->mem_bst, sc->mem_bsh, ifp->if_xname, -1,
498 sc, type);
499 if (sc->sc_pdq == NULL) {
500 device_printf(sc->dev, "Initialization failed.\n");
509 pdq_ifdetach (pdq_softc_t *sc)
513 ifp = sc->ifp;
516 PDQ_LOCK(sc);
517 pdq_ifstop(sc);
518 PDQ_UNLOCK(sc);
519 callout_drain(&sc->watchdog);
520 pdq_free(sc->dev);
528 pdq_softc_t *sc;
530 sc = device_get_softc(dev);
532 if (sc->io)
533 bus_release_resource(dev, sc->io_type, sc->io_rid, sc->io);
534 if (sc->mem)
535 bus_release_resource(dev, sc->mem_type, sc->mem_rid, sc->mem);
536 if (sc->irq_ih)
537 bus_teardown_intr(dev, sc->irq, sc->irq_ih);
538 if (sc->irq)
539 bus_release_resource(dev, SYS_RES_IRQ, sc->irq_rid, sc->irq);
540 if (sc->ifp)
541 if_free(sc->ifp);
546 if (mtx_initialized(&sc->mtx) != 0) {
547 mtx_destroy(&sc->mtx);
558 pdq_softc_t * const sc = pdq->pdq_os_ctx;
564 not_ok = bus_dmamem_alloc(sc->sc_dmatag,
570 not_ok = bus_dmamem_map(sc->sc_dmatag, db_segs, db_nsegs,
576 not_ok = bus_dmamap_create(sc->sc_dmatag, db_segs[0].ds_len, 1,
577 0x2000, 0, BUS_DMA_NOWAIT, &sc->sc_dbmap);
581 not_ok = bus_dmamap_load(sc->sc_dmatag, sc->sc_dbmap,
587 pdq->pdq_pa_descriptor_block = sc->sc_dbmap->dm_segs[0].ds_addr;
588 not_ok = bus_dmamem_alloc(sc->sc_dmatag,
594 not_ok = bus_dmamem_map(sc->sc_dmatag, ui_segs, ui_nsegs,
601 not_ok = bus_dmamap_create(sc->sc_dmatag, ui_segs[0].ds_len, 1,
603 &sc->sc_uimap);
607 not_ok = bus_dmamap_load(sc->sc_dmatag, sc->sc_uimap,
613 pdq->pdq_unsolicited_info.ui_pa_bufstart = sc->sc_uimap->dm_segs[0].ds_addr;
617 not_ok = bus_dmamem_map(sc->sc_dmatag, cb_segs, 1,
623 not_ok = bus_dmamap_create(sc->sc_dmatag, cb_segs[0].ds_len, 1,
624 0x2000, 0, BUS_DMA_NOWAIT, &sc->sc_cbmap);
628 not_ok = bus_dmamap_load(sc->sc_dmatag, sc->sc_cbmap,
633 pdq->pdq_pa_consumer_block = sc->sc_cbmap->dm_segs[0].ds_addr;
639 bus_dmamap_unload(sc->sc_dmatag, sc->sc_cbmap);
643 bus_dmamap_destroy(sc->sc_dmatag, sc->sc_cbmap);
647 bus_dmamem_unmap(sc->sc_dmatag,
652 bus_dmamap_unload(sc->sc_dmatag, sc->sc_uimap);
656 bus_dmamap_destroy(sc->sc_dmatag, sc->sc_uimap);
660 bus_dmamem_unmap(sc->sc_dmatag,
666 bus_dmamem_free(sc->sc_dmatag, ui_segs, ui_nsegs);
670 bus_dmamap_unload(sc->sc_dmatag, sc->sc_dbmap);
674 bus_dmamap_destroy(sc->sc_dmatag, sc->sc_dbmap);
678 bus_dmamem_unmap(sc->sc_dmatag,
684 bus_dmamem_free(sc->sc_dmatag, db_segs, db_nsegs);
694 pdq_os_ctx_t *sc,
699 bus_dmamap_sync(sc->sc_dmatag, sc->sc_dbmap, offset, length, ops);
704 pdq_os_ctx_t *sc,
707 bus_dmamap_sync(sc->sc_dmatag, sc->sc_cbmap, 0, sizeof(pdq_consumer_block_t), ops);
712 pdq_os_ctx_t *sc,
717 bus_dmamap_sync(sc->sc_dmatag, sc->sc_uimap, offset, length, ops);
722 pdq_os_ctx_t *sc,
728 bus_dmamap_sync(sc->sc_dmatag, M_GETCTX(m, bus_dmamap_t), offset, length, ops);
733 pdq_os_ctx_t *sc,
738 bus_dmamap_unload(sc->sc_dmatag, map);
739 bus_dmamap_destroy(sc->sc_dmatag, map);
747 pdq_os_ctx_t *sc)
754 printf("%s: can't alloc small buf\n", sc->sc_dev.dv_xname);
758 printf("%s: can't alloc cluster\n", sc->sc_dev.dv_xname);
764 if (bus_dmamap_create(sc->sc_dmatag, PDQ_OS_DATABUF_SIZE,
766 printf("%s: can't create dmamap\n", sc->sc_dev.dv_xname);
770 if (bus_dmamap_load_mbuf(sc->sc_dmatag, map, m,
772 printf("%s: can't load dmamap\n", sc->sc_dev.dv_xname);
773 bus_dmamap_destroy(sc->sc_dmatag, map);