Support mainline Broadcom wireless driver on an Android platform


 * Summary: Support mainline Broadcom wireless driver on an Android platform
 * Proposer: Tim Bird
 * Status: Soliciting bids

Description
There is a driver in mainline for the Broadcom family of chipsets for wireless network communications. As of version 4.1 of the Linux kernel, this driver resides in the directory drivers/net/wireless/brcm80211 (and sub-directories). However, current mobile devices that use Broadcom chipsets are using an out-of-tree driver.

This project would consist of using the current mainline driver with existing or new Android-based mobile hardware, and 1) verifying that the stack works as needed to support common Android networking functions 2) fixing problems that are found during verification.

The target hardware for this should be a mobile device (phone or tablet) or a development board targeted at this market, which includes a current broadcom wireless networking chipset. Priority will be given to a device actually in production as an end-user device (such as a Nexus device). The user space for the device may be AOSP or a vendor or carrier version of the Android stack.

This task may involve backporting the wireless driver to a version of the kernel supported by the current generation of mobile devices running Android (either 3.14 or 3.18).

The goal of this project is to make available to mobile device vendors the mainline version of the broadcom wireless driver, so that they can begin to incorporate it into their products. It is likely that bugs and missing features in the mainline driver will prevent its use in actual products, but the availability of a version of the driver for mobile hardware will mean that vendors and 3rd parties (interested users and community members) can begin resolving issues with the mainline driver.

Note that the out-of-tree broadcom driver is available as a GPL reference for this work.

The end goal of this work is to make the mainline broadcom driver the preferred driver for use in mobile device products, when broadcom wireless chipsets are used. This should eliminate the need for broadcom's out-of-tree driver and reduce the overall delta between mobile device shipping code and mainline. An approximate reduction of about 150K is expected.

Related work

 * A typical source tree (for kernel version 3.4) that includes the out-of-tree broadcom driver is at:
 * https://github.com/sonyxperiadev/kernel-copyleft (branch 23.1.A.1.XXX), directory drivers/net/wireless/bcmdhd
 * NOTE that this is quite an old version of the driver (3 years old in 2015)
 * Linux driver backporting project
 * See http://drvbp1.linux-foundation.org/~mcgrof/rel-html/backports/
 * and https://backports.wiki.kernel.org/index.php/Main_Page
 * For some background, see the rather long and detail post at: http://www.do-not-panic.com/2014/04/automatic-linux-kernel-backporting-with-coccinelle.html
 * Sony did some testing of a backported driver for their phones, in May/June of 2015
 * see Sony Xperia Wireless backport test

Scope
unknown

Just for consideration, here is a diffinfo of the brcm80211 driver between kernel version 3.14 and 4.1: drivers/net/wireless/brcm80211/Kconfig                            |   20+     0- (2 hunks) drivers/net/wireless/brcm80211/brcmfmac/Makefile                  |   21+    10- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/bcdc.c                    |   23+     3- (3 hunks) drivers/net/wireless/brcm80211/brcmfmac/bcdc.h                    |    5+     2- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/bcmsdh.c                  |  277+   109- (29 hunks) drivers/net/wireless/brcm80211/brcmfmac/btcoex.c                  |   22+    22- (13 hunks) drivers/net/wireless/brcm80211/brcmfmac/bus.h                     N  227+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c                N 6163+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/cfg80211.h                N  504+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/chip.c                    N 1220+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/chip.h                    N   93+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/common.c                  N  198+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/common.h                  N   20+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/commonring.c              N  273+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/commonring.h              N   71+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/core.c                    N 1213+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/core.h                    N  217+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/debug.c                   N  117+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/debug.h                   N  137+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/dhd.h                     |    1+   195- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/dhd_bus.h                 |    1+   205- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/dhd_common.c              |    1+   375- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.c                 |    1+   245- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/dhd_dbg.h                 |    1+   196- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/dhd_linux.c               |    1+  1128- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c                |    0+  4097- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/feature.c                 N  157+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/feature.h                 N   88+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/firmware.c                N  340+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/firmware.h                N   41+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/flowring.c                N  499+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/flowring.h                N   84+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/fweh.c                    |   17+     9- (4 hunks) drivers/net/wireless/brcm80211/brcmfmac/fweh.h                    |    7+     0- (3 hunks) drivers/net/wireless/brcm80211/brcmfmac/fwil.c                    |   91+    18- (13 hunks) drivers/net/wireless/brcm80211/brcmfmac/fwil.h                    |    6+     1- (3 hunks) drivers/net/wireless/brcm80211/brcmfmac/fwil_types.h              |  186+     0- (5 hunks) drivers/net/wireless/brcm80211/brcmfmac/fwsignal.c                |  147+    43- (15 hunks) drivers/net/wireless/brcm80211/brcmfmac/msgbuf.c                  N 1510+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/msgbuf.h                  N   48+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/nvram.c                   |    1+    94- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/nvram.h                   |    0+    24- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/of.c                      N   56+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/of.h                      N   22+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/p2p.c                     |   16+    15- (12 hunks) drivers/net/wireless/brcm80211/brcmfmac/p2p.h                     |    1+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/pcie.c                    N 1891+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/pcie.h                    N   29+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/proto.c                   |   26+     7- (2 hunks) drivers/net/wireless/brcm80211/brcmfmac/proto.h                   |   30+     1- (3 hunks) drivers/net/wireless/brcm80211/brcmfmac/sdio.c                    N 4327+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/sdio.h                    N  378+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.c               |    1+   972- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/sdio_chip.h               |    1+   231- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/sdio_host.h               |    0+   243- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/tracepoint.c              |   15+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/usb.c                     |  311+   348- (35 hunks) drivers/net/wireless/brcm80211/brcmfmac/usb_rdl.h                 |    0+    75- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/vendor.c                  N  127+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/vendor.h                  N   65+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.c             |    1+  5521- (1 hunk) drivers/net/wireless/brcm80211/brcmfmac/wl_cfg80211.h             |    0+   510- (1 hunk) drivers/net/wireless/brcm80211/brcmsmac/brcms_trace_brcmsmac.h    N  102+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmsmac/brcms_trace_brcmsmac_msg.h N  88+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmsmac/brcms_trace_brcmsmac_tx.h N  110+     0- (1 hunk) drivers/net/wireless/brcm80211/brcmsmac/brcms_trace_events.h      |    5+   220- (2 hunks) drivers/net/wireless/brcm80211/brcmsmac/debug.c                   |  147+    33- (2 hunks) drivers/net/wireless/brcm80211/brcmsmac/dma.c                     |   19+    19- (19 hunks) drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c             |   14+    18- (7 hunks) drivers/net/wireless/brcm80211/brcmsmac/main.c                    |   24+    67- (14 hunks) drivers/net/wireless/brcm80211/brcmsmac/phy/phy_cmn.c             |   63+    67- (46 hunks) drivers/net/wireless/brcm80211/brcmsmac/phy/phy_lcn.c             |    4+     4- (4 hunks) drivers/net/wireless/brcm80211/brcmsmac/phy/phy_n.c               |    6+    14- (7 hunks) drivers/net/wireless/brcm80211/brcmutil/d11.c                     |   76+    17- (5 hunks) drivers/net/wireless/brcm80211/brcmutil/utils.c                   |   44+     0- (2 hunks) drivers/net/wireless/brcm80211/include/brcm_hw_ids.h              |   47+    17- (1 hunk) drivers/net/wireless/brcm80211/include/brcmu_d11.h                |    7+     7- (2 hunks) drivers/net/wireless/brcm80211/include/brcmu_utils.h              |    6+     0- (1 hunk) drivers/net/wireless/brcm80211/include/brcmu_wifi.h               |    4+     0- (2 hunks) drivers/net/wireless/brcm80211/include/chipcommon.h               |    8+     1- (1 hunk) drivers/net/wireless/brcm80211/include/defs.h                     |    1+     4- (2 hunks) 81 files changed, 22121 insertions(+), 15187 deletions(-), 310 hunks

Contractor Candidates
unknown