usb ethernet driver question

Alexander Samarin sasha.devel at gmail.com
Sun Nov 22 20:09:05 UTC 2009


Hello, all!

I'm trying to write a kernel module driver for WiMAX modem.
I have Samsung SWC-U100 USB modem.

Driver is based on if_cue module (it's source file is smallest in the tree).
I've get module successfully attaching to device and registering new network 
interface, but some questions appeared:

1. madwimax project have a description of protocol of the modem, but it says
    simply "This data should be sent over OUT endpoint in bulk mode."
    In other drivers I found only calls to functionu ether_do_request() e.g:

       struct usb_device_request req;

       req.bmRequestType = UT_READ_VENDOR_DEVICE;
       req.bRequest = CUE_CMD_GET_MACADDR;
       USETW(req.wValue, 0);
       USETW(req.wIndex, 0);
       USETW(req.wLength, ETHER_ADDR_LEN);

       uether_do_request(&sc->sc_ue, &req, buf, 1000);

    Here I can't understand:
    Buffer can be sent or received via buf argument of ether_do_request(), but
    what value should be used for req.bRequest, req.wValue and req.wIndex fields?

    In dev/usb/net/if_* files drivers read and write to registers or memory of
    chip; libusb just writes to file descriptor.

    Can anyone take me a link where I can read more about programming usb
    drivers for kernel?

2. Is it possible to detach CAM subsystem from virtual DVD-ROM on other
    interface? This DVD-ROM contains WinXP drivers and access program, which
    will never be used (I think) on UNIX systems.

PS: I know that if_cue is an ethernet driver, but WiMAX is a wireless so basing
    driver on if_cue code is not a good idea, but wireless drivers are big and
    my modem can connect only to one provider (Yota) so I decided to use if_cue
    as base code.

PS2: sorry for my English.

-- 
Best regards,  Alexander Samarin
     mailto:sasha at enikasoft.ru
     https://www.fsora.ru (waits for FreeBSD 8.0-RELEASE)


More information about the freebsd-usb mailing list