* RFC: Proposed modularization of ath12k
@ 2025-04-16 15:15 Jeff Johnson
2025-04-16 19:08 ` Sebastian Gottschall
0 siblings, 1 reply; 2+ messages in thread
From: Jeff Johnson @ 2025-04-16 15:15 UTC (permalink / raw)
To: ath12k@lists.infradead.org, linux-wireless
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
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: RFC: Proposed modularization of ath12k
2025-04-16 15:15 RFC: Proposed modularization of ath12k Jeff Johnson
@ 2025-04-16 19:08 ` Sebastian Gottschall
0 siblings, 0 replies; 2+ messages in thread
From: Sebastian Gottschall @ 2025-04-16 19:08 UTC (permalink / raw)
To: Jeff Johnson, ath12k@lists.infradead.org, linux-wireless
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
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-04-16 19:08 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-16 15:15 RFC: Proposed modularization of ath12k Jeff Johnson
2025-04-16 19:08 ` Sebastian Gottschall
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox