Mechanically convert usb_ethernet(4) to IfAPI
Reviewed by: zlei Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D37802
This commit is contained in:
parent
dba12f7560
commit
2fda7967b6
@ -81,8 +81,8 @@ static usb_proc_callback_t ue_start_task;
|
|||||||
static usb_proc_callback_t ue_stop_task;
|
static usb_proc_callback_t ue_stop_task;
|
||||||
|
|
||||||
static void ue_init(void *);
|
static void ue_init(void *);
|
||||||
static void ue_start(struct ifnet *);
|
static void ue_start(if_t);
|
||||||
static int ue_ifmedia_upd(struct ifnet *);
|
static int ue_ifmedia_upd(if_t);
|
||||||
static void ue_watchdog(void *);
|
static void ue_watchdog(void *);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -132,7 +132,7 @@ ue_queue_command(struct usb_ether *ue,
|
|||||||
usb_proc_mwait(&ue->ue_tq, t0, t1);
|
usb_proc_mwait(&ue->ue_tq, t0, t1);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct ifnet *
|
if_t
|
||||||
uether_getifp(struct usb_ether *ue)
|
uether_getifp(struct usb_ether *ue)
|
||||||
{
|
{
|
||||||
return (ue->ue_ifp);
|
return (ue->ue_ifp);
|
||||||
@ -207,7 +207,7 @@ ue_attach_post_task(struct usb_proc_msg *_task)
|
|||||||
struct usb_ether_cfg_task *task =
|
struct usb_ether_cfg_task *task =
|
||||||
(struct usb_ether_cfg_task *)_task;
|
(struct usb_ether_cfg_task *)_task;
|
||||||
struct usb_ether *ue = task->ue;
|
struct usb_ether *ue = task->ue;
|
||||||
struct ifnet *ifp;
|
if_t ifp;
|
||||||
int error;
|
int error;
|
||||||
char num[14]; /* sufficient for 32 bits */
|
char num[14]; /* sufficient for 32 bits */
|
||||||
|
|
||||||
@ -229,22 +229,21 @@ ue_attach_post_task(struct usb_proc_msg *_task)
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
ifp->if_softc = ue;
|
if_setsoftc(ifp, ue);
|
||||||
if_initname(ifp, "ue", ue->ue_unit);
|
if_initname(ifp, "ue", ue->ue_unit);
|
||||||
if (ue->ue_methods->ue_attach_post_sub != NULL) {
|
if (ue->ue_methods->ue_attach_post_sub != NULL) {
|
||||||
ue->ue_ifp = ifp;
|
ue->ue_ifp = ifp;
|
||||||
error = ue->ue_methods->ue_attach_post_sub(ue);
|
error = ue->ue_methods->ue_attach_post_sub(ue);
|
||||||
} else {
|
} else {
|
||||||
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST);
|
||||||
if (ue->ue_methods->ue_ioctl != NULL)
|
if (ue->ue_methods->ue_ioctl != NULL)
|
||||||
ifp->if_ioctl = ue->ue_methods->ue_ioctl;
|
if_setioctlfn(ifp, ue->ue_methods->ue_ioctl);
|
||||||
else
|
else
|
||||||
ifp->if_ioctl = uether_ioctl;
|
if_setioctlfn(ifp, uether_ioctl);
|
||||||
ifp->if_start = ue_start;
|
if_setstartfn(ifp, ue_start);
|
||||||
ifp->if_init = ue_init;
|
if_setinitfn(ifp, ue_init);
|
||||||
IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen);
|
if_setsendqlen(ifp, ifqmaxlen);
|
||||||
ifp->if_snd.ifq_drv_maxlen = ifqmaxlen;
|
if_setsendqready(ifp);
|
||||||
IFQ_SET_READY(&ifp->if_snd);
|
|
||||||
ue->ue_ifp = ifp;
|
ue->ue_ifp = ifp;
|
||||||
|
|
||||||
if (ue->ue_methods->ue_mii_upd != NULL &&
|
if (ue->ue_methods->ue_mii_upd != NULL &&
|
||||||
@ -265,8 +264,8 @@ ue_attach_post_task(struct usb_proc_msg *_task)
|
|||||||
if_printf(ifp, "<USB Ethernet> on %s\n", device_get_nameunit(ue->ue_dev));
|
if_printf(ifp, "<USB Ethernet> on %s\n", device_get_nameunit(ue->ue_dev));
|
||||||
ether_ifattach(ifp, ue->ue_eaddr);
|
ether_ifattach(ifp, ue->ue_eaddr);
|
||||||
/* Tell upper layer we support VLAN oversized frames. */
|
/* Tell upper layer we support VLAN oversized frames. */
|
||||||
if (ifp->if_capabilities & IFCAP_VLAN_MTU)
|
if (if_getcapabilities(ifp) & IFCAP_VLAN_MTU)
|
||||||
ifp->if_hdrlen = sizeof(struct ether_vlan_header);
|
if_setifheaderlen(ifp, sizeof(struct ether_vlan_header));
|
||||||
|
|
||||||
CURVNET_RESTORE();
|
CURVNET_RESTORE();
|
||||||
|
|
||||||
@ -301,7 +300,7 @@ ue_attach_post_task(struct usb_proc_msg *_task)
|
|||||||
void
|
void
|
||||||
uether_ifdetach(struct usb_ether *ue)
|
uether_ifdetach(struct usb_ether *ue)
|
||||||
{
|
{
|
||||||
struct ifnet *ifp;
|
if_t ifp;
|
||||||
|
|
||||||
/* wait for any post attach or other command to complete */
|
/* wait for any post attach or other command to complete */
|
||||||
usb_proc_drain(&ue->ue_tq);
|
usb_proc_drain(&ue->ue_tq);
|
||||||
@ -312,7 +311,7 @@ uether_ifdetach(struct usb_ether *ue)
|
|||||||
if (ifp != NULL) {
|
if (ifp != NULL) {
|
||||||
/* we are not running any more */
|
/* we are not running any more */
|
||||||
UE_LOCK(ue);
|
UE_LOCK(ue);
|
||||||
ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
|
if_setdrvflagbits(ifp, 0, IFF_DRV_RUNNING);
|
||||||
UE_UNLOCK(ue);
|
UE_UNLOCK(ue);
|
||||||
|
|
||||||
/* drain any callouts */
|
/* drain any callouts */
|
||||||
@ -379,13 +378,13 @@ ue_start_task(struct usb_proc_msg *_task)
|
|||||||
struct usb_ether_cfg_task *task =
|
struct usb_ether_cfg_task *task =
|
||||||
(struct usb_ether_cfg_task *)_task;
|
(struct usb_ether_cfg_task *)_task;
|
||||||
struct usb_ether *ue = task->ue;
|
struct usb_ether *ue = task->ue;
|
||||||
struct ifnet *ifp = ue->ue_ifp;
|
if_t ifp = ue->ue_ifp;
|
||||||
|
|
||||||
UE_LOCK_ASSERT(ue, MA_OWNED);
|
UE_LOCK_ASSERT(ue, MA_OWNED);
|
||||||
|
|
||||||
ue->ue_methods->ue_init(ue);
|
ue->ue_methods->ue_init(ue);
|
||||||
|
|
||||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (ue->ue_methods->ue_tick != NULL)
|
if (ue->ue_methods->ue_tick != NULL)
|
||||||
@ -407,18 +406,18 @@ ue_stop_task(struct usb_proc_msg *_task)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
uether_start(struct ifnet *ifp)
|
uether_start(if_t ifp)
|
||||||
{
|
{
|
||||||
|
|
||||||
ue_start(ifp);
|
ue_start(ifp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ue_start(struct ifnet *ifp)
|
ue_start(if_t ifp)
|
||||||
{
|
{
|
||||||
struct usb_ether *ue = ifp->if_softc;
|
struct usb_ether *ue = if_getsoftc(ifp);
|
||||||
|
|
||||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
UE_LOCK(ue);
|
UE_LOCK(ue);
|
||||||
@ -447,16 +446,16 @@ ue_setmulti_task(struct usb_proc_msg *_task)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
uether_ifmedia_upd(struct ifnet *ifp)
|
uether_ifmedia_upd(if_t ifp)
|
||||||
{
|
{
|
||||||
|
|
||||||
return (ue_ifmedia_upd(ifp));
|
return (ue_ifmedia_upd(ifp));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ue_ifmedia_upd(struct ifnet *ifp)
|
ue_ifmedia_upd(if_t ifp)
|
||||||
{
|
{
|
||||||
struct usb_ether *ue = ifp->if_softc;
|
struct usb_ether *ue = if_getsoftc(ifp);
|
||||||
|
|
||||||
/* Defer to process context */
|
/* Defer to process context */
|
||||||
UE_LOCK(ue);
|
UE_LOCK(ue);
|
||||||
@ -474,7 +473,7 @@ ue_ifmedia_task(struct usb_proc_msg *_task)
|
|||||||
struct usb_ether_cfg_task *task =
|
struct usb_ether_cfg_task *task =
|
||||||
(struct usb_ether_cfg_task *)_task;
|
(struct usb_ether_cfg_task *)_task;
|
||||||
struct usb_ether *ue = task->ue;
|
struct usb_ether *ue = task->ue;
|
||||||
struct ifnet *ifp = ue->ue_ifp;
|
if_t ifp = ue->ue_ifp;
|
||||||
|
|
||||||
ue->ue_methods->ue_mii_upd(ifp);
|
ue->ue_methods->ue_mii_upd(ifp);
|
||||||
}
|
}
|
||||||
@ -483,9 +482,9 @@ static void
|
|||||||
ue_watchdog(void *arg)
|
ue_watchdog(void *arg)
|
||||||
{
|
{
|
||||||
struct usb_ether *ue = arg;
|
struct usb_ether *ue = arg;
|
||||||
struct ifnet *ifp = ue->ue_ifp;
|
if_t ifp = ue->ue_ifp;
|
||||||
|
|
||||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ue_queue_command(ue, ue_tick_task,
|
ue_queue_command(ue, ue_tick_task,
|
||||||
@ -501,18 +500,18 @@ ue_tick_task(struct usb_proc_msg *_task)
|
|||||||
struct usb_ether_cfg_task *task =
|
struct usb_ether_cfg_task *task =
|
||||||
(struct usb_ether_cfg_task *)_task;
|
(struct usb_ether_cfg_task *)_task;
|
||||||
struct usb_ether *ue = task->ue;
|
struct usb_ether *ue = task->ue;
|
||||||
struct ifnet *ifp = ue->ue_ifp;
|
if_t ifp = ue->ue_ifp;
|
||||||
|
|
||||||
if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0)
|
if ((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ue->ue_methods->ue_tick(ue);
|
ue->ue_methods->ue_tick(ue);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
uether_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
uether_ioctl(if_t ifp, u_long command, caddr_t data)
|
||||||
{
|
{
|
||||||
struct usb_ether *ue = ifp->if_softc;
|
struct usb_ether *ue = if_getsoftc(ifp);
|
||||||
struct ifreq *ifr = (struct ifreq *)data;
|
struct ifreq *ifr = (struct ifreq *)data;
|
||||||
struct mii_data *mii;
|
struct mii_data *mii;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
@ -520,8 +519,8 @@ uether_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
|
|||||||
switch (command) {
|
switch (command) {
|
||||||
case SIOCSIFFLAGS:
|
case SIOCSIFFLAGS:
|
||||||
UE_LOCK(ue);
|
UE_LOCK(ue);
|
||||||
if (ifp->if_flags & IFF_UP) {
|
if (if_getflags(ifp) & IFF_UP) {
|
||||||
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
|
if (if_getdrvflags(ifp) & IFF_DRV_RUNNING)
|
||||||
ue_queue_command(ue, ue_promisc_task,
|
ue_queue_command(ue, ue_promisc_task,
|
||||||
&ue->ue_promisc_task[0].hdr,
|
&ue->ue_promisc_task[0].hdr,
|
||||||
&ue->ue_promisc_task[1].hdr);
|
&ue->ue_promisc_task[1].hdr);
|
||||||
@ -598,7 +597,7 @@ int
|
|||||||
uether_rxmbuf(struct usb_ether *ue, struct mbuf *m,
|
uether_rxmbuf(struct usb_ether *ue, struct mbuf *m,
|
||||||
unsigned len)
|
unsigned len)
|
||||||
{
|
{
|
||||||
struct ifnet *ifp = ue->ue_ifp;
|
if_t ifp = ue->ue_ifp;
|
||||||
|
|
||||||
UE_LOCK_ASSERT(ue, MA_OWNED);
|
UE_LOCK_ASSERT(ue, MA_OWNED);
|
||||||
|
|
||||||
@ -616,7 +615,7 @@ int
|
|||||||
uether_rxbuf(struct usb_ether *ue, struct usb_page_cache *pc,
|
uether_rxbuf(struct usb_ether *ue, struct usb_page_cache *pc,
|
||||||
unsigned offset, unsigned len)
|
unsigned offset, unsigned len)
|
||||||
{
|
{
|
||||||
struct ifnet *ifp = ue->ue_ifp;
|
if_t ifp = ue->ue_ifp;
|
||||||
struct mbuf *m;
|
struct mbuf *m;
|
||||||
|
|
||||||
UE_LOCK_ASSERT(ue, MA_OWNED);
|
UE_LOCK_ASSERT(ue, MA_OWNED);
|
||||||
@ -645,7 +644,7 @@ uether_rxbuf(struct usb_ether *ue, struct usb_page_cache *pc,
|
|||||||
void
|
void
|
||||||
uether_rxflush(struct usb_ether *ue)
|
uether_rxflush(struct usb_ether *ue)
|
||||||
{
|
{
|
||||||
struct ifnet *ifp = ue->ue_ifp;
|
if_t ifp = ue->ue_ifp;
|
||||||
struct epoch_tracker et;
|
struct epoch_tracker et;
|
||||||
struct mbuf *m, *n;
|
struct mbuf *m, *n;
|
||||||
|
|
||||||
@ -657,7 +656,7 @@ uether_rxflush(struct usb_ether *ue)
|
|||||||
while ((m = n) != NULL) {
|
while ((m = n) != NULL) {
|
||||||
n = STAILQ_NEXT(m, m_stailqpkt);
|
n = STAILQ_NEXT(m, m_stailqpkt);
|
||||||
m->m_nextpkt = NULL;
|
m->m_nextpkt = NULL;
|
||||||
ifp->if_input(ifp, m);
|
if_input(ifp, m);
|
||||||
}
|
}
|
||||||
NET_EPOCH_EXIT(et);
|
NET_EPOCH_EXIT(et);
|
||||||
UE_LOCK(ue);
|
UE_LOCK(ue);
|
||||||
|
@ -62,10 +62,10 @@ struct usb_ether_methods {
|
|||||||
uether_fn_t *ue_setmulti;
|
uether_fn_t *ue_setmulti;
|
||||||
uether_fn_t *ue_setpromisc;
|
uether_fn_t *ue_setpromisc;
|
||||||
uether_fn_t *ue_tick;
|
uether_fn_t *ue_tick;
|
||||||
int (*ue_mii_upd)(struct ifnet *);
|
int (*ue_mii_upd)(if_t);
|
||||||
void (*ue_mii_sts)(struct ifnet *,
|
void (*ue_mii_sts)(if_t,
|
||||||
struct ifmediareq *);
|
struct ifmediareq *);
|
||||||
int (*ue_ioctl)(struct ifnet *, u_long, caddr_t);
|
int (*ue_ioctl)(if_t, u_long, caddr_t);
|
||||||
int (*ue_attach_post_sub)(struct usb_ether *);
|
int (*ue_attach_post_sub)(struct usb_ether *);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -76,7 +76,7 @@ struct usb_ether_cfg_task {
|
|||||||
|
|
||||||
struct usb_ether {
|
struct usb_ether {
|
||||||
/* NOTE: the "ue_ifp" pointer must be first --hps */
|
/* NOTE: the "ue_ifp" pointer must be first --hps */
|
||||||
struct ifnet *ue_ifp;
|
if_t ue_ifp;
|
||||||
struct mtx *ue_mtx;
|
struct mtx *ue_mtx;
|
||||||
const struct usb_ether_methods *ue_methods;
|
const struct usb_ether_methods *ue_methods;
|
||||||
struct sysctl_oid *ue_sysctl_oid;
|
struct sysctl_oid *ue_sysctl_oid;
|
||||||
@ -104,16 +104,16 @@ struct usb_ether {
|
|||||||
#define uether_do_request(ue,req,data,timo) \
|
#define uether_do_request(ue,req,data,timo) \
|
||||||
usbd_do_request_proc((ue)->ue_udev,&(ue)->ue_tq,req,data,0,NULL,timo)
|
usbd_do_request_proc((ue)->ue_udev,&(ue)->ue_tq,req,data,0,NULL,timo)
|
||||||
|
|
||||||
uint8_t uether_pause(struct usb_ether *, unsigned);
|
uint8_t uether_pause(struct usb_ether *, unsigned int);
|
||||||
struct ifnet *uether_getifp(struct usb_ether *);
|
if_t uether_getifp(struct usb_ether *);
|
||||||
struct mii_data *uether_getmii(struct usb_ether *);
|
struct mii_data *uether_getmii(struct usb_ether *);
|
||||||
void *uether_getsc(struct usb_ether *);
|
void *uether_getsc(struct usb_ether *);
|
||||||
int uether_ifattach(struct usb_ether *);
|
int uether_ifattach(struct usb_ether *);
|
||||||
void uether_ifattach_wait(struct usb_ether *);
|
void uether_ifattach_wait(struct usb_ether *);
|
||||||
void uether_ifdetach(struct usb_ether *);
|
void uether_ifdetach(struct usb_ether *);
|
||||||
int uether_ifmedia_upd(struct ifnet *);
|
int uether_ifmedia_upd(if_t);
|
||||||
void uether_init(void *);
|
void uether_init(void *);
|
||||||
int uether_ioctl(struct ifnet *, u_long, caddr_t);
|
int uether_ioctl(if_t, u_long, caddr_t);
|
||||||
struct mbuf *uether_newbuf(void);
|
struct mbuf *uether_newbuf(void);
|
||||||
int uether_rxmbuf(struct usb_ether *, struct mbuf *,
|
int uether_rxmbuf(struct usb_ether *, struct mbuf *,
|
||||||
unsigned);
|
unsigned);
|
||||||
@ -122,5 +122,5 @@ int uether_rxbuf(struct usb_ether *,
|
|||||||
unsigned, unsigned);
|
unsigned, unsigned);
|
||||||
void uether_rxflush(struct usb_ether *);
|
void uether_rxflush(struct usb_ether *);
|
||||||
uint8_t uether_is_gone(struct usb_ether *);
|
uint8_t uether_is_gone(struct usb_ether *);
|
||||||
void uether_start(struct ifnet *);
|
void uether_start(if_t);
|
||||||
#endif /* _USB_ETHERNET_H_ */
|
#endif /* _USB_ETHERNET_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user