FreeBSD kernel usb device Code
if_rue.c File Reference
#include <sys/cdefs.h>
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
#include <sys/queue.h>
#include <sys/types.h>
#include <sys/systm.h>
#include <sys/socket.h>
#include <sys/kernel.h>
#include <sys/bus.h>
#include <sys/module.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/condvar.h>
#include <sys/sysctl.h>
#include <sys/sx.h>
#include <sys/unistd.h>
#include <sys/callout.h>
#include <sys/malloc.h>
#include <sys/priv.h>
#include <net/if.h>
#include <net/if_var.h>
#include <net/if_media.h>
#include <dev/mii/mii.h>
#include <dev/mii/miivar.h>
#include <dev/usb/usb.h>
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include "usbdevs.h"
#include <dev/usb/usb_debug.h>
#include <dev/usb/usb_process.h>
#include <dev/usb/net/usb_ethernet.h>
#include <dev/usb/net/if_ruereg.h>
#include "miibus_if.h"
Include dependency graph for if_rue.c:

Go to the source code of this file.

Macros

#define USB_DEBUG_VAR   rue_debug
 
#define RUE_SETBIT(sc, reg, x)    rue_csr_write_1(sc, reg, rue_csr_read_1(sc, reg) | (x))
 
#define RUE_CLRBIT(sc, reg, x)    rue_csr_write_1(sc, reg, rue_csr_read_1(sc, reg) & ~(x))
 

Functions

 __FBSDID ("$FreeBSD$")
 
static int rue_read_mem (struct rue_softc *, uint16_t, void *, int)
 
static int rue_write_mem (struct rue_softc *, uint16_t, void *, int)
 
static uint8_t rue_csr_read_1 (struct rue_softc *, uint16_t)
 
static uint16_t rue_csr_read_2 (struct rue_softc *, uint16_t)
 
static int rue_csr_write_1 (struct rue_softc *, uint16_t, uint8_t)
 
static int rue_csr_write_2 (struct rue_softc *, uint16_t, uint16_t)
 
static int rue_csr_write_4 (struct rue_softc *, int, uint32_t)
 
static void rue_reset (struct rue_softc *)
 
static int rue_ifmedia_upd (struct ifnet *)
 
static void rue_ifmedia_sts (struct ifnet *, struct ifmediareq *)
 
 DRIVER_MODULE_ORDERED (rue, uhub, rue_driver, rue_devclass, NULL, NULL, SI_ORDER_ANY)
 
 DRIVER_MODULE (miibus, rue, miibus_driver, miibus_devclass, NULL, NULL)
 
 MODULE_DEPEND (rue, uether, 1, 1, 1)
 
 MODULE_DEPEND (rue, usb, 1, 1, 1)
 
 MODULE_DEPEND (rue, ether, 1, 1, 1)
 
 MODULE_DEPEND (rue, miibus, 1, 1, 1)
 
 MODULE_VERSION (rue, 1)
 
 USB_PNP_HOST_INFO (rue_devs)
 
static int rue_miibus_readreg (device_t dev, int phy, int reg)
 
static int rue_miibus_writereg (device_t dev, int phy, int reg, int data)
 
static void rue_miibus_statchg (device_t dev)
 
static void rue_setpromisc (struct usb_ether *ue)
 
static u_int rue_hash_maddr (void *arg, struct sockaddr_dl *sdl, u_int cnt)
 
static void rue_setmulti (struct usb_ether *ue)
 
static void rue_attach_post (struct usb_ether *ue)
 
static int rue_probe (device_t dev)
 
static int rue_attach (device_t dev)
 
static int rue_detach (device_t dev)
 
static void rue_intr_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void rue_bulk_read_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void rue_bulk_write_callback (struct usb_xfer *xfer, usb_error_t error)
 
static void rue_tick (struct usb_ether *ue)
 
static void rue_start (struct usb_ether *ue)
 
static void rue_init (struct usb_ether *ue)
 
static void rue_stop (struct usb_ether *ue)
 

Variables

static const STRUCT_USB_HOST_ID rue_devs []
 
static device_probe_t rue_probe
 
static device_attach_t rue_attach
 
static device_detach_t rue_detach
 
static miibus_readreg_t rue_miibus_readreg
 
static miibus_writereg_t rue_miibus_writereg
 
static miibus_statchg_t rue_miibus_statchg
 
static usb_callback_t rue_intr_callback
 
static usb_callback_t rue_bulk_read_callback
 
static usb_callback_t rue_bulk_write_callback
 
static uether_fn_t rue_attach_post
 
static uether_fn_t rue_init
 
static uether_fn_t rue_stop
 
static uether_fn_t rue_start
 
static uether_fn_t rue_tick
 
static uether_fn_t rue_setmulti
 
static uether_fn_t rue_setpromisc
 
static const struct usb_config rue_config [RUE_N_TRANSFER]
 
static device_method_t rue_methods []
 
static driver_t rue_driver
 
static devclass_t rue_devclass
 
static const struct usb_ether_methods rue_ue_methods
 

Macro Definition Documentation

◆ RUE_CLRBIT

#define RUE_CLRBIT (   sc,
  reg,
 
)     rue_csr_write_1(sc, reg, rue_csr_read_1(sc, reg) & ~(x))

Definition at line 242 of file if_rue.c.

◆ RUE_SETBIT

#define RUE_SETBIT (   sc,
  reg,
 
)     rue_csr_write_1(sc, reg, rue_csr_read_1(sc, reg) | (x))

Definition at line 239 of file if_rue.c.

◆ USB_DEBUG_VAR

#define USB_DEBUG_VAR   rue_debug

Definition at line 102 of file if_rue.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DRIVER_MODULE()

DRIVER_MODULE ( miibus  ,
rue  ,
miibus_driver  ,
miibus_devclass  ,
NULL  ,
NULL   
)

◆ DRIVER_MODULE_ORDERED()

DRIVER_MODULE_ORDERED ( rue  ,
uhub  ,
rue_driver  ,
rue_devclass  ,
NULL  ,
NULL  ,
SI_ORDER_ANY   
)

◆ MODULE_DEPEND() [1/4]

MODULE_DEPEND ( rue  ,
ether  ,
,
,
 
)

◆ MODULE_DEPEND() [2/4]

MODULE_DEPEND ( rue  ,
miibus  ,
,
,
 
)

◆ MODULE_DEPEND() [3/4]

MODULE_DEPEND ( rue  ,
uether  ,
,
,
 
)

◆ MODULE_DEPEND() [4/4]

MODULE_DEPEND ( rue  ,
usb  ,
,
,
 
)

◆ MODULE_VERSION()

MODULE_VERSION ( rue  ,
 
)

◆ rue_attach()

◆ rue_attach_post()

static void rue_attach_post ( struct usb_ether ue)
static

Definition at line 555 of file if_rue.c.

References RUE_EEPROM_IDR0, rue_read_mem(), rue_reset(), usb_ether::ue_eaddr, and uether_getsc().

Here is the call graph for this function:

◆ rue_bulk_read_callback()

◆ rue_bulk_write_callback()

◆ rue_csr_read_1()

static uint8_t rue_csr_read_1 ( struct rue_softc sc,
uint16_t  reg 
)
static

Definition at line 274 of file if_rue.c.

References reg, rue_read_mem(), and val.

Referenced by rue_miibus_readreg(), and rue_reset().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rue_csr_read_2()

static uint16_t rue_csr_read_2 ( struct rue_softc sc,
uint16_t  reg 
)
static

Definition at line 283 of file if_rue.c.

References reg, rue_read_mem(), UGETW, and val.

Referenced by rue_miibus_readreg(), rue_miibus_statchg(), and rue_setmulti().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rue_csr_write_1()

static int rue_csr_write_1 ( struct rue_softc sc,
uint16_t  reg,
uint8_t  val 
)
static

Definition at line 292 of file if_rue.c.

References reg, rue_write_mem(), and val.

Referenced by rue_init(), rue_miibus_writereg(), rue_reset(), and rue_stop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rue_csr_write_2()

static int rue_csr_write_2 ( struct rue_softc sc,
uint16_t  reg,
uint16_t  val 
)
static

Definition at line 298 of file if_rue.c.

References reg, rue_write_mem(), USETW, and val.

Referenced by rue_init(), rue_miibus_statchg(), rue_miibus_writereg(), and rue_setmulti().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rue_csr_write_4()

static int rue_csr_write_4 ( struct rue_softc sc,
int  reg,
uint32_t  val 
)
static

Definition at line 307 of file if_rue.c.

References reg, rue_write_mem(), USETDW, and val.

Referenced by rue_setmulti().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rue_detach()

static int rue_detach ( device_t  dev)
static

Definition at line 628 of file if_rue.c.

References dev, RUE_N_TRANSFER, rue_softc::sc_mtx, rue_softc::sc_ue, rue_softc::sc_xfer, uether_ifdetach(), and usbd_transfer_unsetup().

Here is the call graph for this function:

◆ rue_hash_maddr()

static u_int rue_hash_maddr ( void *  arg,
struct sockaddr_dl *  sdl,
u_int  cnt 
)
static

Definition at line 477 of file if_rue.c.

Referenced by rue_setmulti().

Here is the caller graph for this function:

◆ rue_ifmedia_sts()

static void rue_ifmedia_sts ( struct ifnet *  ifp,
struct ifmediareq *  ifmr 
)
static

Definition at line 896 of file if_rue.c.

References GET_MII, RUE_LOCK, and RUE_UNLOCK.

◆ rue_ifmedia_upd()

static int rue_ifmedia_upd ( struct ifnet *  ifp)
static

Definition at line 876 of file if_rue.c.

References error, GET_MII, RUE_LOCK_ASSERT, and rue_softc::sc_flags.

◆ rue_init()

◆ rue_intr_callback()

◆ rue_miibus_readreg()

static int rue_miibus_readreg ( device_t  dev,
int  phy,
int  reg 
)
static

Definition at line 316 of file if_rue.c.

References dev, reg, RUE_AER, RUE_ANAR, RUE_ANLP, RUE_BMCR, RUE_BMSR, rue_csr_read_1(), rue_csr_read_2(), RUE_LOCK, RUE_REG_MAX, RUE_REG_MIN, RUE_UNLOCK, rue_softc::sc_mtx, rue_softc::sc_ue, and usb_ether::ue_dev.

Here is the call graph for this function:

◆ rue_miibus_statchg()

static void rue_miibus_statchg ( device_t  dev)
static

Definition at line 416 of file if_rue.c.

References dev, GET_MII, RUE_BMCR, RUE_BMCR_DUPLEX, RUE_BMCR_SPD_SET, RUE_CLRBIT, RUE_CR, RUE_CR_RE, RUE_CR_TE, rue_csr_read_2(), rue_csr_write_2(), RUE_LOCK, RUE_SETBIT, RUE_UNLOCK, and rue_softc::sc_mtx.

Here is the call graph for this function:

◆ rue_miibus_writereg()

static int rue_miibus_writereg ( device_t  dev,
int  phy,
int  reg,
int  data 
)
static

◆ rue_probe()

static int rue_probe ( device_t  dev)
static

◆ rue_read_mem()

static int rue_read_mem ( struct rue_softc sc,
uint16_t  addr,
void *  buf,
int  len 
)
static

Definition at line 246 of file if_rue.c.

References addr, len, req, rue_softc::sc_ue, uether_do_request, UR_SET_ADDRESS, USETW, and UT_READ_VENDOR_DEVICE.

Referenced by rue_attach_post(), rue_csr_read_1(), and rue_csr_read_2().

Here is the caller graph for this function:

◆ rue_reset()

static void rue_reset ( struct rue_softc sc)
static

Definition at line 536 of file if_rue.c.

References RUE_CR, RUE_CR_SOFT_RST, rue_csr_read_1(), rue_csr_write_1(), RUE_TIMEOUT, rue_softc::sc_ue, usb_ether::ue_dev, and uether_pause().

Referenced by rue_attach_post(), rue_init(), and rue_stop().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ rue_setmulti()

static void rue_setmulti ( struct usb_ether ue)
static

◆ rue_setpromisc()

static void rue_setpromisc ( struct usb_ether ue)
static

Definition at line 462 of file if_rue.c.

References RUE_CLRBIT, RUE_LOCK_ASSERT, RUE_RCR, RUE_RCR_AAP, RUE_SETBIT, uether_getifp(), and uether_getsc().

Here is the call graph for this function:

◆ rue_start()

static void rue_start ( struct usb_ether ue)
static

Definition at line 822 of file if_rue.c.

References RUE_BULK_DT_RD, RUE_BULK_DT_WR, RUE_INTR_DT_RD, rue_softc::sc_xfer, uether_getsc(), and usbd_transfer_start().

Here is the call graph for this function:

◆ rue_stop()

static void rue_stop ( struct usb_ether ue)
static

◆ rue_tick()

static void rue_tick ( struct usb_ether ue)
static

Definition at line 805 of file if_rue.c.

References GET_MII, RUE_FLAG_LINK, RUE_LOCK_ASSERT, rue_start, rue_softc::sc_flags, and uether_getsc().

Here is the call graph for this function:

◆ rue_write_mem()

static int rue_write_mem ( struct rue_softc sc,
uint16_t  addr,
void *  buf,
int  len 
)
static

Definition at line 260 of file if_rue.c.

References addr, len, req, rue_softc::sc_ue, uether_do_request, UR_SET_ADDRESS, USETW, and UT_WRITE_VENDOR_DEVICE.

Referenced by rue_csr_write_1(), rue_csr_write_2(), rue_csr_write_4(), and rue_init().

Here is the caller graph for this function:

◆ USB_PNP_HOST_INFO()

USB_PNP_HOST_INFO ( rue_devs  )

Variable Documentation

◆ rue_attach

device_attach_t rue_attach
static

Definition at line 133 of file if_rue.c.

◆ rue_attach_post

uether_fn_t rue_attach_post
static

Definition at line 144 of file if_rue.c.

◆ rue_bulk_read_callback

usb_callback_t rue_bulk_read_callback
static

Definition at line 141 of file if_rue.c.

◆ rue_bulk_write_callback

usb_callback_t rue_bulk_write_callback
static

Definition at line 142 of file if_rue.c.

◆ rue_config

const struct usb_config rue_config[RUE_N_TRANSFER]
static
Initial value:
= {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
.bufsize = MCLBYTES,
.flags = {.pipe_bof = 1,.force_short_xfer = 1,},
.timeout = 10000,
},
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.bufsize = (MCLBYTES + 4),
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.timeout = 0,
},
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
.flags = {.pipe_bof = 1,.short_xfer_ok = 1,},
.bufsize = 0,
.callback = rue_intr_callback,
},
}
static usb_callback_t rue_bulk_read_callback
Definition: if_rue.c:141
static usb_callback_t rue_intr_callback
Definition: if_rue.c:140
static usb_callback_t rue_bulk_write_callback
Definition: if_rue.c:142
@ RUE_INTR_DT_RD
Definition: if_ruereg.h:165
@ RUE_BULK_DT_RD
Definition: if_ruereg.h:164
@ RUE_BULK_DT_WR
Definition: if_ruereg.h:163
#define UE_INTERRUPT
Definition: usb.h:544
#define UE_ADDR_ANY
Definition: usb.h:537
#define UE_BULK
Definition: usb.h:543
#define UE_DIR_IN
Definition: usb.h:531
#define UE_DIR_OUT
Definition: usb.h:532

Definition at line 164 of file if_rue.c.

Referenced by rue_attach().

◆ rue_detach

device_detach_t rue_detach
static

Definition at line 134 of file if_rue.c.

Referenced by rue_attach().

◆ rue_devclass

devclass_t rue_devclass
static

Definition at line 215 of file if_rue.c.

◆ rue_devs

const STRUCT_USB_HOST_ID rue_devs[]
static
Initial value:
= {
{USB_VPI(USB_VENDOR_MELCO, USB_PRODUCT_MELCO_LUAKTX, 0)},
{USB_VPI(USB_VENDOR_REALTEK, USB_PRODUCT_REALTEK_USBKR100, 0)},
{USB_VPI(USB_VENDOR_OQO, USB_PRODUCT_OQO_ETHER01, 0)},
}
#define USB_VPI(vend, prod, info)
Definition: usbdi.h:367

Definition at line 124 of file if_rue.c.

Referenced by rue_probe().

◆ rue_driver

driver_t rue_driver
static
Initial value:
= {
.name = "rue",
.methods = rue_methods,
.size = sizeof(struct rue_softc),
}
static device_method_t rue_methods[]
Definition: if_rue.c:195

Definition at line 209 of file if_rue.c.

◆ rue_init

uether_fn_t rue_init
static

Definition at line 145 of file if_rue.c.

◆ rue_intr_callback

usb_callback_t rue_intr_callback
static

Definition at line 140 of file if_rue.c.

◆ rue_methods

device_method_t rue_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, rue_probe),
DEVMETHOD(device_attach, rue_attach),
DEVMETHOD(device_detach, rue_detach),
DEVMETHOD(miibus_readreg, rue_miibus_readreg),
DEVMETHOD(miibus_writereg, rue_miibus_writereg),
DEVMETHOD(miibus_statchg, rue_miibus_statchg),
DEVMETHOD_END
}
static miibus_writereg_t rue_miibus_writereg
Definition: if_rue.c:137
static miibus_readreg_t rue_miibus_readreg
Definition: if_rue.c:136
static device_attach_t rue_attach
Definition: if_rue.c:133
static miibus_statchg_t rue_miibus_statchg
Definition: if_rue.c:138
static device_probe_t rue_probe
Definition: if_rue.c:132
static device_detach_t rue_detach
Definition: if_rue.c:134

Definition at line 195 of file if_rue.c.

◆ rue_miibus_readreg

miibus_readreg_t rue_miibus_readreg
static

Definition at line 136 of file if_rue.c.

◆ rue_miibus_statchg

miibus_statchg_t rue_miibus_statchg
static

Definition at line 138 of file if_rue.c.

◆ rue_miibus_writereg

miibus_writereg_t rue_miibus_writereg
static

Definition at line 137 of file if_rue.c.

◆ rue_probe

device_probe_t rue_probe
static

Definition at line 132 of file if_rue.c.

◆ rue_setmulti

uether_fn_t rue_setmulti
static

Definition at line 149 of file if_rue.c.

Referenced by rue_init().

◆ rue_setpromisc

uether_fn_t rue_setpromisc
static

Definition at line 150 of file if_rue.c.

Referenced by rue_init().

◆ rue_start

uether_fn_t rue_start
static

Definition at line 147 of file if_rue.c.

Referenced by rue_init(), and rue_tick().

◆ rue_stop

uether_fn_t rue_stop
static

Definition at line 146 of file if_rue.c.

Referenced by rue_init().

◆ rue_tick

uether_fn_t rue_tick
static

Definition at line 148 of file if_rue.c.

◆ rue_ue_methods

const struct usb_ether_methods rue_ue_methods
static
Initial value:
= {
.ue_attach_post = rue_attach_post,
.ue_start = rue_start,
.ue_init = rue_init,
.ue_stop = rue_stop,
.ue_tick = rue_tick,
.ue_setmulti = rue_setmulti,
.ue_setpromisc = rue_setpromisc,
.ue_mii_upd = rue_ifmedia_upd,
.ue_mii_sts = rue_ifmedia_sts,
}
static int rue_ifmedia_upd(struct ifnet *)
Definition: if_rue.c:876
static uether_fn_t rue_attach_post
Definition: if_rue.c:144
static void rue_ifmedia_sts(struct ifnet *, struct ifmediareq *)
Definition: if_rue.c:896
static uether_fn_t rue_init
Definition: if_rue.c:145
static uether_fn_t rue_setmulti
Definition: if_rue.c:149
static uether_fn_t rue_start
Definition: if_rue.c:147
static uether_fn_t rue_stop
Definition: if_rue.c:146
static uether_fn_t rue_tick
Definition: if_rue.c:148
static uether_fn_t rue_setpromisc
Definition: if_rue.c:150

Definition at line 227 of file if_rue.c.

Referenced by rue_attach().