]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: coex: Reorder H2C command index to align with firmware
authorChing-Te Ku <ku920601@realtek.com>
Thu, 29 Feb 2024 07:45:11 +0000 (15:45 +0800)
committerKalle Valo <kvalo@kernel.org>
Tue, 5 Mar 2024 18:54:46 +0000 (20:54 +0200)
Wi-Fi firmware need some driver information to do decision or do some
real-time control. Driver will update these information by H2C command.
The chip 8922a H2C command index is different from before chips/branch,
so need to assign the correct index to let firmware parsing.

Signed-off-by: Ching-Te Ku <ku920601@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/20240229074514.219276-6-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/coex.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/fw.h

index ee658d3bea784c627716032e97733b3d0d6a0308..c270d0c26c000d1700144cea172b3817c8bbcf25 100644 (file)
@@ -134,70 +134,70 @@ static const struct rtw89_btc_ver rtw89_btc_ver_defs[] = {
         .fcxstep = 7,   .fcxnullsta = 7, .fcxmreg = 7,  .fcxgpiodbg = 7,
         .fcxbtver = 7,  .fcxbtscan = 7,  .fcxbtafh = 7, .fcxbtdevinfo = 7,
         .fwlrole = 2,   .frptmap = 7,    .fcxctrl = 7,  .fcxinit = 7,
-        .info_buf = 1800, .max_role_num = 6,
+        .drvinfo_type = 1, .info_buf = 1800, .max_role_num = 6,
        },
        {RTL8851B, RTW89_FW_VER_CODE(0, 29, 29, 0),
         .fcxbtcrpt = 105, .fcxtdma = 3,    .fcxslots = 1, .fcxcysta = 5,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 2,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 2,  .fcxbtafh = 2, .fcxbtdevinfo = 1,
         .fwlrole = 2,   .frptmap = 3,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1800, .max_role_num = 6,
+        .drvinfo_type = 0, .info_buf = 1800, .max_role_num = 6,
        },
        {RTL8852C, RTW89_FW_VER_CODE(0, 27, 57, 0),
         .fcxbtcrpt = 4, .fcxtdma = 3,    .fcxslots = 1, .fcxcysta = 3,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 2, .fcxbtdevinfo = 1,
         .fwlrole = 1,   .frptmap = 3,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1280, .max_role_num = 5,
+        .drvinfo_type = 0, .info_buf = 1280, .max_role_num = 5,
        },
        {RTL8852C, RTW89_FW_VER_CODE(0, 27, 42, 0),
         .fcxbtcrpt = 4, .fcxtdma = 3,    .fcxslots = 1, .fcxcysta = 3,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 2, .fcxbtdevinfo = 1,
         .fwlrole = 1,   .frptmap = 2,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1280, .max_role_num = 5,
+        .drvinfo_type = 0, .info_buf = 1280, .max_role_num = 5,
        },
        {RTL8852C, RTW89_FW_VER_CODE(0, 27, 0, 0),
         .fcxbtcrpt = 4, .fcxtdma = 3,    .fcxslots = 1, .fcxcysta = 3,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 1, .fcxbtdevinfo = 1,
         .fwlrole = 1,   .frptmap = 2,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1280, .max_role_num = 5,
+        .drvinfo_type = 0, .info_buf = 1280, .max_role_num = 5,
        },
        {RTL8852B, RTW89_FW_VER_CODE(0, 29, 29, 0),
         .fcxbtcrpt = 105, .fcxtdma = 3,  .fcxslots = 1, .fcxcysta = 5,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 2,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 2,  .fcxbtafh = 2, .fcxbtdevinfo = 1,
         .fwlrole = 2,   .frptmap = 3,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1800, .max_role_num = 6,
+        .drvinfo_type = 0, .info_buf = 1800, .max_role_num = 6,
        },
        {RTL8852B, RTW89_FW_VER_CODE(0, 29, 14, 0),
         .fcxbtcrpt = 5, .fcxtdma = 3,    .fcxslots = 1, .fcxcysta = 4,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 2, .fcxbtdevinfo = 1,
         .fwlrole = 1,   .frptmap = 3,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1800, .max_role_num = 6,
+        .drvinfo_type = 0, .info_buf = 1800, .max_role_num = 6,
        },
        {RTL8852B, RTW89_FW_VER_CODE(0, 27, 0, 0),
         .fcxbtcrpt = 4, .fcxtdma = 3,    .fcxslots = 1, .fcxcysta = 3,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 1, .fcxbtdevinfo = 1,
         .fwlrole = 1,   .frptmap = 1,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1280, .max_role_num = 5,
+        .drvinfo_type = 0, .info_buf = 1280, .max_role_num = 5,
        },
        {RTL8852A, RTW89_FW_VER_CODE(0, 13, 37, 0),
         .fcxbtcrpt = 4, .fcxtdma = 3,    .fcxslots = 1, .fcxcysta = 3,
         .fcxstep = 3,   .fcxnullsta = 2, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 2, .fcxbtdevinfo = 1,
         .fwlrole = 1,   .frptmap = 3,    .fcxctrl = 1,  .fcxinit = 0,
-        .info_buf = 1280, .max_role_num = 5,
+        .drvinfo_type = 0, .info_buf = 1280, .max_role_num = 5,
        },
        {RTL8852A, RTW89_FW_VER_CODE(0, 13, 0, 0),
         .fcxbtcrpt = 1, .fcxtdma = 1,    .fcxslots = 1, .fcxcysta = 2,
         .fcxstep = 2,   .fcxnullsta = 1, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 1, .fcxbtdevinfo = 1,
         .fwlrole = 0,   .frptmap = 0,    .fcxctrl = 0,  .fcxinit = 0,
-        .info_buf = 1024, .max_role_num = 5,
+        .drvinfo_type = 0, .info_buf = 1024, .max_role_num = 5,
        },
 
        /* keep it to be the last as default entry */
@@ -206,7 +206,7 @@ static const struct rtw89_btc_ver rtw89_btc_ver_defs[] = {
         .fcxstep = 2,   .fcxnullsta = 1, .fcxmreg = 1,  .fcxgpiodbg = 1,
         .fcxbtver = 1,  .fcxbtscan = 1,  .fcxbtafh = 1, .fcxbtdevinfo = 1,
         .fwlrole = 0,   .frptmap = 0,    .fcxctrl = 0,  .fcxinit = 0,
-        .info_buf = 1024, .max_role_num = 5,
+        .drvinfo_type = 0, .info_buf = 1024, .max_role_num = 5,
        },
 };
 
@@ -2102,25 +2102,31 @@ static void _fw_set_drv_info(struct rtw89_dev *rtwdev, u8 type)
        switch (type) {
        case CXDRVINFO_INIT:
                if (ver->fcxinit == 7)
-                       rtw89_fw_h2c_cxdrv_init_v7(rtwdev);
+                       rtw89_fw_h2c_cxdrv_init_v7(rtwdev, type);
                else
-                       rtw89_fw_h2c_cxdrv_init(rtwdev);
+                       rtw89_fw_h2c_cxdrv_init(rtwdev, type);
                break;
        case CXDRVINFO_ROLE:
                if (ver->fwlrole == 0)
-                       rtw89_fw_h2c_cxdrv_role(rtwdev);
+                       rtw89_fw_h2c_cxdrv_role(rtwdev, type);
                else if (ver->fwlrole == 1)
-                       rtw89_fw_h2c_cxdrv_role_v1(rtwdev);
+                       rtw89_fw_h2c_cxdrv_role_v1(rtwdev, type);
                else if (ver->fwlrole == 2)
-                       rtw89_fw_h2c_cxdrv_role_v2(rtwdev);
+                       rtw89_fw_h2c_cxdrv_role_v2(rtwdev, type);
                break;
        case CXDRVINFO_CTRL:
+               if (ver->drvinfo_type == 1)
+                       type = 2;
+
                if (ver->fcxctrl == 7)
-                       rtw89_fw_h2c_cxdrv_ctrl_v7(rtwdev);
+                       rtw89_fw_h2c_cxdrv_ctrl_v7(rtwdev, type);
                else
-                       rtw89_fw_h2c_cxdrv_ctrl(rtwdev);
+                       rtw89_fw_h2c_cxdrv_ctrl(rtwdev, type);
                break;
        case CXDRVINFO_TRX:
+               if (ver->drvinfo_type == 1)
+                       type = 3;
+
                dm->trx_info.tx_power = u32_get_bits(rf_para.wl_tx_power,
                                                     RTW89_BTC_WL_DEF_TX_PWR);
                dm->trx_info.rx_gain = u32_get_bits(rf_para.wl_rx_gain,
@@ -2131,11 +2137,18 @@ static void _fw_set_drv_info(struct rtw89_dev *rtwdev, u8 type)
                                                       RTW89_BTC_WL_DEF_TX_PWR);
                dm->trx_info.cn = wl->cn_report;
                dm->trx_info.nhm = wl->nhm.pwr;
-               rtw89_fw_h2c_cxdrv_trx(rtwdev);
+               rtw89_fw_h2c_cxdrv_trx(rtwdev, type);
                break;
        case CXDRVINFO_RFK:
-               rtw89_fw_h2c_cxdrv_rfk(rtwdev);
+               if (ver->drvinfo_type == 1)
+                       return;
+
+               rtw89_fw_h2c_cxdrv_rfk(rtwdev, type);
                break;
+       case CXDRVINFO_TXPWR:
+       case CXDRVINFO_FDDT:
+       case CXDRVINFO_MLO:
+       case CXDRVINFO_OSI:
        default:
                break;
        }
index 91a8f62dc70ae1ec262c1eded3b5e91bd5d4bd73..7957b7b9e4c7f34bb3be621b822cbef0bb5b276e 100644 (file)
@@ -2791,6 +2791,7 @@ struct rtw89_btc_ver {
        u8 fcxctrl;
        u8 fcxinit;
 
+       u8 drvinfo_type;
        u16 info_buf;
        u8 max_role_num;
 };
index 4c607c8b4d158a4f759332a969513bc1cb34ac93..185cd339c0855dfeea3f3ee76389e58f17dc4675 100644 (file)
@@ -3753,7 +3753,7 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_cxdrv_init(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_init(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        struct rtw89_btc_dm *dm = &btc->dm;
@@ -3773,7 +3773,7 @@ int rtw89_fw_h2c_cxdrv_init(struct rtw89_dev *rtwdev)
        skb_put(skb, len);
        h2c = (struct rtw89_h2c_cxinit *)skb->data;
 
-       h2c->hdr.type = CXDRVINFO_INIT;
+       h2c->hdr.type = type;
        h2c->hdr.len = len - H2C_LEN_CXDRVHDR;
 
        h2c->ant_type = ant->type;
@@ -3820,7 +3820,7 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_cxdrv_init_v7(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_init_v7(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        struct rtw89_btc_dm *dm = &btc->dm;
@@ -3838,7 +3838,7 @@ int rtw89_fw_h2c_cxdrv_init_v7(struct rtw89_dev *rtwdev)
        skb_put(skb, len);
        h2c = (struct rtw89_h2c_cxinit_v7 *)skb->data;
 
-       h2c->hdr.type = CXDRVINFO_INIT;
+       h2c->hdr.type = type;
        h2c->hdr.ver = btc->ver->fcxinit;
        h2c->hdr.len = len - H2C_LEN_CXDRVHDR_V7;
        h2c->init = *init_info;
@@ -3866,7 +3866,7 @@ fail:
 #define H2C_LEN_CXDRVINFO_ROLE_SIZE(max_role_num) \
        (4 + 12 * (max_role_num) + H2C_LEN_CXDRVHDR)
 
-int rtw89_fw_h2c_cxdrv_role(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_role(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        const struct rtw89_btc_ver *ver = btc->ver;
@@ -3891,7 +3891,7 @@ int rtw89_fw_h2c_cxdrv_role(struct rtw89_dev *rtwdev)
        skb_put(skb, len);
        cmd = skb->data;
 
-       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, CXDRVINFO_ROLE);
+       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, type);
        RTW89_SET_FWCMD_CXHDR_LEN(cmd, len - H2C_LEN_CXDRVHDR);
 
        RTW89_SET_FWCMD_CXROLE_CONNECT_CNT(cmd, role_info->connect_cnt);
@@ -3947,7 +3947,7 @@ fail:
 #define H2C_LEN_CXDRVINFO_ROLE_SIZE_V1(max_role_num) \
        (4 + 16 * (max_role_num) + H2C_LEN_CXDRVINFO_ROLE_DBCC_LEN + H2C_LEN_CXDRVHDR)
 
-int rtw89_fw_h2c_cxdrv_role_v1(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_role_v1(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        const struct rtw89_btc_ver *ver = btc->ver;
@@ -3971,7 +3971,7 @@ int rtw89_fw_h2c_cxdrv_role_v1(struct rtw89_dev *rtwdev)
        skb_put(skb, len);
        cmd = skb->data;
 
-       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, CXDRVINFO_ROLE);
+       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, type);
        RTW89_SET_FWCMD_CXHDR_LEN(cmd, len - H2C_LEN_CXDRVHDR);
 
        RTW89_SET_FWCMD_CXROLE_CONNECT_CNT(cmd, role_info->connect_cnt);
@@ -4037,7 +4037,7 @@ fail:
 #define H2C_LEN_CXDRVINFO_ROLE_SIZE_V2(max_role_num) \
        (4 + 8 * (max_role_num) + H2C_LEN_CXDRVINFO_ROLE_DBCC_LEN + H2C_LEN_CXDRVHDR)
 
-int rtw89_fw_h2c_cxdrv_role_v2(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_role_v2(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        const struct rtw89_btc_ver *ver = btc->ver;
@@ -4061,7 +4061,7 @@ int rtw89_fw_h2c_cxdrv_role_v2(struct rtw89_dev *rtwdev)
        skb_put(skb, len);
        cmd = skb->data;
 
-       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, CXDRVINFO_ROLE);
+       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, type);
        RTW89_SET_FWCMD_CXHDR_LEN(cmd, len - H2C_LEN_CXDRVHDR);
 
        RTW89_SET_FWCMD_CXROLE_CONNECT_CNT(cmd, role_info->connect_cnt);
@@ -4121,7 +4121,7 @@ fail:
 }
 
 #define H2C_LEN_CXDRVINFO_CTRL (4 + H2C_LEN_CXDRVHDR)
-int rtw89_fw_h2c_cxdrv_ctrl(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_ctrl(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        const struct rtw89_btc_ver *ver = btc->ver;
@@ -4138,7 +4138,7 @@ int rtw89_fw_h2c_cxdrv_ctrl(struct rtw89_dev *rtwdev)
        skb_put(skb, H2C_LEN_CXDRVINFO_CTRL);
        cmd = skb->data;
 
-       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, CXDRVINFO_CTRL);
+       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, type);
        RTW89_SET_FWCMD_CXHDR_LEN(cmd, H2C_LEN_CXDRVINFO_CTRL - H2C_LEN_CXDRVHDR);
 
        RTW89_SET_FWCMD_CXCTRL_MANUAL(cmd, ctrl->manual);
@@ -4165,7 +4165,7 @@ fail:
        return ret;
 }
 
-int rtw89_fw_h2c_cxdrv_ctrl_v7(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_ctrl_v7(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        struct rtw89_btc_ctrl_v7 *ctrl = &btc->ctrl.ctrl_v7;
@@ -4182,7 +4182,7 @@ int rtw89_fw_h2c_cxdrv_ctrl_v7(struct rtw89_dev *rtwdev)
        skb_put(skb, len);
        h2c = (struct rtw89_h2c_cxctrl_v7 *)skb->data;
 
-       h2c->hdr.type = CXDRVINFO_INIT;
+       h2c->hdr.type = type;
        h2c->hdr.ver = btc->ver->fcxctrl;
        h2c->hdr.len = sizeof(*h2c) - H2C_LEN_CXDRVHDR_V7;
        h2c->ctrl = *ctrl;
@@ -4205,7 +4205,7 @@ fail:
 }
 
 #define H2C_LEN_CXDRVINFO_TRX (28 + H2C_LEN_CXDRVHDR)
-int rtw89_fw_h2c_cxdrv_trx(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_trx(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        struct rtw89_btc_trx_info *trx = &btc->dm.trx_info;
@@ -4221,7 +4221,7 @@ int rtw89_fw_h2c_cxdrv_trx(struct rtw89_dev *rtwdev)
        skb_put(skb, H2C_LEN_CXDRVINFO_TRX);
        cmd = skb->data;
 
-       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, CXDRVINFO_TRX);
+       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, type);
        RTW89_SET_FWCMD_CXHDR_LEN(cmd, H2C_LEN_CXDRVINFO_TRX - H2C_LEN_CXDRVHDR);
 
        RTW89_SET_FWCMD_CXTRX_TXLV(cmd, trx->tx_lvl);
@@ -4261,7 +4261,7 @@ fail:
 }
 
 #define H2C_LEN_CXDRVINFO_RFK (4 + H2C_LEN_CXDRVHDR)
-int rtw89_fw_h2c_cxdrv_rfk(struct rtw89_dev *rtwdev)
+int rtw89_fw_h2c_cxdrv_rfk(struct rtw89_dev *rtwdev, u8 type)
 {
        struct rtw89_btc *btc = &rtwdev->btc;
        struct rtw89_btc_wl_info *wl = &btc->cx.wl;
@@ -4278,7 +4278,7 @@ int rtw89_fw_h2c_cxdrv_rfk(struct rtw89_dev *rtwdev)
        skb_put(skb, H2C_LEN_CXDRVINFO_RFK);
        cmd = skb->data;
 
-       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, CXDRVINFO_RFK);
+       RTW89_SET_FWCMD_CXHDR_TYPE(cmd, type);
        RTW89_SET_FWCMD_CXHDR_LEN(cmd, H2C_LEN_CXDRVINFO_RFK - H2C_LEN_CXDRVHDR);
 
        RTW89_SET_FWCMD_CXRFK_STATE(cmd, rfk_info->state);
index 51087fa3bc0d25624adf1d7b80a6096583fce772..6993451a6ef95626ab957abc84003b922f3d07a5 100644 (file)
@@ -2324,9 +2324,15 @@ enum rtw89_btc_btf_set {
        SET_BT_IGNORE_WLAN_ACT,
        SET_BT_TX_PWR,
        SET_BT_LNA_CONSTRAIN,
-       SET_BT_GOLDEN_RX_RANGE,
+       SET_BT_QUERY_DEV_LIST,
+       SET_BT_QUERY_DEV_INFO,
        SET_BT_PSD_REPORT,
        SET_H2C_TEST,
+       SET_IOFLD_RF,
+       SET_IOFLD_BB,
+       SET_IOFLD_MAC,
+       SET_IOFLD_SCBD,
+       SET_H2C_MACRO,
        SET_MAX1,
 };
 
@@ -2340,6 +2346,10 @@ enum rtw89_btc_cxdrvinfo {
        CXDRVINFO_CTRL,
        CXDRVINFO_SCAN,
        CXDRVINFO_TRX,  /* WL traffic to WL fw */
+       CXDRVINFO_TXPWR,
+       CXDRVINFO_FDDT,
+       CXDRVINFO_MLO,
+       CXDRVINFO_OSI,
        CXDRVINFO_MAX,
 };
 
@@ -4548,15 +4558,15 @@ int rtw89_fw_h2c_rssi_offload(struct rtw89_dev *rtwdev,
                              struct rtw89_rx_phy_ppdu *phy_ppdu);
 int rtw89_fw_h2c_tp_offload(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif);
 int rtw89_fw_h2c_ra(struct rtw89_dev *rtwdev, struct rtw89_ra_info *ra, bool csi);
-int rtw89_fw_h2c_cxdrv_init(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_init_v7(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_role(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_role_v1(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_role_v2(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_ctrl(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_ctrl_v7(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_trx(struct rtw89_dev *rtwdev);
-int rtw89_fw_h2c_cxdrv_rfk(struct rtw89_dev *rtwdev);
+int rtw89_fw_h2c_cxdrv_init(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_init_v7(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_role(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_role_v1(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_role_v2(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_ctrl(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_ctrl_v7(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_trx(struct rtw89_dev *rtwdev, u8 type);
+int rtw89_fw_h2c_cxdrv_rfk(struct rtw89_dev *rtwdev, u8 type);
 int rtw89_fw_h2c_del_pkt_offload(struct rtw89_dev *rtwdev, u8 id);
 int rtw89_fw_h2c_add_pkt_offload(struct rtw89_dev *rtwdev, u8 *id,
                                 struct sk_buff *skb_ofld);