Deleted Added
full compact
if_ep.c (55833) if_ep.c (55834)
1/*
2 * Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 24 unchanged lines hidden (view full) ---

33/*
34 * Modified from the FreeBSD 1.1.5.1 version by:
35 * Andres Vega Garcia
36 * INRIA - Sophia Antipolis, France
37 * avega@sophia.inria.fr
38 */
39
40/*
1/*
2 * Copyright (c) 1994 Herb Peyerl <hpeyerl@novatel.ca>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 24 unchanged lines hidden (view full) ---

33/*
34 * Modified from the FreeBSD 1.1.5.1 version by:
35 * Andres Vega Garcia
36 * INRIA - Sophia Antipolis, France
37 * avega@sophia.inria.fr
38 */
39
40/*
41 * $FreeBSD: head/sys/dev/ep/if_ep.c 55833 2000-01-12 05:27:08Z mdodd $
41 * $FreeBSD: head/sys/dev/ep/if_ep.c 55834 2000-01-12 06:42:49Z mdodd $
42 *
43 * Promiscuous mode added and interrupt logic slightly changed
44 * to reduce the number of adapter failures. Transceiver select
45 * logic changed to use value from EEPROM. Autoconfiguration
46 * features added.
47 * Done by:
48 * Serge Babkin
49 * Chelindbank (Chelyabinsk, Russia)

--- 381 unchanged lines hidden (view full) ---

431}
432
433static const char padmap[] = {0, 3, 2, 1};
434
435static void
436ep_if_start(ifp)
437 struct ifnet *ifp;
438{
42 *
43 * Promiscuous mode added and interrupt logic slightly changed
44 * to reduce the number of adapter failures. Transceiver select
45 * logic changed to use value from EEPROM. Autoconfiguration
46 * features added.
47 * Done by:
48 * Serge Babkin
49 * Chelindbank (Chelyabinsk, Russia)

--- 381 unchanged lines hidden (view full) ---

431}
432
433static const char padmap[] = {0, 3, 2, 1};
434
435static void
436ep_if_start(ifp)
437 struct ifnet *ifp;
438{
439 register struct ep_softc *sc = ifp->if_softc;
440 register u_int len;
441 register struct mbuf *m;
439 struct ep_softc *sc = ifp->if_softc;
440 u_int len;
441 struct mbuf *m;
442 struct mbuf *top;
443 int s, pad;
444
445 if (sc->gone) {
446 return;
447 }
448
442 struct mbuf *top;
443 int s, pad;
444
445 if (sc->gone) {
446 return;
447 }
448
449 s = splimp();
450 while (inw(BASE + EP_STATUS) & S_COMMAND_IN_PROGRESS);
451 if (ifp->if_flags & IFF_OACTIVE) {
449 while (inw(BASE + EP_STATUS) & S_COMMAND_IN_PROGRESS);
450 if (ifp->if_flags & IFF_OACTIVE) {
452 splx(s);
453 return;
454 }
451 return;
452 }
453
455startagain:
456 /* Sneak a peek at the next packet */
457 m = ifp->if_snd.ifq_head;
458 if (m == 0) {
454startagain:
455 /* Sneak a peek at the next packet */
456 m = ifp->if_snd.ifq_head;
457 if (m == 0) {
459 splx(s);
460 return;
461 }
462 for (len = 0, top = m; m; m = m->m_next)
463 len += m->m_len;
464
465 pad = padmap[len & 3];
466
467 /*

--- 12 unchanged lines hidden (view full) ---

480 /* no room in FIFO */
481 outw(BASE + EP_COMMAND, SET_TX_AVAIL_THRESH | (len + pad + 4));
482 /* make sure */
483 if (inw(BASE + EP_W1_FREE_TX) < len + pad + 4) {
484 ifp->if_flags |= IFF_OACTIVE;
485 splx(s);
486 return;
487 }
458 return;
459 }
460 for (len = 0, top = m; m; m = m->m_next)
461 len += m->m_len;
462
463 pad = padmap[len & 3];
464
465 /*

--- 12 unchanged lines hidden (view full) ---

478 /* no room in FIFO */
479 outw(BASE + EP_COMMAND, SET_TX_AVAIL_THRESH | (len + pad + 4));
480 /* make sure */
481 if (inw(BASE + EP_W1_FREE_TX) < len + pad + 4) {
482 ifp->if_flags |= IFF_OACTIVE;
483 splx(s);
484 return;
485 }
486 } else {
487 outw(BASE + EP_COMMAND, SET_TX_AVAIL_THRESH | EP_THRESH_DISABLE);
488 }
488 }
489
489 IF_DEQUEUE(&ifp->if_snd, m);
490
490 IF_DEQUEUE(&ifp->if_snd, m);
491
492 s = splhigh();
493
491 outw(BASE + EP_W1_TX_PIO_WR_1, len);
492 outw(BASE + EP_W1_TX_PIO_WR_1, 0x0); /* Second dword meaningless */
493
494 outw(BASE + EP_W1_TX_PIO_WR_1, len);
495 outw(BASE + EP_W1_TX_PIO_WR_1, 0x0); /* Second dword meaningless */
496
494 for (top = m; m != 0; m = m->m_next)
495 if (EP_FTST(sc, F_ACCESS_32_BITS)) {
497 if (EP_FTST(sc, F_ACCESS_32_BITS)) {
498 for (top = m; m != 0; m = m->m_next) {
496 outsl(BASE + EP_W1_TX_PIO_WR_1, mtod(m, caddr_t),
497 m->m_len / 4);
498 if (m->m_len & 3)
499 outsb(BASE + EP_W1_TX_PIO_WR_1,
500 mtod(m, caddr_t) + (m->m_len & (~3)),
501 m->m_len & 3);
499 outsl(BASE + EP_W1_TX_PIO_WR_1, mtod(m, caddr_t),
500 m->m_len / 4);
501 if (m->m_len & 3)
502 outsb(BASE + EP_W1_TX_PIO_WR_1,
503 mtod(m, caddr_t) + (m->m_len & (~3)),
504 m->m_len & 3);
502 } else {
505 }
506 } else {
507 for (top = m; m != 0; m = m->m_next) {
503 outsw(BASE + EP_W1_TX_PIO_WR_1, mtod(m, caddr_t), m->m_len / 2);
504 if (m->m_len & 1)
505 outb(BASE + EP_W1_TX_PIO_WR_1,
506 *(mtod(m, caddr_t) + m->m_len - 1));
507 }
508 outsw(BASE + EP_W1_TX_PIO_WR_1, mtod(m, caddr_t), m->m_len / 2);
509 if (m->m_len & 1)
510 outb(BASE + EP_W1_TX_PIO_WR_1,
511 *(mtod(m, caddr_t) + m->m_len - 1));
512 }
513 }
508
509 while (pad--)
510 outb(BASE + EP_W1_TX_PIO_WR_1, 0); /* Padding */
511
514
515 while (pad--)
516 outb(BASE + EP_W1_TX_PIO_WR_1, 0); /* Padding */
517
518 splx(s);
519
512 if (ifp->if_bpf) {
513 bpf_mtap(ifp, top);
514 }
515
516 ifp->if_timer = 2;
517 ifp->if_opackets++;
518 m_freem(top);
519

--- 5 unchanged lines hidden (view full) ---

525 if (inw(BASE + EP_W1_RX_STATUS) & RX_BYTES_MASK) {
526 /*
527 * we check if we have packets left, in that case we prepare to come
528 * back later
529 */
530 if (ifp->if_snd.ifq_head) {
531 outw(BASE + EP_COMMAND, SET_TX_AVAIL_THRESH | 8);
532 }
520 if (ifp->if_bpf) {
521 bpf_mtap(ifp, top);
522 }
523
524 ifp->if_timer = 2;
525 ifp->if_opackets++;
526 m_freem(top);
527

--- 5 unchanged lines hidden (view full) ---

533 if (inw(BASE + EP_W1_RX_STATUS) & RX_BYTES_MASK) {
534 /*
535 * we check if we have packets left, in that case we prepare to come
536 * back later
537 */
538 if (ifp->if_snd.ifq_head) {
539 outw(BASE + EP_COMMAND, SET_TX_AVAIL_THRESH | 8);
540 }
533 splx(s);
534 return;
535 }
536 goto startagain;
537}
538
539void
540ep_intr(arg)
541 void *arg;

--- 435 unchanged lines hidden ---
541 return;
542 }
543 goto startagain;
544}
545
546void
547ep_intr(arg)
548 void *arg;

--- 435 unchanged lines hidden ---