RFC: Proposed modularization of ath12k
Sebastian Gottschall
s.gottschall at dd-wrt.com
Wed Apr 16 12:08:09 PDT 2025
why not do it for all the drivers. ath10k, 11k and 12k. alot of code can
be shared.
Am 16.04.2025 um 17:15 schrieb Jeff Johnson:
> BACKGROUND
>
> Historically, for each generation of Qualcomm Atheros Wi-Fi chipset, there has
> been a separate driver, the most recent being ath10k for 802.11ac (Wi-Fi 5),
> ath11k for 802.11ax (Wi-Fi 6/6E), and ath12k for 802.11be (Wi-Fi 7). But there
> is common functionality and code across these drivers due to firmware and
> hardware architecture leverage across generations.
>
> In the existing development model, code leverage is achieved via code
> duplication. When a new driver is created from the prior driver, it is first
> stripped down to basic features to allow for easier public review, and then,
> over time, features are added back to bring the new driver up to parity with
> the previous generation driver. So there is a period where existing
> functionality in the previous driver is not present in the new driver. In
> addition, introduction of new functionality requires porting across the
> different generations of drivers.
>
> We are now looking ahead at how to support 802.11bn (Wi-Fi 8). And within
> Qualcomm there is consensus that the old way is not the best way forward.
> Therefore we are seeking feedback on the following.
>
> PROPOSAL
>
> For better leverage, refactor ath12k into common and generation-specific
> modules. The common module will contain the logic that is shared across
> multiple architectures, and the generation-specific modules will contain the
> logic that is specific for that generation (and specific to the chipsets
> supporting that generation). Hence there will be one driver that supports
> Wi-Fi 7, Wi-Fi 8, and hopefully all future generations of Wi-Fi. Previous
> drivers (ath11k, ath10k, etc) are unchanged.
>
> Firmware interface, core initialization and de-initialization sequences are
> usually common across different device families. Hardware register
> definitions, Copy engine mappings, MHI config, WMI resource config and
> hardware abstractions are usually generation-specific.
>
> Common components includes following
> mac80211 interface: Control path ops are mostly common across different
> generations. Handlers will be shared as much as possible.
>
> Firmware interface (WMI, HTT, HTC, QMI): Firmware interfacing messages
> and sequence is common and kept backward/forward compatible using TLVs.
>
> Common Datapath flow: Buffer replenish, Processing of RAW packets,
> delivering frames to mac80211 and similar common path not dependent on
> hardware TLVs and registers.
>
> core init sequences, reset sequence & recovery sequence in shared code.
>
> Generation specific code includes.
> Some mac80211 handlers that are very close to device like tx will be
> moved to generation specific components.
>
> Hardware configs: Hardware capabilities, configs, MHI configuration, WMI
> resource configuration, HAL and other architecture specific code.
>
> Data path flow: specific to hardware and TLV integrations like,
> processing of RX and TX flow that involves hardware register and TLV
> interactions.
>
> It is proposed that ath12k.ko will be the common module. It is proposed that
> ath12k_wifi7.ko will be the generation-specific module for Wi-Fi 7 devices.
>
> The current ath12k.ko will be refactored as depicted below.
>
> +-----------------+
> | |
> | ath12k.ko |
> | (common) |
> +---------------+ | |
> | | +-----------------+
> | ath12k.ko | ===========>
> | | +------------------+
> +---------------+ | |
> | ath12k_wifi7.ko |
> | (wifi7 family) |
> | |
> +------------------+
>
> Going forward, wifi8 can be added as a new module including all device
> specific code and new common functionalities will be added in common ath12k.ko
> that can be leveraged. It will look something like below
>
> +-----------------+
> | |
> | ath12k.ko |
> | (common) |
> | |
> +-----------------+
>
> +------------------+ +------------------+
> | | | |
> | ath12k_wifi7.ko | | ath12k_wifi8.ko |
> | (wifi7 family) | | (wifi8 family) |
> | | | |
> +------------------+ +------------------+
>
>
> Proposed directory structure
> Existing New
> . .
> ├── acpi.c ├── acpi.c
> ├── acpi.h ├── acpi.h
> ├── ce.c ├── ce.c
> ├── ce.h ├── ce.h
> ├── core.c ├── core.c
> ├── coredump.c ├── coredump.c
> ├── coredump.h ├── coredump.h
> ├── core.h ├── core.h
> ├── dbring.c ├── dbring.c
> ├── dbring.h ├── dbring.h
> ├── debug.c ├── debug.c
> ├── debugfs.c ├── debugfs.c
> ├── debugfs.h ├── debugfs.h
> ├── debugfs_htt_stats.c ├── debugfs_htt_stats.c
> ├── debugfs_htt_stats.h ├── debugfs_htt_stats.h
> ├── debugfs_sta.c ├── debugfs_sta.c
> ├── debugfs_sta.h ├── debugfs_sta.h
> ├── debug.h ├── debug.h
> ├── dp.c ├── dp.c
> ├── dp.h ├── dp_cmn.h
> ├── dp_mon.c ├── dp.h
> ├── dp_mon.h ├── dp_htt.c
> ├── dp_rx.c ├── dp_htt.h
> ├── dp_rx.h ├── dp_mon.c
> ├── dp_tx.c ├── dp_mon.h
> ├── dp_tx.h ├── dp_peer.c
> ├── fw.c ├── dp_peer.h
> ├── fw.h ├── dp_rx.c
> ├── hal.c ├── dp_rx.h
> ├── hal_desc.h ├── dp_tx.c
> ├── hal.h ├── dp_tx.h
> ├── hal_rx.c ├── fw.c
> ├── hal_rx.h ├── fw.h
> ├── hal_tx.c ├── hal.c
> ├── hal_tx.h ├── hal.h
> ├── hif.h ├── hif.h
> ├── htc.c ├── htc.c
> ├── htc.h ├── htc.h
> ├── hw.c ├── hw.h
> ├── hw.h ├── Kconfig
> ├── Kconfig ├── mac.c
> ├── mac.c ├── mac.h
> ├── mac.h ├── Makefile
> ├── Makefile ├── mhi.c
> ├── mhi.c ├── mhi.h
> ├── mhi.h ├── p2p.c
> ├── p2p.c ├── p2p.h
> ├── p2p.h ├── pci.c
> ├── pci.c ├── pci.h
> ├── pci.h ├── peer.c
> ├── peer.c ├── peer.h
> ├── peer.h ├── qmi.c
> ├── qmi.c ├── qmi.h
> ├── qmi.h ├── reg.c
> ├── reg.c ├── reg.h
> ├── reg.h ├── testmode.c
> ├── rx_desc.h ├── testmode.h
> ├── testmode.c ├── trace.c
> ├── testmode.h ├── trace.h
> ├── trace.c ├── wmi.c
> ├── trace.h ├── wmi.h
> ├── wmi.c ├── wow.c
> ├── wmi.h ├── wow.h
> ├── wow.c +── wifi7
> +── wow.h ├── dp.c
> ├── dp.h
> ├── dp_rx.c
> ├── dp_rx.h
> ├── dp_tx.c
> ├── dp_tx.h
> ├── hal.c
> ├── hal_desc.h
> ├── hal.h
> ├── hal_qcn9274.c
> ├── hal_qcn9274.h
> ├── hal_rx.c
> ├── hal_rx_desc.h
> ├── hal_rx.h
> ├── hal_tx.c
> ├── hal_tx.h
> ├── hal_wcn7850.c
> ├── hal_wcn7850.h
> ├── hw.c
> ├── hw.h
> ├── Makefile
> ├── mhi.c
> ├── pci.c
> ├── wmi.c
> └── wmi.h
>
> A proof-of-concept is already being developed in parallel with the current
> ath12k development in the ath12k-ng (Next Generation) branch in our public
> ath.git. In order to not interfere with the review of current ath12k
> development, we will not be posting ath12k-ng patches on the mailing lists.
> However, it will be easy to tell when new patches have been pushed to the
> branch since the Intel 0-DAY CI Kernel Test Service will run on this branch
> and publish the test result to the ath12k list.
>
> Public branch:
> https://web.git.kernel.org/pub/scm/linux/kernel/git/ath/ath.git/log/?h=ath12k-ng
>
> First Intel 0-DAY build result:
> https://lore.kernel.org/all/202503300031.2IK6j4IS-lkp@intel.com/
>
> Public comment on this proposal are welcomed.
>
> /jeff
>
>
More information about the ath12k
mailing list