Support for Lantiq WAVE300 Driver (from scratch)

Existing development:
Hi, after a long search of a couple years OpenWrt had a somewhat usable driver for WAVE300 made to work by some people mainly @Mandrake-Lee and @pc2005 in this topic. All of us made some progress towards the development of the driver and right now with the code available at this post the driver may work for you if you have some Debugging symbols loaded within kernel along with some specific driver related files that the driver asks for at the time of loading.

With this driver the wifi chip gets available to use in LuCI (was available for me) and you can assign it to wifi and use internet and it can also assign IP address from DHCP range if attached to LAN network. But there is no security, nothing at all, just an open network. You can find more details in the original topic above.

"The" Driver:
The driver made by Lantiq is based on v2.6 of Linux Kernel and has many bugs, some may not be fixable because of the driver needing some specific files which are probably Proprietary and thus has no code available to the public. As it turns out some of the code available in the driver was also proprietary at some point before the current version so there may be some ambiguity as to how much of it is usable but I am not a lawyer so I dont know.

The chip WAVE300 comes with a small number of Wifi routers including but not limited to TpLink W8980v1, HomeHub v4 etc. It also comes in 2.4 and 5 GHz models requiring probably the same driver.

New Driver:
As the OpenWrt community strives for free and open source softwares and their use, it is inevitable that the devices be supported with such a modular-driver that can be loaded in kernel during runtime an should support the WAVE300 chipset models. With the help of @pc2005 I have directed my efforts to create a driver module which can support at least a subset of these chips and maybe more in future but for now I have added two devices named PSB8224 and PSB8231 within the driver.

The driver is not even close to being functional at this stage, I mean it can only identify the chipset and the vendor and tries to allocate some resources, like IRQ and maybe some RAM but I am not sure.

TpLink W8980v1 running v18.06.4
# after insmod
[  318.436396] WAVE300 Module initializing...                                                       
[  318.439200] Device probed.                                                                       
[  318.442223] Device has been identified as:                                                       
[  318.442223] Vendor(1a30), Device(700), Class(d8000),                                             
[  318.442223] Power-State(0),  PM-Capability-Offset(0),                                            
[  318.442223] D1-Support(0), D2-Support(0),                                                        
[  318.442223] Clear-Retrain-Link(0),   D3-D0-Transition-Time(0),                                   
[  318.442223] Configuration-Space-Size(100), IRQ(1e)                                               
[  318.470852] wave300_driver 0000:00:0e.0: cache line size of 32 is not supported                  
[  318.478125] Memory-Write-Invalidate not possible for WAVE300.                                    
[  318.483798] Aquired memory regions for WAVE300.                                                  
[  318.488591] 64bit mask set for WAVE300.                                                          
[  318.492108] IRQ registered for WAVE300.
IRQ
root@TPLinkW8980:/# cat /proc/interrupts                                                            
 ...
 22:     121471          0       icu  22  spi_rx                                                    
 23:      18809          0       icu  23  spi_tx                                                    
 24:          0          0       icu  24  spi_err                                                   
 30:          0          0       icu  30  wave300                                                   
 62:          0          0       icu  62  1e101000.ifxhcd, dwc2_hsotg:usb1                          
 63:      17340          0       icu  63  mei_cpe                                                   
 72:          0          0       icu  72  vrx200_rx                                                 
 73:          0          0       icu  73  vrx200_tx                                                 
 75:          0          0       icu  75  vrx200_tx_2                                               
 ...

I must say I am not a C programmer and know very little about Linux programming. I understand developers working with OpenWrt may not have time to tackle a Wifi driver along with other developmental work at hand but it will help a lot in achieving the objectives if people can contribute a little of their precious time to this small project.

Resources:
I had to look for some guidelines on how would I go to develop a driver in first place because I had no idea where to start. So I asked @pc2005 and he helped as much as he could and he also suggested to open a topic to ask for some help from the community. After a lot of search on the internet I found LDD3 - Linux Device Drivers 3rd Edition by O'Rielly and also PCI Drivers. I am not sure if I am going in the right direction but I am trying my best to get to it.

To track the progress I created the Github repository for the module: https://github.com/ahmar20/wave300-dev

Thank you for considering.

5 Likes

I try them to make my own feed and build them with the current master, but it ends up with:

CC [M]  /opt/build/sdk-vgv953/build_dir/target-mips_24kc_musl/linux-lantiq_xrx200/wave300-2019.09.13.2280f48/wave300_driver.o
/opt/build/sdk-vgv953/build_dir/target-mips_24kc_musl/linux-lantiq_xrx200/wave300-2019.09.13.2280f48/wave300_driver.c:13:10: fatal error: drv_shared.h: No such file or directory
 #include <drv_shared.h>
          ^~~~~~~~~~~~~~

Where is the drv_shared.h ?

I'm not developing the firmware on my own. It's beyond my knowledge and capabilities so I'm sorry I cannot help you on this.

It is planned to add into OpenWrt?

No one' can answer that because there's not really an out-of-the-box working driver available at the moment. Some people are trying to create it but no one can promise anything so for now it's a NO.