Changeset 277 for freebsd-mos-driver


Ignore:
Timestamp:
Feb 15, 2011, 7:33:06 AM (14 years ago)
Author:
Rick van der Zwet
Message:

Changes, based on instructions/review of Hans Petter Selasky.

Location:
freebsd-mos-driver
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • freebsd-mos-driver/if_mos.c

    r276 r277  
    142142  DPRINTF("mos: %s: " fmt "\n",__FUNCTION__,## __VA_ARGS__)
    143143
    144 #define USB_PRODUCT_MOSCHIP_MCS7730     0x7730  /* MCS7730 Ethernet */
    145 #define USB_PRODUCT_SITECOMEU_LN030     0x0021  /* LN-030 */
    146 
    147 
    148 
    149 /*
    150  * Various supported device vendors/products.
    151  */
     144#define USB_PRODUCT_MOSCHIP_MCS7730     0x7730
     145#define USB_PRODUCT_SITECOMEU_LN030     0x0021
     146
     147
     148
     149/* Various supported device vendors/products. */
    152150static const struct usb_device_id mos_devs[] = {
    153151        {USB_VPI(USB_VENDOR_MOSCHIP, USB_PRODUCT_MOSCHIP_MCS7730, MCS7730)},
     
    196194                .flags = {.pipe_bof = 1,.force_short_xfer = 1,},
    197195                .callback = mos_bulk_write_callback,
    198                 .timeout = 10000,       /* 10 seconds */
     196                .timeout = 10000,
    199197        },
    200198
     
    213211                .direction = UE_DIR_IN,
    214212                .flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
    215                 .bufsize = 0,           /* use wMaxPacketSize */
     213                .bufsize = 0,
    216214                .callback = mos_intr_callback,
    217215        },
     
    316314        usb_error_t err;
    317315        uByte val;
    318 
    319316        val = aval;
    320317
     
    533530        struct mos_softc *sc = ifp->if_softc;
    534531        struct mii_data *mii = GET_MII(sc);
     532        struct mii_softc *miisc;
    535533
    536534        MOS_LOCK_ASSERT(sc, MA_OWNED);
     
    538536        sc->mos_link = 0;
    539537        if (mii->mii_instance) {
    540                 struct mii_softc *miisc;
    541 
    542538                LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
    543539                    mii_phy_reset(miisc);
     
    570566        struct ifnet *ifp = uether_getifp(ue);
    571567
    572         u_int8_t rxmode;
     568        uint8_t rxmode;
    573569
    574570        MOS_LOCK_ASSERT(sc, MA_OWNED);
     
    595591        struct ifmultiaddr *ifma;
    596592
    597         u_int32_t h = 0;
    598         u_int8_t rxmode;
    599         u_int8_t hashtbl[8] = {0, 0, 0, 0, 0, 0, 0, 0};
     593        uint32_t h = 0;
     594        uint8_t rxmode;
     595        uint8_t hashtbl[8] = {0, 0, 0, 0, 0, 0, 0, 0};
    600596        int allmulti = 0;
    601597
     
    616612                h = ether_crc32_be(LLADDR((struct sockaddr_dl *)
    617613                    ifma->ifma_addr), ETHER_ADDR_LEN) >> 26;
    618                 //h = ether_crc32_be(enm->enm_addrlo, ETHER_ADDR_LEN) >> 26;
    619614                hashtbl[h / 8] |= 1 << (h % 8);
    620615        }
     
    635630mos_reset(struct mos_softc *sc)
    636631{
    637         u_int8_t ctl;
     632        uint8_t ctl;
    638633
    639634        ctl = mos_reg_read_1(sc, MOS_CTL);
     
    674669mos_probe(device_t dev)
    675670{
    676         DPRINTFN(11, "mos: probe\n");
    677671        struct usb_attach_arg *uaa = device_get_ivars(dev);
     672        int retval;
    678673
    679674        if (uaa->usb_mode != USB_MODE_HOST) {
    680                 DPRINTFN(11, "mos: not USB_MODE_HOST\n");
    681675                return (ENXIO);
    682676        }
    683677        if (uaa->info.bConfigNum != MOS_CONFIG_NO) {
    684                 DPRINTFN(11, "mos: not MOS_CONFIG_NO %i vs %i\n", uaa->info.bConfigNum, MOS_CONFIG_NO);
    685678                return (ENXIO);
    686679        }
    687         if (uaa->info.bIfaceIndex != MOS_IFACE_IDX) {
    688                 DPRINTFN(11, "mos: not MOS_IFACE_IDX %i vs %i\n", uaa->info.bIfaceIndex, MOS_IFACE_IDX);
     680        if (uaa->info.bIfaceIndex != 0) {
    689681                return (ENXIO);
    690682        }
    691         DPRINTFN(11, "mos: probe by generic means\n");
    692         int retval = usbd_lookup_id_by_uaa(mos_devs, sizeof(mos_devs), uaa);
    693 
    694         DPRINTFN(11, "mos: probe retval: %i (ENXIO:%i)\n", retval, ENXIO);
     683
     684        retval = usbd_lookup_id_by_uaa(mos_devs, sizeof(mos_devs), uaa);
    695685        return retval;
    696686}
     
    706696        struct mos_softc *sc = device_get_softc(dev);
    707697        struct usb_ether *ue = &sc->sc_ue;
    708 
    709698        uint8_t iface_index;
    710699        int error;
     
    732721
    733722        if (sc->mos_flags & MCS7730) {
    734                 DPRINTF("model: MCS7730\n");
     723                MOS_DPRINTFN("model: MCS7730");
    735724        } else if (sc->mos_flags & MCS7830) {
    736                 DPRINTF("model: MCS7830\n");
     725                MOS_DPRINTFN("model: MCS7830");
    737726        }
    738727        error = uether_ifattach(ue);
     
    741730                goto detach;
    742731        }
    743         return (0);                     /* success */
     732        return (0);
    744733
    745734
    746735detach:
    747736        mos_detach(dev);
    748         return (ENXIO);                 /* failure */
     737        return (ENXIO);
    749738}
    750739
     
    754743{
    755744        struct mos_softc *sc = uether_getsc(ue);
    756 
    757         /*
    758          * Read MAC address, inform the world.
    759          */
    760         int err = mos_readmac(sc, ue->ue_eaddr);
     745        int err;
     746
     747        /* Read MAC address, inform the world. */
     748        err = mos_readmac(sc, ue->ue_eaddr);
    761749
    762750        if (err)
     
    799787        uint16_t pktlen = 0;
    800788        struct usb_page_cache *pc;
    801 
    802789
    803790        usbd_xfer_status(xfer, &actlen, NULL, NULL, NULL);
     
    843830                uether_rxflush(ue);
    844831                return;
    845         default:                        /* Error */
     832        default:
    846833                MOS_DPRINTFN("bulk read error, %s", usbd_errstr(error));
    847834                if (error != USB_ERR_CANCELLED) {
    848                         /* try to clear stall first */
    849835                        usbd_xfer_set_stall(xfer);
    850836                        goto tr_setup;
     
    859845 * the list buffers.
    860846 */
    861 
    862847static void
    863848mos_bulk_write_callback(struct usb_xfer *xfer, usb_error_t error)
     
    902887                ifp->if_opackets++;
    903888                return;
    904         default:                        /* Error */
     889        default:
    905890                MOS_DPRINTFN("usb error on tx: %s\n", usbd_errstr(error));
    906891                ifp->if_oerrors++;
    907892                if (error != USB_ERR_CANCELLED) {
    908                         /* try to clear stall first */
    909893                        usbd_xfer_set_stall(xfer);
    910894                        goto tr_setup;
     
    950934        struct mos_softc *sc = uether_getsc(ue);
    951935        struct ifnet *ifp = uether_getifp(ue);
    952         u_int8_t rxmode;
     936        uint8_t rxmode;
    953937
    954938        MOS_LOCK_ASSERT(sc, MA_OWNED);
    955939
    956         /*
    957          * Cancel pending I/O and free all RX/TX buffers.
    958          */
     940        /* Cancel pending I/O and free all RX/TX buffers. */
    959941        mos_reset(sc);
    960942
    961         /*
    962          * Write MAC address
    963          */
     943        /* Write MAC address */
    964944        mos_writemac(sc, IF_LLADDR(ifp));
    965 
    966 
    967945
    968946        /* Read and set transmitter IPG values */
     
    983961
    984962        /* XXX: broadcast mode? */
    985 
    986963        mos_reg_write_1(sc, MOS_CTL, rxmode);
    987964
     
    1000977        struct ifnet *ifp = uether_getifp(&sc->sc_ue);
    1001978        struct usb_page_cache *pc;
     979        uint32_t pkt;
    1002980        int actlen;
    1003         long pkt;
    1004981
    1005982        ifp->if_oerrors++;
     
    1017994tr_setup:
    1018995                return;
    1019         default:                        /* Error */
     996        default:
    1020997                if (error != USB_ERR_CANCELLED) {
    1021                         /* try to clear stall first */
    1022998                        usbd_xfer_set_stall(xfer);
    1023999                        goto tr_setup;
     
    10431019        ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
    10441020
    1045         /*
    1046          * stop all the transfers, if not already stopped:
    1047          */
     1021        /* stop all the transfers, if not already stopped */
    10481022        usbd_transfer_stop(sc->sc_xfer[MOS_ENDPT_TX]);
    10491023        usbd_transfer_stop(sc->sc_xfer[MOS_ENDPT_RX]);
  • freebsd-mos-driver/if_mosreg.h

    r274 r277  
    150150#define MOS_IFACE_IDX           0
    151151
    152 #define MCS7730 0x0001                  /* MCS7730 */
    153 #define MCS7830 0x0002                  /* MCS7830 */
     152#define MCS7730 0x0001
     153#define MCS7830 0x0002
    154154
    155155#define MOS_INC(x, y)           (x) = (x + 1) % y
     
    159159        struct ifnet ifp;
    160160
    161         u_int16_t mos_flags;
     161        struct mtx sc_mtx;
     162        struct usb_xfer *sc_xfer[MOS_ENDPT_MAX];
    162163
    163         int     mos_link;
     164        uint16_t mos_flags;
     165
     166        int mos_link;
    164167        unsigned char mos_ipgs[2];
    165168        unsigned char mos_phyaddrs[2];
    166 
    167         struct mtx sc_mtx;
    168         struct usb_xfer *sc_xfer[MOS_ENDPT_MAX];
    169169};
    170170
Note: See TracChangeset for help on using the changeset viewer.