Home | History | Annotate | Download | only in ic

Lines Matching refs:sc

101  *	int (*sc_iee_cmd)(struct iee_softc *sc, uint32_t cmd);
102 * int (*sc_iee_reset)(struct iee_softc *sc);
110 * this may have caused by calling (sc->sc_iee_cmd)(sc, IEE_SCB_ACK);
117 * sc->sc_type has to be set to I82596_UNKNOWN or I82596_DX or I82596_CA.
122 * IEE_NEED_SWAP in sc->sc_flags has to be cleared on little endian hardware
142 * IEE_REV_A flag must be set in sc->sc_flags if the IEE_SYSBUS_BE feature
145 * sc->sc_cl_align must be set to 1 or to the cache line size. When set to
146 * 1 no special alignment of DMA descriptors is done. If sc->sc_cl_align != 1
148 * of sc->sc_cl_align. This is needed on some hppa machines that have non DMA
152 * The MD frontend also has to set sc->sc_cl_align and sc->sc_sysbus
158 * if sc->sc_cl_align == 1 and aligned to a cache line if sc->sc_cl_align != 1.
163 * Call void iee_attach(struct iee_softc *sc, uint8_t *ether_address,
182 * together in a circular list. sc->sc_rx_done is the count of RFDs in the
194 struct iee_softc *sc = intarg;
195 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
207 (sc->sc_iee_cmd)(sc, IEE_SCB_ACK);
210 IEE_SCBSYNC(sc, BUS_DMASYNC_POSTREAD);
211 scb_status = SC_SCB(sc)->scb_status;
212 scb_cmd = SC_SCB(sc)->scb_cmd;
214 rfd = SC_RFD(sc, sc->sc_rx_done);
215 IEE_RFDSYNC(sc, sc->sc_rx_done,
219 IEE_RFDSYNC(sc, sc->sc_rx_done, BUS_DMASYNC_PREREAD);
223 IEE_RFDSYNC(sc, sc->sc_rx_done,
227 rx_map = sc->sc_rx_map[sc->sc_rx_done];
228 rx_mbuf = sc->sc_rx_mbuf[sc->sc_rx_done];
229 IEE_RBDSYNC(sc, (sc->sc_rx_done + IEE_NRFD - 1) % IEE_NRFD,
231 SC_RBD(sc, (sc->sc_rx_done + IEE_NRFD - 1) % IEE_NRFD)->rbd_size
233 IEE_RBDSYNC(sc, (sc->sc_rx_done + IEE_NRFD - 1) % IEE_NRFD,
235 rbd = SC_RBD(sc, sc->sc_rx_done);
236 IEE_RBDSYNC(sc, sc->sc_rx_done,
245 IEE_RBDSYNC(sc, sc->sc_rx_done,
249 device_xname(sc->sc_dev),
250 ++sc->sc_rx_err, status, count);
251 sc->sc_rx_done = (sc->sc_rx_done + 1) % IEE_NRFD;
254 bus_dmamap_sync(sc->sc_dmat, rx_map, 0, rx_map->dm_mapsize,
262 device_xname(sc->sc_dev));
265 MCLAIM(new_mbuf, &sc->sc_ethercom.ec_rx_mowner);
269 device_xname(sc->sc_dev));
273 bus_dmamap_unload(sc->sc_dmat, rx_map);
276 if (bus_dmamap_load_mbuf(sc->sc_dmat, rx_map,
279 device_xname(sc->sc_dev));
280 bus_dmamap_sync(sc->sc_dmat, rx_map, 0,
283 sc->sc_rx_mbuf[sc->sc_rx_done] = new_mbuf;
287 IEE_RBDSYNC(sc, sc->sc_rx_done,
289 sc->sc_rx_done = (sc->sc_rx_done + 1) % IEE_NRFD;
296 rfd = SC_RFD(sc, n);
297 rbd = SC_RBD(sc, n);
300 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rfd_off
301 + sc->sc_rfd_sz * ((n + 1) % IEE_NRFD)));
303 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rbd_off
304 + sc->sc_rbd_sz * ((n + 1) % IEE_NRFD)));
306 sc->sc_rx_map[n]->dm_segs[0].ds_len;
308 IEE_SWAPA32(sc->sc_rx_map[n]->dm_segs[0].ds_addr);
310 SC_RFD(sc, 0)->rfd_rbd_addr =
311 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rbd_off));
312 sc->sc_rx_done = 0;
313 bus_dmamap_sync(sc->sc_dmat, sc->sc_shmem_map, sc->sc_rfd_off,
314 sc->sc_rfd_sz * IEE_NRFD + sc->sc_rbd_sz * IEE_NRFD,
316 (sc->sc_iee_cmd)(sc, IEE_SCB_RUC_ST);
318 device_xname(sc->sc_dev));
321 if (sc->sc_next_cb != 0) {
322 IEE_CBSYNC(sc, sc->sc_next_cb - 1,
324 status = SC_CB(sc, sc->sc_next_cb - 1)->cb_status;
325 IEE_CBSYNC(sc, sc->sc_next_cb - 1,
330 if (sc->sc_next_tbd != 0) {
332 for (n = 0 ; n < sc->sc_next_cb ; n++) {
333 bus_dmamap_unload(sc->sc_dmat,
334 sc->sc_tx_map[n]);
335 m_freem(sc->sc_tx_mbuf[n]);
336 sc->sc_tx_mbuf[n] = NULL;
337 IEE_CBSYNC(sc, n,
340 status = SC_CB(sc, n)->cb_status;
341 IEE_CBSYNC(sc, n,
349 sc->sc_tx_col += col;
356 sc->sc_next_tbd = 0;
359 for (n = 0 ; n < sc->sc_next_cb; n++) {
363 IEE_CBSYNC(sc, n, BUS_DMASYNC_POSTREAD |
365 cmd = SC_CB(sc, n)->cb_cmd;
366 status = SC_CB(sc, n)->cb_status;
367 IEE_CBSYNC(sc, n, BUS_DMASYNC_PREREAD);
374 device_xname(sc->sc_dev),
376 ++sc->sc_cmd_err,
379 sc->sc_next_cb = 0;
380 if ((sc->sc_flags & IEE_WANT_MCAST) != 0) {
381 iee_cb_setup(sc, IEE_CB_CMD_MCS |
383 (sc->sc_iee_cmd)(sc, IEE_SCB_CUC_EXE);
389 if (IEE_SWAP32(SC_SCB(sc)->scb_crc_err) != sc->sc_crc_err) {
390 sc->sc_crc_err = IEE_SWAP32(SC_SCB(sc)->scb_crc_err);
391 printf("%s: iee_intr: crc_err=%d\n", device_xname(sc->sc_dev),
392 sc->sc_crc_err);
394 if (IEE_SWAP32(SC_SCB(sc)->scb_align_err) != sc->sc_align_err) {
395 sc->sc_align_err = IEE_SWAP32(SC_SCB(sc)->scb_align_err);
397 device_xname(sc->sc_dev), sc->sc_align_err);
399 if (IEE_SWAP32(SC_SCB(sc)->scb_resource_err) != sc->sc_resource_err) {
400 sc->sc_resource_err = IEE_SWAP32(SC_SCB(sc)->scb_resource_err);
402 device_xname(sc->sc_dev), sc->sc_resource_err);
404 if (IEE_SWAP32(SC_SCB(sc)->scb_overrun_err) != sc->sc_overrun_err) {
405 sc->sc_overrun_err = IEE_SWAP32(SC_SCB(sc)->scb_overrun_err);
407 device_xname(sc->sc_dev), sc->sc_overrun_err);
409 if (IEE_SWAP32(SC_SCB(sc)->scb_rcvcdt_err) != sc->sc_rcvcdt_err) {
410 sc->sc_rcvcdt_err = IEE_SWAP32(SC_SCB(sc)->scb_rcvcdt_err);
412 device_xname(sc->sc_dev), sc->sc_rcvcdt_err);
414 if (IEE_SWAP32(SC_SCB(sc)->scb_short_fr_err) != sc->sc_short_fr_err) {
415 sc->sc_short_fr_err = IEE_SWAP32(SC_SCB(sc)->scb_short_fr_err);
417 sc->sc_dev), sc->sc_short_fr_err);
419 IEE_SCBSYNC(sc, BUS_DMASYNC_PREREAD);
420 (sc->sc_iee_cmd)(sc, IEE_SCB_ACK);
439 * A CBL is running or on the way to be set up when (sc->sc_next_cb != 0).
443 * ((sc->sc_next_cb != 0) && (sc->sc_next_tbd != 0)).
464 * A deferred MCS is signaled via ((sc->sc_flags & IEE_WANT_MCAST) != 0)
467 iee_cb_setup(struct iee_softc *sc, uint32_t cmd)
469 struct iee_cb *cb = SC_CB(sc, sc->sc_next_cb);
470 struct ethercom *ec = &sc->sc_ethercom;
475 memset(cb, 0, sc->sc_cb_sz);
485 memcpy(__UNVOLATILE(cb->cb_cf), sc->sc_cf, sc->sc_cf[0]
489 if (sc->sc_next_cb != 0) {
490 sc->sc_flags |= IEE_WANT_MCAST;
493 sc->sc_flags &= ~IEE_WANT_MCAST;
494 if ((sc->sc_cf[8] & IEE_CF_8_PRM) != 0) {
496 iee_cb_setup(sc, IEE_CB_CMD_CONF | IEE_CB_S | IEE_CB_EL
501 cb = SC_CB(sc, sc->sc_next_cb + 1);
509 * ETHER_ADDR_LEN + 2 * sc->sc_cb_sz >
510 sc->sc_cb_sz * IEE_NCB +
511 sc->sc_tbd_sz * IEE_NTBD * IEE_NCB) {
525 sc->sc_cf[11] &= ~IEE_CF_11_MCALL;
529 sc->sc_cf[11] |= IEE_CF_11_MCALL;
530 /* Mcast setup may need more than sc->sc_cb_sz bytes. */
531 bus_dmamap_sync(sc->sc_dmat, sc->sc_shmem_map,
532 sc->sc_cb_off,
533 sc->sc_cb_sz * IEE_NCB +
534 sc->sc_tbd_sz * IEE_NTBD * IEE_NCB,
537 iee_cb_setup(sc, IEE_CB_CMD_CONF);
541 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_tbd_off
542 + sc->sc_tbd_sz * sc->sc_next_tbd));
555 cb->cb_link_addr = IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_cb_off +
556 sc->sc_cb_sz * (sc->sc_next_cb + 1)));
557 IEE_CBSYNC(sc, sc->sc_next_cb,
559 sc->sc_next_cb++;
566 iee_attach(struct iee_softc *sc, uint8_t *eth_addr, int *media, int nmedia,
569 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
572 KASSERT(sc->sc_cl_align > 0 && powerof2(sc->sc_cl_align));
578 sc->sc_scp_off = 0;
579 sc->sc_scp_sz = roundup2(sizeof(struct iee_scp), sc->sc_cl_align);
580 sc->sc_iscp_off = sc->sc_scp_sz;
581 sc->sc_iscp_sz = roundup2(sizeof(struct iee_iscp), sc->sc_cl_align);
582 sc->sc_scb_off = sc->sc_iscp_off + sc->sc_iscp_sz;
583 sc->sc_scb_sz = roundup2(sizeof(struct iee_scb), sc->sc_cl_align);
584 sc->sc_rfd_off = sc->sc_scb_off + sc->sc_scb_sz;
585 sc->sc_rfd_sz = roundup2(sizeof(struct iee_rfd), sc->sc_cl_align);
586 sc->sc_rbd_off = sc->sc_rfd_off + sc->sc_rfd_sz * IEE_NRFD;
587 sc->sc_rbd_sz = roundup2(sizeof(struct iee_rbd), sc->sc_cl_align);
588 sc->sc_cb_off = sc->sc_rbd_off + sc->sc_rbd_sz * IEE_NRFD;
589 sc->sc_cb_sz = roundup2(sizeof(struct iee_cb), sc->sc_cl_align);
590 sc->sc_tbd_off = sc->sc_cb_off + sc->sc_cb_sz * IEE_NCB;
591 sc->sc_tbd_sz = roundup2(sizeof(struct iee_tbd), sc->sc_cl_align);
592 sc->sc_shmem_sz = sc->sc_tbd_off + sc->sc_tbd_sz * IEE_NTBD * IEE_NCB;
595 if (bus_dmamem_alloc(sc->sc_dmat, sc->sc_shmem_sz, PAGE_SIZE, 0,
596 &sc->sc_dma_segs, 1, &sc->sc_dma_rsegs, BUS_DMA_NOWAIT) != 0) {
598 sc->sc_shmem_sz);
601 if (bus_dmamem_map(sc->sc_dmat, &sc->sc_dma_segs, sc->sc_dma_rsegs,
602 sc->sc_shmem_sz, (void **)&sc->sc_shmem_addr,
605 bus_dmamem_free(sc->sc_dmat, &sc->sc_dma_segs,
606 sc->sc_dma_rsegs);
609 if (bus_dmamap_create(sc->sc_dmat, sc->sc_shmem_sz, sc->sc_dma_rsegs,
610 sc->sc_shmem_sz, 0, BUS_DMA_NOWAIT, &sc->sc_shmem_map) != 0) {
612 bus_dmamem_unmap(sc->sc_dmat, sc->sc_shmem_addr,
613 sc->sc_shmem_sz);
614 bus_dmamem_free(sc->sc_dmat, &sc->sc_dma_segs,
615 sc->sc_dma_rsegs);
618 if (bus_dmamap_load(sc->sc_dmat, sc->sc_shmem_map, sc->sc_shmem_addr,
619 sc->sc_shmem_sz, NULL, BUS_DMA_NOWAIT) != 0) {
621 bus_dmamap_destroy(sc->sc_dmat, sc->sc_shmem_map);
622 bus_dmamem_unmap(sc->sc_dmat, sc->sc_shmem_addr,
623 sc->sc_shmem_sz);
624 bus_dmamem_free(sc->sc_dmat, &sc->sc_dma_segs,
625 sc->sc_dma_rsegs);
628 memset(sc->sc_shmem_addr, 0, sc->sc_shmem_sz);
634 SC_SCP(sc)->scp_iscp_addr = IEE_SWAP32(IEE_PHYS_SHMEM(sc->sc_iscp_off));
635 SC_SCP(sc)->scp_sysbus = sc->sc_sysbus;
640 SC_ISCP(sc)->iscp_scb_addr = IEE_SWAP32(IEE_PHYS_SHMEM(sc->sc_scb_off));
642 SC_SCB(sc)->scb_rfa_addr = IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rfd_off));
644 SC_SCB(sc)->scb_cmd_blk_addr =
645 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_cb_off));
647 bus_dmamap_sync(sc->sc_dmat, sc->sc_shmem_map, 0, sc->sc_shmem_sz,
651 sc->sc_ethercom.ec_ifmedia = &sc->sc_ifmedia;
652 ifmedia_init(&sc->sc_ifmedia, 0, iee_mediachange, iee_mediastatus);
655 ifmedia_add(&sc->sc_ifmedia, media[n], 0, NULL);
656 ifmedia_set(&sc->sc_ifmedia, defmedia);
658 ifmedia_add(&sc->sc_ifmedia, IFM_ETHER | IFM_NONE, 0, NULL);
659 ifmedia_set(&sc->sc_ifmedia, IFM_ETHER | IFM_NONE);
662 ifp->if_softc = sc;
663 strcpy(ifp->if_xname, device_xname(sc->sc_dev));
672 sc->sc_ethercom.ec_capabilities |= ETHERCAP_VLAN_MTU;
679 i82596_typenames[sc->sc_type], ether_sprintf(eth_addr));
682 sc->sc_tx_map[n] = NULL;
684 sc->sc_rx_mbuf[n] = NULL;
685 sc->sc_rx_map[n] = NULL;
687 sc->sc_tx_timeout = 0;
688 sc->sc_setup_timeout = 0;
689 (sc->sc_iee_reset)(sc);
694 iee_detach(struct iee_softc *sc, int flags)
696 struct ifnet *ifp = &sc->sc_ethercom.ec_if;
702 ifmedia_fini(&sc->sc_ifmedia);
703 bus_dmamap_unload(sc->sc_dmat, sc->sc_shmem_map);
704 bus_dmamap_destroy(sc->sc_dmat, sc->sc_shmem_map);
705 bus_dmamem_unmap(sc->sc_dmat, sc->sc_shmem_addr, sc->sc_shmem_sz);
706 bus_dmamem_free(sc->sc_dmat, &sc->sc_dma_segs, sc->sc_dma_rsegs);
714 struct iee_softc *sc = ifp->if_softc;
716 if (sc->sc_mediachange != NULL)
717 return (sc->sc_mediachange)(ifp);
725 struct iee_softc *sc = ifp->if_softc;
727 if (sc->sc_mediastatus != NULL)
728 (sc->sc_mediastatus)(ifp, ifmreq);
736 struct iee_softc *sc = ifp->if_softc;
742 if (sc->sc_next_cb != 0)
746 IFQ_DEQUEUE(&ifp->if_snd, sc->sc_tx_mbuf[t]);
747 if (sc->sc_tx_mbuf[t] == NULL)
749 if (bus_dmamap_load_mbuf(sc->sc_dmat, sc->sc_tx_map[t],
750 sc->sc_tx_mbuf[t], BUS_DMA_WRITE | BUS_DMA_NOWAIT) != 0) {
756 device_xname(sc->sc_dev));
760 device_xname(sc->sc_dev));
761 m_freem(sc->sc_tx_mbuf[t]);
762 sc->sc_tx_mbuf[t] = NULL;
766 MCLAIM(m, &sc->sc_ethercom.ec_rx_mowner);
770 "cluster\n", device_xname(sc->sc_dev));
771 m_freem(sc->sc_tx_mbuf[t]);
772 sc->sc_tx_mbuf[t] = NULL;
777 m_copydata(sc->sc_tx_mbuf[t], 0,
778 sc->sc_tx_mbuf[t]->m_pkthdr.len, mtod(m, void *));
779 m->m_pkthdr.len = sc->sc_tx_mbuf[t]->m_pkthdr.len;
780 m->m_len = sc->sc_tx_mbuf[t]->m_pkthdr.len;
781 m_freem(sc->sc_tx_mbuf[t]);
782 sc->sc_tx_mbuf[t] = m;
783 if (bus_dmamap_load_mbuf(sc->sc_dmat, sc->sc_tx_map[t],
786 device_xname(sc->sc_dev));
787 m_freem(sc->sc_tx_mbuf[t]);
788 sc->sc_tx_mbuf[t] = NULL;
793 for (n = 0 ; n < sc->sc_tx_map[t]->dm_nsegs ; n++) {
794 tbd = SC_TBD(sc, sc->sc_next_tbd + n);
796 IEE_SWAPA32(sc->sc_tx_map[t]->dm_segs[n].ds_addr);
798 sc->sc_tx_map[t]->dm_segs[n].ds_len;
800 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_tbd_off +
801 sc->sc_tbd_sz * (sc->sc_next_tbd + n + 1)));
803 SC_TBD(sc, sc->sc_next_tbd + n - 1)->tbd_size |= IEE_CB_EL;
804 bus_dmamap_sync(sc->sc_dmat, sc->sc_shmem_map,
805 sc->sc_tbd_off + sc->sc_next_tbd * sc->sc_tbd_sz,
806 sc->sc_tbd_sz * sc->sc_tx_map[t]->dm_nsegs,
808 bus_dmamap_sync(sc->sc_dmat, sc->sc_tx_map[t], 0,
809 sc->sc_tx_map[t]->dm_mapsize, BUS_DMASYNC_PREWRITE);
812 iee_cb_setup(sc, IEE_CB_CMD_TR | IEE_CB_S | IEE_CB_EL
815 iee_cb_setup(sc, IEE_CB_CMD_TR);
816 sc->sc_next_tbd += n;
818 bpf_mtap(ifp, sc->sc_tx_mbuf[t], BPF_D_OUT);
825 (sc->sc_iee_cmd)(sc, IEE_SCB_CUC_EXE);
834 struct iee_softc *sc = ifp->if_softc;
848 iee_cb_setup(sc, IEE_CB_CMD_MCS | IEE_CB_S |
850 if ((sc->sc_flags & IEE_WANT_MCAST) == 0)
851 (*sc->sc_iee_cmd)(sc, IEE_SCB_CUC_EXE);
867 struct iee_softc *sc = ifp->if_softc;
873 sc->sc_next_cb = 0;
874 sc->sc_next_tbd = 0;
875 sc->sc_flags &= ~IEE_WANT_MCAST;
876 sc->sc_rx_done = 0;
877 SC_SCB(sc)->scb_crc_err = 0;
878 SC_SCB(sc)->scb_align_err = 0;
879 SC_SCB(sc)->scb_resource_err = 0;
880 SC_SCB(sc)->scb_overrun_err = 0;
881 SC_SCB(sc)->scb_rcvcdt_err = 0;
882 SC_SCB(sc)->scb_short_fr_err = 0;
883 sc->sc_crc_err = 0;
884 sc->sc_align_err = 0;
885 sc->sc_resource_err = 0;
886 sc->sc_overrun_err = 0;
887 sc->sc_rcvcdt_err = 0;
888 sc->sc_short_fr_err = 0;
889 sc->sc_tx_col = 0;
890 sc->sc_rx_err = 0;
891 sc->sc_cmd_err = 0;
894 if (sc->sc_tx_map[t] == NULL && bus_dmamap_create(sc->sc_dmat,
896 &sc->sc_tx_map[t]) != 0) {
898 device_xname(sc->sc_dev));
900 bus_dmamap_destroy(sc->sc_dmat,
901 sc->sc_tx_map[n]);
907 memset(SC_RFD(sc, 0), 0, sc->sc_rfd_sz * IEE_NRFD);
908 memset(SC_RBD(sc, 0), 0, sc->sc_rbd_sz * IEE_NRFD);
910 SC_RFD(sc, r)->rfd_cmd = IEE_RFD_SF;
911 SC_RFD(sc, r)->rfd_link_addr =
912 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rfd_off
913 + sc->sc_rfd_sz * ((r + 1) % IEE_NRFD)));
915 SC_RBD(sc, r)->rbd_next_rbd =
916 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rbd_off
917 + sc->sc_rbd_sz * ((r + 1) % IEE_NRFD)));
918 if (sc->sc_rx_mbuf[r] == NULL) {
919 MGETHDR(sc->sc_rx_mbuf[r], M_DONTWAIT, MT_DATA);
920 if (sc->sc_rx_mbuf[r] == NULL) {
922 device_xname(sc->sc_dev));
926 MCLAIM(sc->sc_rx_mbuf[r],
927 &sc->sc_ethercom.ec_rx_mowner);
928 MCLGET(sc
929 if ((sc->sc_rx_mbuf[r]->m_flags & M_EXT) == 0) {
931 " cluster\n", device_xname(sc->sc_dev));
932 m_freem(sc->sc_rx_mbuf[r]);
933 sc->sc_rx_mbuf[r] = NULL;
937 sc->sc_rx_mbuf[r]->m_len =
938 sc->sc_rx_mbuf[r]->m_pkthdr.len = MCLBYTES - 2;
939 sc->sc_rx_mbuf[r]->m_data += 2;
941 if (sc->sc_rx_map[r] == NULL && bus_dmamap_create(sc->sc_dmat,
943 &sc->sc_rx_map[r]) != 0) {
945 device_xname(sc->sc_dev));
946 m_freem(sc->sc_rx_mbuf[r]);
947 sc->sc_rx_mbuf[r] = NULL;
951 if (bus_dmamap_load_mbuf(sc->sc_dmat, sc->sc_rx_map[r],
952 sc->sc_rx_mbuf[r], BUS_DMA_READ | BUS_DMA_NOWAIT) != 0) {
954 device_xname(sc->sc_dev));
955 bus_dmamap_destroy(sc->sc_dmat, sc->sc_rx_map[r]);
956 m_freem(sc->sc_rx_mbuf[r]);
957 sc->sc_rx_mbuf[r] = NULL;
961 bus_dmamap_sync(sc->sc_dmat, sc->sc_rx_map[r], 0,
962 sc->sc_rx_map[r]->dm_mapsize, BUS_DMASYNC_PREREAD);
963 SC_RBD(sc, r)->rbd_size = sc->sc_rx_map[r]->dm_segs[0].ds_len;
964 SC_RBD(sc, r)->rbd_rb_addr =
965 IEE_SWAPA32(sc->sc_rx_map[r]->dm_segs[0].ds_addr);
967 SC_RFD(sc, 0)->rfd_rbd_addr =
968 IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rbd_off));
971 bus_dmamap_unload(sc->sc_dmat, sc->sc_rx_map[n]);
972 bus_dmamap_destroy(sc->sc_dmat, sc->sc_rx_map[n]);
973 sc->sc_rx_map[n] = NULL;
974 m_freem(sc->sc_rx_mbuf[n]);
975 sc->sc_rx_mbuf[n] = NULL;
978 bus_dmamap_destroy(sc->sc_dmat, sc->sc_tx_map[n]);
979 sc->sc_tx_map[n] = NULL;
984 (sc->sc_iee_reset)(sc);
985 iee_cb_setup(sc, IEE_CB_CMD_IAS);
986 sc->sc_cf[0] = IEE_CF_0_DEF | IEE_CF_0_PREF;
987 sc->sc_cf[1] = IEE_CF_1_DEF;
988 sc->sc_cf[2] = IEE_CF_2_DEF;
989 sc->sc_cf[3] = IEE_CF_3_ADDRLEN_DEF | IEE_CF_3_NSAI
991 sc->sc_cf[4] = IEE_CF_4_DEF;
992 sc->sc_cf[5] = IEE_CF_5_DEF;
993 sc->sc_cf[6] = IEE_CF_6_DEF;
994 sc->sc_cf[7] = IEE_CF_7_DEF;
995 sc->sc_cf[8] = IEE_CF_8_DEF;
996 sc->sc_cf[9] = IEE_CF_9_DEF;
997 sc->sc_cf[10] = IEE_CF_10_DEF;
998 sc->sc_cf[11] = IEE_CF_11_DEF & ~IEE_CF_11_LNGFLD;
999 sc->sc_cf[12] = IEE_CF_12_DEF;
1000 sc->sc_cf[13] = IEE_CF_13_DEF;
1001 iee_cb_setup(sc, IEE_CB_CMD_CONF | IEE_CB_S | IEE_CB_EL);
1002 SC_SCB(sc)->scb_rfa_addr = IEE_SWAPA32(IEE_PHYS_SHMEM(sc->sc_rfd_off));
1003 bus_dmamap_sync(sc->sc_dmat, sc->sc_shmem_map, 0, sc->sc_shmem_sz,
1005 (sc->sc_iee_cmd)(sc, IEE_SCB_CUC_EXE | IEE_SCB_RUC_ST);
1007 (sc->sc_iee_cmd)(sc, IEE_SCB_ACK);
1020 struct iee_softc *sc = ifp->if_softc;
1027 (sc->sc_iee_reset)(ifp->if_softc);
1029 (sc->sc_iee_cmd)(ifp->if_softc, IEE_SCB_ACK);
1032 if (sc->sc_tx_map[n] != NULL)
1033 bus_dmamap_destroy(sc->sc_dmat, sc->sc_tx_map[n]);
1034 sc->sc_tx_map[n] = NULL;
1037 if (sc->sc_rx_map[n] != NULL) {
1038 bus_dmamap_unload(sc->sc_dmat, sc->sc_rx_map[n]);
1039 bus_dmamap_destroy(sc->sc_dmat, sc->sc_rx_map[n]);
1041 sc->sc_rx_map[n] = NULL;
1042 m_freem(sc->sc_rx_mbuf[n]);
1043 sc->sc_rx_mbuf[n] = NULL;
1052 struct iee_softc *sc = ifp->if_softc;
1054 (sc->sc_iee_reset)(sc);
1055 if (sc->sc_next_tbd != 0)
1057 device_xname(sc->sc_dev), ++sc->sc_tx_timeout);
1060 device_xname(sc->sc_dev), ++sc->sc_setup_timeout);