Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: SMSC LAN9118 Family driver

> I will commit the support for 'SMSC LAN9118 Family driver'(slan) at
> next week.

I'm still afraid some people might complain that the name 'slan'
is too generic and ambiguous. (it could imply something like vlan(4))

How about smh(4)?
- we already have sm(4) for SMC 91c100/91c96 (FEAST)
- SMSC calls 9115/9116/9117/9118  "High Performance" or "Highly Efficient"
  (I guess that's because many people claim the FEAST is
   the "worst" controller, as src/sys/dev/ic/rtl81x9.c says ;-p)

> Please reveiw.  Moreover, review the included man page.  ;-)

With a quick glance, the driver itself looks good
except some minor comments:

>+      val = bus_space_read_4(sc->sc_iot, sc->sc_ioh, LAN9118_BYTE_TEST);
>+      if (sc->sc_flags & LAN9118_FLAGS_SWAP)
>+              val = bswap32(val);
>+      if (val != LAN9118_BYTE_TEST_VALUE) {
>+              aprint_error_dev(sc->sc_dev, "failed to detect chip\n");
>+              return EINVAL;
>+      }

I wonder if LAN9118_FLAGS_SWAP should be handled by MD bus_space(9) or not.

>+              DPRINTFN(1, ("lan9118_attach: need byte swap\n"));

It's better to use __func__ for debug printfs.

> +     while (bus_space_read_4(sc->sc_iot, sc->sc_ioh, LAN9118_MAC_CSR_CMD) &
> +         LAN9118_MAC_CSR_CMD_BUSY);

It might be better to put some timeout check in possible infinite loops.
(and KNF says "continue;" is better for an explicit no-op loop)

>+      if (myea == NULL) {
>+      } else
>+              /* We set MACaddr to MAC CSR, after Soft reset. */
>+              memcpy(sc->sc_enaddr, myea, ETHER_ADDR_LEN);

I'm not sure how/when backends pass the myea values, but if it
could be board specific, it might be better to pass it via proplib
like wm(4) for iyonix.

>+                      * We are assuming that the size of mbus always align
>+                      * in 4 bytes.

This assumption seems problematic. Strictly speaking, we should
copy data to safe temporary buffer to avoid possible data leak.
(but I think it's acceptable for initial commit)

>+      timo = 5 * hz;  /* XXXX 5sec */


>+              bus_space_read_multi_4(sc->sc_iot, sc->sc_ioh, LAN9118_RXDFIFOP,
>+                  mtod(m, uint32_t *),
>+                  roundup(pad + pktlen, sizeof(uint32_t)) >> 2);
>+              m->m_data += 2;

Inconsistent use of "pad" vs "2"?

>+              m->m_flags |= M_HASFCS;

I think M_HASFCS is deprecated and we should adjust ETHER_CRC_LEN
for m_len etc. directly as other drivers:
bpf(4) could also be confused, as noted in PR kern/28339.

BTW, do you have a backend driver for ISA variants?
If not, it should not be mentioned in man page yet.
Izumi Tsutsui

Home | Main Index | Thread Index | Old Index