Subject: Re: A possible way of handling variant/common devices
To: Matt Thomas <matt@lkg.dec.com>
From: Chris G. Demetriou <cgd@cs.cmu.edu>
List: tech-kern
Date: 03/28/1997 15:58:32
> I've been wanting to PnP support for a NE2000 clone that Digital
> is now selling. And that has got me to thinking.
>
> There are a number of drivers (especially on the i386) that need
> to somewhat close variations of cards. Consider the le0 on isa
> for example.
>
> #le0 at isa? port 0x320 irq 10 drq 7 # IsoLan, NE2100, and DEPCA
>
> Would it make more sense to have
>
> depca* at isa?
> depca* at eisa?
> le* at depca?
>
> And treat the variant as a very thin bus? It would make the config
> file a bit more complicated but it would allow more precise of what
> variants you do need to support.
>
> This could be applied to the NE2000/WD/SMC driver as well.
>
> Thoughts?
So, I'd say that if something like this is desired, a 'better' way to
do it might be:
Turn:
# LANCE and PCnet Ethernet controllers
device le: arp, ether, ifnet
file dev/ic/am7990.c le
into:
define am7990lance
file dev/ic/am7990.c am7990lance
device le: arp, ether, ifnet, am7990lance
file dev/ic/if_le.c le
and move the le_cd definition from am7990.c into if_le.c.
Then, for instance, you could declare you depca driver as:
device depca: arp, ether, ifnet, am7990lance
file ...
and define the appropriate attachments, etc.
The am7990 code is already structured in a way that makes this very
easy, and this hides the complexity from the users.
This is only really a problem because the le_cd is included in
am7990.c. For drivers like a common 8390 driver (where there might be
no reason to put the cfdriver into the common code), this really isn't
a problem, and the back-end would just be an attribute, same as for
the ncr5380sbc, pdq, and ncr53c9x drivers.
cgd