On 8/13/2025 1:09 AM, Kiran Venkatappa wrote: > Current ath drivers have separate implementations for different > classes of devices. For example, ath11k supports WiFi-6 devices, > while ath12k supports Wi-Fi 7 devices. However, there is significant > common functionality across these generations due to shared firmware > and hardware architecture. In the existing driver code, this leverage > is achieved through code duplication. As a result, when a new driver > is introduced, many features are missed, and new additions require > porting across different generation drivers. > > To improve reuse and maintainability, ath12k should be split into common > and device-specific modules. Common code can be shared across multiple > architectures, enabling better leverage for future hardware generations. > generation drivers. > > Firmware interfaces and core initialization sequences are typically common > across different device families. In contrast, hardware register offsets, copy > engine mappings, and HAL configurations are usually hardware-specific. > > Common components include: > - mac80211 interface: Control path operations are mostly common across > different ATH hardware and will be shared as much as possible. > - Firmware interface (WMI, HTT, HTC, QMI): Firmware messaging and > sequences are common and maintained with backward/forward compatibility > using TLVs. > - Datapath: Data path files are also separated similarly. More information > will be provided in later patches. > - Core initialization, reset, and recovery sequences: These will be part > of the shared code. > > Device-specific code includes: > - Hardware capabilities, configurations, HAL, and other > architecture-specific logic. > > The original ath12k.ko is split into these two modules as depicted below. > > +-----------------+ > | | > | ath12k.ko | > | (common) | > +---------------+ | | > | | +-----------------+ > | ath12k.ko | ===========> > | | +------------------+ > +---------------+ | | > | ath12k_wifi7.ko | > | (wifi7 family) | > | | > +------------------+ > > The ath12k.ko module will serve as the common component, while ath12k_wifi7.ko > will be the architecture-specific module for WiFi-7 devices. > > After this modular separation, adding support for a new device will > primarily involve implementing device-specific code, while reusing the > majority of the shared common components. > > --- > Kiran Venkatappa (13): > wifi: ath12k: Restructure PCI code to common and Wi-Fi 7 specific logic > wifi: ath12k: Move Copy Engine configuration to Wi-Fi 7 specific file > wifi: ath12k: Move Wi-Fi 7 WMI configuration to dedicated file > wifi: ath12k: Move Wi-Fi 7 MHI configuration to dedicated file > wifi: ath12k: Rename hw.c to Wi-Fi 7 specific implementation file > wifi: ath12k: Rename ahb_hif_ops to reflect generic usage > wifi: ath12k: Restructure ahb.c into common and Wi-Fi 7 specific modules > wifi: ath12k: Move Wi-Fi 7 specific init routines to dedicated file > wifi: ath12k: Move hw_init invocation to target-specific probe > wifi: ath12k: Modularize driver into common and Wi-Fi 7 specific components > wifi: ath12k: Rename ath12k_* symbols to ath12k_wifi7_* for clarity > wifi: ath12k: Remove HAL defines from shared PCI code > wifi: ath12k: Remove HAL define dependencies from shared AHB code > > drivers/net/wireless/ath/ath12k/Makefile | 4 +- > drivers/net/wireless/ath/ath12k/ahb.c | 139 ++-- > drivers/net/wireless/ath/ath12k/ahb.h | 27 +- > drivers/net/wireless/ath/ath12k/ce.c | 301 ------- > drivers/net/wireless/ath/ath12k/ce.h | 5 +- > drivers/net/wireless/ath/ath12k/core.c | 38 +- > drivers/net/wireless/ath/ath12k/core.h | 7 + > drivers/net/wireless/ath/ath12k/debug.c | 4 + > drivers/net/wireless/ath/ath12k/dp_rx.c | 3 + > drivers/net/wireless/ath/ath12k/hal.c | 4 + > drivers/net/wireless/ath/ath12k/htc.c | 2 + > drivers/net/wireless/ath/ath12k/hw.h | 2 - > drivers/net/wireless/ath/ath12k/mhi.c | 130 --- > drivers/net/wireless/ath/ath12k/mhi.h | 4 +- > drivers/net/wireless/ath/ath12k/pci.c | 215 ++--- > drivers/net/wireless/ath/ath12k/pci.h | 28 +- > drivers/net/wireless/ath/ath12k/peer.c | 2 + > drivers/net/wireless/ath/ath12k/wifi7/Makefile | 10 + > drivers/net/wireless/ath/ath12k/wifi7/ahb.c | 71 ++ > drivers/net/wireless/ath/ath12k/wifi7/ahb.h | 20 + > drivers/net/wireless/ath/ath12k/wifi7/ce.c | 973 +++++++++++++++++++++++ > drivers/net/wireless/ath/ath12k/wifi7/ce.h | 22 + > drivers/net/wireless/ath/ath12k/wifi7/core.c | 44 + > drivers/net/wireless/ath/ath12k/{ => wifi7}/hw.c | 798 +++---------------- > drivers/net/wireless/ath/ath12k/wifi7/hw.h | 13 + > drivers/net/wireless/ath/ath12k/wifi7/mhi.c | 138 ++++ > drivers/net/wireless/ath/ath12k/wifi7/mhi.h | 11 + > drivers/net/wireless/ath/ath12k/wifi7/pci.c | 188 +++++ > drivers/net/wireless/ath/ath12k/wifi7/pci.h | 12 + > drivers/net/wireless/ath/ath12k/wifi7/wmi.c | 105 +++ > drivers/net/wireless/ath/ath12k/wifi7/wmi.h | 15 + > drivers/net/wireless/ath/ath12k/wmi.c | 97 --- > drivers/net/wireless/ath/ath12k/wmi.h | 4 - > 33 files changed, 1956 insertions(+), 1480 deletions(-) > --- > base-commit: d9104cec3e8fe4b458b74709853231385779001f > change-id: 20250812-ath12k-mod-bd00156df202 > Reviewed-by: Baochen Qiang <baochen.qiang@xxxxxxxxxxxxxxxx>>