return rtw89_fw_h2c_alloc_skb(rtwdev, len, false);
 }
 
-static u8 _fw_get_rdy(struct rtw89_dev *rtwdev)
-{
-       u8 val = rtw89_read8(rtwdev, R_AX_WCPU_FW_CTRL);
-
-       return FIELD_GET(B_AX_WCPU_FWDL_STS_MASK, val);
-}
-
 int rtw89_fw_check_rdy(struct rtw89_dev *rtwdev)
 {
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        u8 val;
        int ret;
 
-       ret = read_poll_timeout_atomic(_fw_get_rdy, val,
+       ret = read_poll_timeout_atomic(mac->fwdl_get_status, val,
                                       val == RTW89_FWDL_WCPU_FW_INIT_RDY,
                                       1, FWDL_WAIT_CNT, false, rtwdev);
        if (ret) {
                        return -EINVAL;
 
                default:
+                       rtw89_err(rtwdev, "fw unexpected status %d\n", val);
                        return -EBUSY;
                }
        }
 
 static int rtw89_fw_download_hdr(struct rtw89_dev *rtwdev, const u8 *fw, u32 len)
 {
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        int ret;
 
        ret = __rtw89_fw_download_hdr(rtwdev, fw, len);
                return ret;
        }
 
-       ret = rtw89_fwdl_check_path_ready_ax(rtwdev, false);
+       ret = mac->fwdl_check_path_ready(rtwdev, false);
        if (ret) {
                rtw89_err(rtwdev, "[ERR]FWDL path ready\n");
                return ret;
 
 int rtw89_fw_download(struct rtw89_dev *rtwdev, enum rtw89_fw_type type)
 {
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        struct rtw89_fw_info *fw_info = &rtwdev->fw;
        struct rtw89_fw_suit *fw_suit = rtw89_fw_suit_get(rtwdev, type);
        struct rtw89_fw_bin_info info;
        int ret;
 
-       rtw89_mac_disable_cpu(rtwdev);
-       ret = rtw89_mac_enable_cpu(rtwdev, 0, true);
+       mac->disable_cpu(rtwdev);
+       ret = mac->fwdl_enable_wcpu(rtwdev, 0, true);
        if (ret)
                return ret;
 
                goto fwdl_err;
        }
 
-       ret = rtw89_fwdl_check_path_ready_ax(rtwdev, true);
+       ret = mac->fwdl_check_path_ready(rtwdev, true);
        if (ret) {
                rtw89_err(rtwdev, "[ERR]H2C path ready\n");
                goto fwdl_err;
 
        rtw89_mac_mem_write(rtwdev, R_AX_WDT_STATUS, val32, RTW89_MAC_MEM_CPU_LOCAL);
 }
 
-void rtw89_mac_disable_cpu(struct rtw89_dev *rtwdev)
+static void rtw89_mac_disable_cpu_ax(struct rtw89_dev *rtwdev)
 {
        clear_bit(RTW89_FLAG_FW_RDY, rtwdev->flags);
 
        rtw89_write32_set(rtwdev, R_AX_PLATFORM_ENABLE, B_AX_PLATFORM_EN);
 }
 
-int rtw89_mac_enable_cpu(struct rtw89_dev *rtwdev, u8 boot_reason, bool dlfw)
+static int rtw89_mac_enable_cpu_ax(struct rtw89_dev *rtwdev, u8 boot_reason, bool dlfw)
 {
        u32 val;
        int ret;
        return ret;
 }
 
+static u8 rtw89_fw_get_rdy_ax(struct rtw89_dev *rtwdev)
+{
+       u8 val = rtw89_read8(rtwdev, R_AX_WCPU_FW_CTRL);
+
+       return FIELD_GET(B_AX_WCPU_FWDL_STS_MASK, val);
+}
+
+static
 int rtw89_fwdl_check_path_ready_ax(struct rtw89_dev *rtwdev,
                                   bool h2c_or_fwdl)
 {
        .indir_access_addr = R_AX_INDIR_ACCESS_ENTRY,
        .mem_base_addrs = rtw89_mac_mem_base_addrs_ax,
        .rx_fltr = R_AX_RX_FLTR_OPT,
+
+       .disable_cpu = rtw89_mac_disable_cpu_ax,
+       .fwdl_enable_wcpu = rtw89_mac_enable_cpu_ax,
+       .fwdl_get_status = rtw89_fw_get_rdy_ax,
+       .fwdl_check_path_ready = rtw89_fwdl_check_path_ready_ax,
 };
 EXPORT_SYMBOL(rtw89_mac_gen_ax);
 
        u32 indir_access_addr;
        const u32 *mem_base_addrs;
        u32 rx_fltr;
+
+       void (*disable_cpu)(struct rtw89_dev *rtwdev);
+       int (*fwdl_enable_wcpu)(struct rtw89_dev *rtwdev, u8 boot_reason, bool dlfw);
+       u8 (*fwdl_get_status)(struct rtw89_dev *rtwdev);
+       int (*fwdl_check_path_ready)(struct rtw89_dev *rtwdev, bool h2c_or_fwdl);
 };
 
 extern const struct rtw89_mac_gen_def rtw89_mac_gen_ax;
                                        struct ieee80211_vif *vif);
 void rtw89_mac_stop_ap(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif);
 int rtw89_mac_remove_vif(struct rtw89_dev *rtwdev, struct rtw89_vif *vif);
-void rtw89_mac_disable_cpu(struct rtw89_dev *rtwdev);
-int rtw89_mac_enable_cpu(struct rtw89_dev *rtwdev, u8 boot_reason, bool dlfw);
 int rtw89_mac_enable_bb_rf(struct rtw89_dev *rtwdev);
 int rtw89_mac_disable_bb_rf(struct rtw89_dev *rtwdev);
 
 int rtw89_mac_ptk_drop_by_band_and_wait(struct rtw89_dev *rtwdev,
                                        enum rtw89_mac_idx band);
 void rtw89_mac_hw_mgnt_sec(struct rtw89_dev *rtwdev, bool wow);
-int rtw89_fwdl_check_path_ready_ax(struct rtw89_dev *rtwdev,
-                                  bool h2c_or_fwdl);
 
 #endif