summaryrefslogtreecommitdiffstats
path: root/sys/dev/ed
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1996-08-04 10:57:29 +0000
committerphk <phk@FreeBSD.org>1996-08-04 10:57:29 +0000
commitaf10f0d50a18a912c6cdf68273631263b3afc19c (patch)
tree18a9da454b7949657892cbf2dbd50dba4b5315bc /sys/dev/ed
parentb66887b753becbfa885b773ad8eee174d7b7c3a9 (diff)
downloadFreeBSD-src-af10f0d50a18a912c6cdf68273631263b3afc19c.zip
FreeBSD-src-af10f0d50a18a912c6cdf68273631263b3afc19c.tar.gz
Replace about 60 lines of code with a call to ether_ioctl().
This can be done for most of our ethernet drivers.
Diffstat (limited to 'sys/dev/ed')
-rw-r--r--sys/dev/ed/if_ed.c89
1 files changed, 9 insertions, 80 deletions
diff --git a/sys/dev/ed/if_ed.c b/sys/dev/ed/if_ed.c
index 0dab095..4b009fe 100644
--- a/sys/dev/ed/if_ed.c
+++ b/sys/dev/ed/if_ed.c
@@ -24,7 +24,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $Id: if_ed.c,v 1.100 1996/06/18 01:22:18 bde Exp $
+ * $Id: if_ed.c,v 1.101 1996/06/25 20:30:05 bde Exp $
*/
/*
@@ -133,7 +133,7 @@ static struct ed_softc ed_softc[NED];
static int ed_attach __P((struct ed_softc *, int, int));
static int ed_attach_isa __P((struct isa_device *));
-static void ed_init __P((struct ifnet *));
+static void ed_init __P((struct ed_softc *));
static int ed_ioctl __P((struct ifnet *, int, caddr_t));
static int ed_probe __P((struct isa_device *));
static void ed_start __P((struct ifnet *));
@@ -1464,6 +1464,7 @@ ed_attach(sc, unit, flags)
ifp->if_start = ed_start;
ifp->if_ioctl = ed_ioctl;
ifp->if_watchdog = ed_watchdog;
+ ifp->if_init = (if_init_f_t *)ed_init;
ifp->if_snd.ifq_maxlen = IFQ_MAXLEN;
/*
@@ -1562,7 +1563,7 @@ ed_reset(ifp)
* Stop interface and re-initialize.
*/
ed_stop(sc);
- ed_init(ifp);
+ ed_init(sc);
(void) splx(s);
}
@@ -1613,10 +1614,10 @@ ed_watchdog(ifp)
* Initialize device.
*/
static void
-ed_init(ifp)
- struct ifnet *ifp;
+ed_init(sc)
+ struct ed_softc *sc;
{
- struct ed_softc *sc = ifp->if_softc;
+ struct ifnet *ifp = &sc->arpcom.ac_if;
int i, s;
if (sc->gone)
@@ -2326,7 +2327,6 @@ ed_ioctl(ifp, command, data)
int command;
caddr_t data;
{
- register struct ifaddr *ifa = (struct ifaddr *) data;
struct ed_softc *sc = ifp->if_softc;
struct ifreq *ifr = (struct ifreq *) data;
int s, error = 0;
@@ -2340,79 +2340,8 @@ ed_ioctl(ifp, command, data)
switch (command) {
case SIOCSIFADDR:
- ifp->if_flags |= IFF_UP;
- /* netifs are BUSY when UP */
- sc->kdc.kdc_state = DC_BUSY;
-
- switch (ifa->ifa_addr->sa_family) {
-#ifdef INET
- case AF_INET:
- ed_init(ifp); /* before arpwhohas */
- arp_ifinit((struct arpcom *)ifp, ifa);
- break;
-#endif
-#ifdef IPX
- /*
- * XXX - This code is probably wrong
- */
- case AF_IPX:
- {
- register struct ipx_addr *ina = &(IA_SIPX(ifa)->sipx_addr);
-
- if (ipx_nullhost(*ina))
- ina->x_host =
- *(union ipx_host *) (sc->arpcom.ac_enaddr);
- else {
- bcopy((caddr_t) ina->x_host.c_host,
- (caddr_t) sc->arpcom.ac_enaddr,
- sizeof(sc->arpcom.ac_enaddr));
- }
-
- /*
- * Set new address
- */
- ed_init(ifp);
- break;
- }
-#endif
-#ifdef NS
- /*
- * XXX - This code is probably wrong
- */
- case AF_NS:
- {
- register struct ns_addr *ina = &(IA_SNS(ifa)->sns_addr);
-
- if (ns_nullhost(*ina))
- ina->x_host =
- *(union ns_host *) (sc->arpcom.ac_enaddr);
- else {
- bcopy((caddr_t) ina->x_host.c_host,
- (caddr_t) sc->arpcom.ac_enaddr,
- sizeof(sc->arpcom.ac_enaddr));
- }
-
- /*
- * Set new address
- */
- ed_init(ifp);
- break;
- }
-#endif
- default:
- ed_init(ifp);
- break;
- }
- break;
-
case SIOCGIFADDR:
- {
- struct sockaddr *sa;
-
- sa = (struct sockaddr *) & ifr->ifr_data;
- bcopy((caddr_t) sc->arpcom.ac_enaddr,
- (caddr_t) sa->sa_data, ETHER_ADDR_LEN);
- }
+ ether_ioctl(ifp, command, data);
break;
case SIOCSIFFLAGS:
@@ -2423,7 +2352,7 @@ ed_ioctl(ifp, command, data)
*/
if (ifp->if_flags & IFF_UP) {
if ((ifp->if_flags & IFF_RUNNING) == 0)
- ed_init(ifp);
+ ed_init(ifp->if_softc);
} else {
if (ifp->if_flags & IFF_RUNNING) {
ed_stop(sc);
OpenPOWER on IntegriCloud