Lines Matching +full:min +full:- +full:len
3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause
35 /*-
109 ifp = sc->sc_ifp = if_alloc(IFT_ETHER); in lance_config()
111 callout_init_mtx(&sc->sc_wdog_ch, &sc->sc_mtx, 0); in lance_config()
128 ifmedia_init(&sc->sc_media, 0, lance_mediachange, lance_mediastatus); in lance_config()
129 if (sc->sc_supmedia != NULL) { in lance_config()
130 for (i = 0; i < sc->sc_nsupmedia; i++) in lance_config()
131 ifmedia_add(&sc->sc_media, sc->sc_supmedia[i], 0, NULL); in lance_config()
132 ifmedia_set(&sc->sc_media, sc->sc_defaultmedia); in lance_config()
134 ifmedia_add(&sc->sc_media, in lance_config()
136 ifmedia_set(&sc->sc_media, in lance_config()
140 switch (sc->sc_memsize) { in lance_config()
142 sc->sc_nrbuf = 4; in lance_config()
143 sc->sc_ntbuf = 1; in lance_config()
146 sc->sc_nrbuf = 8; in lance_config()
147 sc->sc_ntbuf = 2; in lance_config()
150 sc->sc_nrbuf = 16; in lance_config()
151 sc->sc_ntbuf = 4; in lance_config()
154 sc->sc_nrbuf = 32; in lance_config()
155 sc->sc_ntbuf = 8; in lance_config()
158 sc->sc_nrbuf = 64; in lance_config()
159 sc->sc_ntbuf = 16; in lance_config()
162 sc->sc_nrbuf = 128; in lance_config()
163 sc->sc_ntbuf = 32; in lance_config()
167 nbuf = sc->sc_memsize / LEBLEN; in lance_config()
168 sc->sc_ntbuf = nbuf / 5; in lance_config()
169 sc->sc_nrbuf = nbuf - sc->sc_ntbuf; in lance_config()
173 sc->sc_nrbuf, sc->sc_ntbuf); in lance_config()
186 if_t ifp = sc->sc_ifp; in lance_attach()
189 ether_ifattach(ifp, sc->sc_enaddr); in lance_attach()
203 if_t ifp = sc->sc_ifp; in lance_detach()
208 callout_drain(&sc->sc_wdog_ch); in lance_detach()
227 if (if_getflags(sc->sc_ifp) & IFF_UP) in lance_resume()
238 (*sc->sc_start_locked)(sc); in lance_start()
245 if_t ifp = sc->sc_ifp; in lance_stop()
253 callout_stop(&sc->sc_wdog_ch); in lance_stop()
254 sc->sc_wdog_timer = 0; in lance_stop()
256 (*sc->sc_wrcsr)(sc, LE_CSR0, LE_C0_STOP); in lance_stop()
276 if_t ifp = sc->sc_ifp; in lance_init_locked()
282 (*sc->sc_wrcsr)(sc, LE_CSR0, LE_C0_STOP); in lance_init_locked()
286 if (sc->sc_hwreset) in lance_init_locked()
287 (*sc->sc_hwreset)(sc); in lance_init_locked()
290 (*sc->sc_wrcsr)(sc, LE_CSR3, sc->sc_conf3); in lance_init_locked()
293 if (sc->sc_mediachange) in lance_init_locked()
294 (void)(*sc->sc_mediachange)(sc); in lance_init_locked()
300 memcpy(sc->sc_enaddr, if_getlladdr(ifp), ETHER_ADDR_LEN); in lance_init_locked()
303 (*sc->sc_meminit)(sc); in lance_init_locked()
306 a = sc->sc_addr + LE_INITADDR(sc); in lance_init_locked()
307 (*sc->sc_wrcsr)(sc, LE_CSR1, a & 0xffff); in lance_init_locked()
308 (*sc->sc_wrcsr)(sc, LE_CSR2, a >> 16); in lance_init_locked()
312 (*sc->sc_wrcsr)(sc, LE_CSR0, LE_C0_INIT); in lance_init_locked()
315 for (timo = 100000; timo; timo--) in lance_init_locked()
316 if ((*sc->sc_rdcsr)(sc, LE_CSR0) & LE_C0_IDON) in lance_init_locked()
319 if ((*sc->sc_rdcsr)(sc, LE_CSR0) & LE_C0_IDON) { in lance_init_locked()
321 (*sc->sc_wrcsr)(sc, LE_CSR0, LE_C0_INEA | LE_C0_STRT); in lance_init_locked()
324 sc->sc_wdog_timer = 0; in lance_init_locked()
325 callout_reset(&sc->sc_wdog_ch, hz, lance_watchdog, sc); in lance_init_locked()
326 (*sc->sc_start_locked)(sc); in lance_init_locked()
330 if (sc->sc_hwinit) in lance_init_locked()
331 (*sc->sc_hwinit)(sc); in lance_init_locked()
342 int len, tlen = 0; in lance_put() local
347 len = m->m_len; in lance_put()
348 if (len == 0) { in lance_put()
353 (*sc->sc_copytobuf)(sc, mtod(m, caddr_t), boff, len); in lance_put()
354 boff += len; in lance_put()
355 tlen += len; in lance_put()
360 (*sc->sc_zerobuf)(sc, boff, LEMINSIZE - tlen); in lance_put()
368 * Len is length of data, with local net header stripped.
375 if_t ifp = sc->sc_ifp; in lance_get()
378 int len; in lance_get() local
380 if (totlen <= ETHER_HDR_LEN || totlen > LEBLEN - ETHER_CRC_LEN) { in lance_get()
390 m0->m_pkthdr.rcvif = ifp; in lance_get()
391 m0->m_pkthdr.len = totlen; in lance_get()
392 len = MHLEN; in lance_get()
399 len = MCLBYTES; in lance_get()
404 ALIGN(m->m_data + ETHER_HDR_LEN) - ETHER_HDR_LEN; in lance_get()
405 len -= newdata - m->m_data; in lance_get()
406 m->m_data = newdata; in lance_get()
409 m->m_len = len = min(totlen, len); in lance_get()
410 (*sc->sc_copyfrombuf)(sc, mtod(m, caddr_t), boff, len); in lance_get()
411 boff += len; in lance_get()
413 totlen -= len; in lance_get()
418 len = MLEN; in lance_get()
419 m = m->m_next = newm; in lance_get()
434 if_t ifp = sc->sc_ifp; in lance_watchdog()
438 if (sc->sc_wdog_timer == 0 || --sc->sc_wdog_timer != 0) { in lance_watchdog()
439 callout_reset(&sc->sc_wdog_ch, hz, lance_watchdog, sc); in lance_watchdog()
453 if (sc->sc_mediachange) { in lance_mediachange()
465 (*sc->sc_start_locked)(sc); in lance_mediachange()
482 ifmr->ifm_status = IFM_AVALID; in lance_mediastatus()
483 if (sc->sc_flags & LE_CARRIER) in lance_mediastatus()
484 ifmr->ifm_status |= IFM_ACTIVE; in lance_mediastatus()
486 if (sc->sc_mediastatus) in lance_mediastatus()
487 (*sc->sc_mediastatus)(sc, ifmr); in lance_mediastatus()
505 if (!(sc->sc_flags & LE_PROMISC)) { in lance_ioctl()
506 sc->sc_flags |= LE_PROMISC; in lance_ioctl()
509 } else if (sc->sc_flags & LE_PROMISC) { in lance_ioctl()
510 sc->sc_flags &= ~LE_PROMISC; in lance_ioctl()
515 !(sc->sc_flags & LE_ALLMULTI)) { in lance_ioctl()
516 sc->sc_flags |= LE_ALLMULTI; in lance_ioctl()
519 (sc->sc_flags & LE_ALLMULTI)) { in lance_ioctl()
520 sc->sc_flags &= ~LE_ALLMULTI; in lance_ioctl()
541 sc->sc_flags |= LE_DEBUG; in lance_ioctl()
543 sc->sc_flags &= ~LE_DEBUG; in lance_ioctl()
562 error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd); in lance_ioctl()
582 struct lance_softc *sc = ctx->sc; in lance_hash_maddr()
589 ctx->af[crc >> 4] |= LE_HTOLE16(1 << (crc & 0xf)); in lance_hash_maddr()
600 if_t ifp = sc->sc_ifp; in lance_setladrf()
611 if (if_getflags(ifp) & IFF_PROMISC || sc->sc_flags & LE_ALLMULTI) { in lance_setladrf()
637 lance_copytobuf_contig(struct lance_softc *sc, void *from, int boff, int len) in lance_copytobuf_contig() argument
639 volatile caddr_t buf = sc->sc_mem; in lance_copytobuf_contig()
644 memcpy(buf + boff, from, len); in lance_copytobuf_contig()
648 lance_copyfrombuf_contig(struct lance_softc *sc, void *to, int boff, int len) in lance_copyfrombuf_contig() argument
650 volatile caddr_t buf = sc->sc_mem; in lance_copyfrombuf_contig()
655 memcpy(to, buf + boff, len); in lance_copyfrombuf_contig()
659 lance_zerobuf_contig(struct lance_softc *sc, int boff, int len) in lance_zerobuf_contig() argument
661 volatile caddr_t buf = sc->sc_mem; in lance_zerobuf_contig()
666 memset(buf + boff, 0, len); in lance_zerobuf_contig()
672 * machine-specific front-ends.
678 * Buffers must be 4-byte aligned. The code doesn't worry about
683 lance_copytobuf_gap2(struct lance_softc *sc, void *fromv, int boff, int len)
685 volatile caddr_t buf = sc->sc_mem;
691 bptr = ((volatile uint16_t *)buf) + (boff - 1);
694 len--;
697 while (len > 1) {
701 len -= 2;
703 if (len == 1)
708 lance_copyfrombuf_gap2(struct lance_softc *sc, void *tov, int boff, int len)
710 volatile caddr_t buf = sc->sc_mem;
717 bptr = ((volatile uint16_t *)buf) + (boff - 1);
720 len--;
723 while (len > 1) {
728 len -= 2;
730 if (len == 1)
735 lance_zerobuf_gap2(struct lance_softc *sc, int boff, int len)
737 volatile caddr_t buf = sc->sc_mem;
741 bptr = ((volatile uint16_t *)buf) + (boff - 1);
744 len--;
747 while (len > 0) {
750 len -= 2;
757 * Buffers must be 32-byte aligned.
761 lance_copytobuf_gap16(struct lance_softc *sc, void *fromv, int boff, int len)
763 volatile caddr_t buf = sc->sc_mem;
769 xfer = min(len, 16 - boff);
770 while (len > 0) {
775 len -= xfer;
776 xfer = min(len, 16);
781 lance_copyfrombuf_gap16(struct lance_softc *sc, void *tov, int boff, int len)
783 volatile caddr_t buf = sc->sc_mem;
789 xfer = min(len, 16 - boff);
790 while (len > 0) {
795 len -= xfer;
796 xfer = min(len, 16);
801 lance_zerobuf_gap16(struct lance_softc *sc, int boff, int len)
803 volatile caddr_t buf = sc->sc_mem;
809 xfer = min(len, 16 - boff);
810 while (len > 0) {
814 len -= xfer;
815 xfer = min(len, 16);