# Netgear WNDA3100v3 drivers

## p4plus2

Recently I was given a Netgear WNDA3100v3 but am having quite the rough experience getting it working on linux.  Searching on google at first proved rather futile for this specific version, so I defaulted to a fallback plan of ndiswrapper.  Ndiswrapper, however, fails with the following:

```

[ 4089.868628] ndiswrapper (import:232): unknown symbol: ntoskrnl.exe:'ExEventObjectType'

[ 4089.868641] ndiswrapper (import:232): unknown symbol: ntoskrnl.exe:'MmGetSystemRoutineAddress'

[ 4089.868644] ndiswrapper (import:232): unknown symbol: ntoskrnl.exe:'IoWMIWriteEvent'

[ 4089.868647] ndiswrapper (import:232): unknown symbol: ntoskrnl.exe:'RtlStringFromGUID'

[ 4089.868663] ndiswrapper (import:232): unknown symbol: ntoskrnl.exe:'__chkstk'

[ 4089.868713] ndiswrapper (load_sys_files:200): couldn't prepare driver 'rt2870'

[ 4089.869235] ndiswrapper (load_wrap_driver:103): couldn't load driver rt2870; check system log for messages from 'loadndisdriver'

```

But then I had remembered there were linux drivers for the ralink devices like the rt2870, so I went and built the modules.  However, no luck the device wasn't detected at all.  I opened up the rt2800usb.c and added the device to the list however, still no dice.  That resulted in a rather unhelpful error: rt2800_probe_rt: Error - Invalid RT chipset 0x0000, rev 0000 detected.  The device 0846:9013 seemed to be supported but this device is a 0846:9014, so I was hopeful.

lsusb -v output:

```

Bus 003 Device 013: ID 0846:9014 NetGear, Inc. 

Device Descriptor:

  bLength                18

  bDescriptorType         1

  bcdUSB               2.01

  bDeviceClass            0 

  bDeviceSubClass         0 

  bDeviceProtocol         0 

  bMaxPacketSize0        64

  idVendor           0x0846 NetGear, Inc.

  idProduct          0x9014 

  bcdDevice            1.00

  iManufacturer           1 MediaTek Inc.

  iProduct                2 WNDA3100v3

  iSerial                 3 000000000

  bNumConfigurations      1

  Configuration Descriptor:

    bLength                 9

    bDescriptorType         2

    wTotalLength           74

    bNumInterfaces          1

    bConfigurationValue     1

    iConfiguration          2 WNDA3100v3

    bmAttributes         0xa0

      (Bus Powered)

      Remote Wakeup

    MaxPower              200mA

    Interface Descriptor:

      bLength                 9

      bDescriptorType         4

      bInterfaceNumber        0

      bAlternateSetting       0

      bNumEndpoints           8

      bInterfaceClass       255 Vendor Specific Class

      bInterfaceSubClass    255 Vendor Specific Subclass

      bInterfaceProtocol    255 Vendor Specific Protocol

      iInterface              2 WNDA3100v3

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x84  EP 4 IN

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x85  EP 5 IN

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x08  EP 8 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x04  EP 4 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x05  EP 5 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x06  EP 6 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x07  EP 7 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

      Endpoint Descriptor:

        bLength                 7

        bDescriptorType         5

        bEndpointAddress     0x09  EP 9 OUT

        bmAttributes            2

          Transfer Type            Bulk

          Synch Type               None

          Usage Type               Data

        wMaxPacketSize     0x0200  1x 512 bytes

        bInterval               0

Binary Object Store Descriptor:

  bLength                 5

  bDescriptorType        15

  wTotalLength           12

  bNumDeviceCaps          1

  USB 2.0 Extension Device Capability:

    bLength                 7

    bDescriptorType        16

    bDevCapabilityType      2

    bmAttributes   0x0000f41e

      BESL Link Power Management (LPM) Supported

    BESL value     1024 us 

    Deep BESL value    61440 us 

can't get debug descriptor: Resource temporarily unavailable

Device Status:     0x0002

  (Bus Powered)

  Remote Wakeup Enabled

```

Any ideas on what I could try to get his running?  I am okay with ndiswrapper or native drivers, though I would prefer the latter.

----------

## chithanh

 *p4plus2 wrote:*   

> That resulted in a rather unhelpful error: rt2800_probe_rt: Error - Invalid RT chipset 0x0000, rev 0000 detected.  The device 0846:9013 seemed to be supported but this device is a 0846:9014, so I was hopeful.

 Are you sure it is a Ralink rt2800 based device?

v1 (0846:9010) is Atheros based

v2 (0846:9011) is Broadcom based

----------

## p4plus2

 *chithanh wrote:*   

>  *p4plus2 wrote:*   That resulted in a rather unhelpful error: rt2800_probe_rt: Error - Invalid RT chipset 0x0000, rev 0000 detected.  The device 0846:9013 seemed to be supported but this device is a 0846:9014, so I was hopeful. Are you sure it is a Ralink rt2800 based device?
> 
> v1 (0846:9010) is Atheros based
> 
> v2 (0846:9011) is Broadcom based

 

100%.  In fact, I have been hacking at the device driver an managed to get it to spit out at me its specifically a 7662.  I've been doing mostly guess work at this point but I got it to connect to my network and recieve an IP.  But at this point if something attempts using the internet the entire system locks up.   The drivers on the disk that came with it were rt2870.sys which further solidifies my thoughts that it is rt2800 based.

I'm rather stuck until I figure out how to more properly debug the issue, buts at least progress.

----------

## chithanh

If it is a MT7662U device, then it will not work properly with the rt2800 driver, nor any other driver in the kernel for that matter.

Your best bet would be to build the mtk-wifi driver from OpenWrt:

https://forum.openwrt.org/viewtopic.php?id=53215

https://github.com/openwrt/mtk-wifi-gpl

Failing that, there seem to be mentionings of the 7662U in MediaTek/Ralink's MT7601U out-of-tree driver, which you could also give a try.

http://www.mediatek.com/en/downloads/

----------

## p4plus2

 *chithanh wrote:*   

> If it is a MT7662U device, then it will not work properly with the rt2800 driver, nor any other driver in the kernel for that matter.
> 
> Your best bet would be to build the mtk-wifi driver from OpenWrt:
> 
> https://forum.openwrt.org/viewtopic.php?id=53215
> ...

 

Since I've started my work I've come across those links now.  Unfortunately, the mtk-wifi only supports AP configurations, not sta.  And, as far as I can tell, there is no support for usb devices in the mtk repo.

As for the out of tree driver I've had about add much luck as hacking at the in tree driver.  The out of tree driver didn't even compile as is and needed quite a bit of tweaking. But, alas, it still crashes with a skb_over_panic.  I tried to pad all skb allocations with an extra 10kb arbitrarily to see if that would help, but no dice.  I am currently attempting to Frankenstein something together from various mediatek drivers, not having too much luck.

Something interesting I've found is the panic can only be triggered if I startx, the attempt accessing the internet.  I can download as much as I want prior to startx, but after, even if I kill x, I get a panic instantly.  All in all, this experience may not be so bad if I wasn't using a desktop without internet and a cell phone with bad reception for my development.   But that's just half the fun I guess :p.

----------

## chithanh

From what I read of the mtk-wifi documentation, you need to edit the Makefile to build STA mode.

Also, try the latest kernel version which the 7601 driver builds against without patching.

----------

## p4plus2

 *chithanh wrote:*   

> From what I read of the mtk-wifi documentation, you need to edit the Makefile to build STA mode.
> 
> Also, try the latest kernel version which the 7601 driver builds against without patching.

 

The mtk-wifi drivers have STA support removed, the source files are in fact missing.  The 7601 drivers do not include most of the needed files either for the mt7662 and integrating the chipset turns out to be infeasible do to most of the underlaying structs being different.  However, I spent the last three days modding the MT7612U drivers and finally have them working  :Very Happy: !  Its so far been three or so hours since my last change and I've not yet had a single crash.  Currently my bandwidth is a fraction of what I should be getting (around 5mbps vs the 128mpbs I get when hardwired), but its a massive step in the right direction.

My next step will probably be to attempt rewriting the driver from scratch hopefully significantly more organized than the out of tree driver.  Even if its never good enough to submit as an actual driver its a learning experience I am not willing to pass up  :Smile: .  I am just glad to have gotten this far, but now that my desktop has internet again I can prepare an actual development environment.  I am not sure I am ready to call this thread "solved" as there is still an open issue of getting a long term solution working, but its more solved than when I started,  not sure what convention dictates in these situations.

Anyways, I'll be sure to occasionally post any significant progress updates, but until then thanks for taking the time to reply and offer assistance.

----------

## jbernardo

Hi, did you manage to advance on this? Sorry to bother you, but you seem to be the only person working on these drivers.

----------

## ccpaging

 *p4plus2 wrote:*   

> However, I spent the last three days modding the MT7612U drivers and finally have them working ! 

 

I got netgear A6210 which uses MT7612u and can not make it working in kernel 4.x.x.

There is a modify version which can be compiled.

https://github.com/ccpaging/MT7612U_DPO_LinuxSTA

But something is wrong:

https://github.com/ccpaging/MT7612U_DPO_LinuxSTA/issues/1

Help!

thanks

----------

## emagdnim

Update: there's is a working driver: https://github.com/jurobystricky/Netgear-A6210

Speed is good, but there's random short timeouts, but it's usable, I have used this driver daily for 2 months now. My speeds are 60-70Mbs down and 12Mbs up (My internet connection is 100/10 vdsl, and can get max 80Mbs down with wired)

Edit: oh, this was mentioned behind previous post's link  :Smile: 

----------

