summaryrefslogtreecommitdiff
path: root/sys/dev/usb/if_kue.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb/if_kue.c')
-rw-r--r--sys/dev/usb/if_kue.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/sys/dev/usb/if_kue.c b/sys/dev/usb/if_kue.c
index 7401eb1c8a862..b4c65e47d6a6b 100644
--- a/sys/dev/usb/if_kue.c
+++ b/sys/dev/usb/if_kue.c
@@ -79,6 +79,7 @@ __FBSDID("$FreeBSD$");
#include <net/ethernet.h>
#include <net/if_dl.h>
#include <net/if_media.h>
+#include <net/if_types.h>
#include <net/bpf.h>
@@ -315,7 +316,7 @@ kue_setmulti(struct kue_softc *sc)
struct ifmultiaddr *ifma;
int i = 0;
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->kue_ifp;
if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {
sc->kue_rxfilt |= KUE_RXFILT_ALLMULTI;
@@ -472,10 +473,11 @@ USB_ATTACH(kue)
sc->kue_mcfilters = malloc(KUE_MCFILTCNT(sc) * ETHER_ADDR_LEN,
M_USBDEV, M_NOWAIT);
- bcopy(sc->kue_desc.kue_macaddr,
- (char *)&sc->arpcom.ac_enaddr, ETHER_ADDR_LEN);
-
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->kue_ifp = if_alloc(IFT_ETHER);
+ if (ifp == NULL) {
+ printf("kue%d: can not if_alloc()\n", sc->kue_unit);
+ USB_ATTACH_ERROR_RETURN;
+ }
ifp->if_softc = sc;
if_initname(ifp, "kue", sc->kue_unit);
ifp->if_mtu = ETHERMTU;
@@ -515,7 +517,7 @@ kue_detach(device_ptr_t dev)
sc = device_get_softc(dev);
KUE_LOCK(sc);
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->kue_ifp;
sc->kue_dying = 1;
@@ -524,6 +526,7 @@ kue_detach(device_ptr_t dev)
ether_ifdetach(ifp);
#else
ether_ifdetach(ifp, ETHER_BPF_SUPPORTED);
+ if_free(ifp);
#endif
if (sc->kue_ep[KUE_ENDPT_TX] != NULL)
@@ -591,7 +594,7 @@ Static void kue_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv,
c = priv;
sc = c->ue_sc;
KUE_LOCK(sc);
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->kue_ifp;
if (!(ifp->if_flags & IFF_RUNNING)) {
KUE_UNLOCK(sc);
@@ -628,7 +631,7 @@ Static void kue_rxeof(usbd_xfer_handle xfer, usbd_private_handle priv,
}
ifp->if_ipackets++;
- m->m_pkthdr.rcvif = (struct ifnet *)&sc->kue_qdat;
+ m->m_pkthdr.rcvif = (void *)&sc->kue_qdat;
m->m_pkthdr.len = m->m_len = total_len;
/* Put the packet on the special USB input queue. */
@@ -665,7 +668,7 @@ kue_txeof(usbd_xfer_handle xfer, usbd_private_handle priv, usbd_status status)
sc = c->ue_sc;
KUE_LOCK(sc);
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->kue_ifp;
ifp->if_timer = 0;
ifp->if_flags &= ~IFF_OACTIVE;
@@ -786,7 +789,7 @@ Static void
kue_init(void *xsc)
{
struct kue_softc *sc = xsc;
- struct ifnet *ifp = &sc->arpcom.ac_if;
+ struct ifnet *ifp = sc->kue_ifp;
struct ue_chain *c;
usbd_status err;
int i;
@@ -800,7 +803,7 @@ kue_init(void *xsc)
/* Set MAC address */
kue_ctl(sc, KUE_CTL_WRITE, KUE_CMD_SET_MAC,
- 0, sc->arpcom.ac_enaddr, ETHER_ADDR_LEN);
+ 0, IFP2ENADDR(sc->kue_ifp), ETHER_ADDR_LEN);
sc->kue_rxfilt = KUE_RXFILT_UNICAST|KUE_RXFILT_BROADCAST;
@@ -956,7 +959,7 @@ kue_stop(struct kue_softc *sc)
struct ifnet *ifp;
KUE_LOCK(sc);
- ifp = &sc->arpcom.ac_if;
+ ifp = sc->kue_ifp;
ifp->if_timer = 0;
/* Stop transfers. */