mirror of
https://github.com/torvalds/linux.git
synced 2026-06-02 03:24:19 +02:00
wifi: rtw89: fw: introduce helper for disabling FW feature configuration
Some FW features (groups) may be valid only in a range of FW versions, i.e. after some FW versions, they can no longer be used. So, introduce some helper macros to configure this kind of things in FW feature table. Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com> Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Link: https://patch.msgid.link/20251231090647.56407-6-pkshih@realtek.com
This commit is contained in:
parent
c5e5519fd9
commit
2d986cf3cc
|
|
@ -4815,6 +4815,9 @@ struct rtw89_fw_info {
|
|||
#define RTW89_SET_FW_FEATURE(_fw_feature, _fw) \
|
||||
set_bit(_fw_feature, (_fw)->feature_map)
|
||||
|
||||
#define RTW89_CLR_FW_FEATURE(_fw_feature, _fw) \
|
||||
clear_bit(_fw_feature, (_fw)->feature_map)
|
||||
|
||||
struct rtw89_cam_info {
|
||||
DECLARE_BITMAP(addr_cam_map, RTW89_MAX_ADDR_CAM_NUM);
|
||||
DECLARE_BITMAP(bssid_cam_map, RTW89_MAX_BSSID_CAM_NUM);
|
||||
|
|
|
|||
|
|
@ -812,6 +812,8 @@ struct __fw_feat_cfg {
|
|||
enum rtw89_fw_feature feature;
|
||||
u32 ver_code;
|
||||
bool (*cond)(u32 suit_ver_code, u32 comp_ver_code);
|
||||
bool disable;
|
||||
int size;
|
||||
};
|
||||
|
||||
#define __CFG_FW_FEAT(_chip, _cond, _maj, _min, _sub, _idx, _feat) \
|
||||
|
|
@ -822,6 +824,30 @@ struct __fw_feat_cfg {
|
|||
.cond = __fw_feat_cond_ ## _cond, \
|
||||
}
|
||||
|
||||
#define __S_DIS_FW_FEAT(_chip, _cond, _maj, _min, _sub, _idx, _feat) \
|
||||
{ \
|
||||
.chip_id = _chip, \
|
||||
.feature = RTW89_FW_FEATURE_ ## _feat, \
|
||||
.ver_code = RTW89_FW_VER_CODE(_maj, _min, _sub, _idx), \
|
||||
.cond = __fw_feat_cond_ ## _cond, \
|
||||
.disable = true, \
|
||||
.size = 1, \
|
||||
}
|
||||
|
||||
#define __G_DIS_FW_FEAT(_chip, _cond, _maj, _min, _sub, _idx, _grp) \
|
||||
{ \
|
||||
.chip_id = _chip, \
|
||||
.feature = RTW89_FW_FEATURE_ ## _grp ## _MIN, \
|
||||
.ver_code = RTW89_FW_VER_CODE(_maj, _min, _sub, _idx), \
|
||||
.cond = __fw_feat_cond_ ## _cond, \
|
||||
.disable = true, \
|
||||
.size = RTW89_FW_FEATURE_ ## _grp ## _MAX - \
|
||||
RTW89_FW_FEATURE_ ## _grp ## _MIN + 1, \
|
||||
}
|
||||
|
||||
#define __DIS_FW_FEAT(_chip, _cond, _maj, _min, _sub, _idx, _feat, _type) \
|
||||
__##_type##_DIS_FW_FEAT(_chip, _cond, _maj, _min, _sub, _idx, _feat)
|
||||
|
||||
static const struct __fw_feat_cfg fw_feat_tbl[] = {
|
||||
__CFG_FW_FEAT(RTL8851B, ge, 0, 29, 37, 1, TX_WAKE),
|
||||
__CFG_FW_FEAT(RTL8851B, ge, 0, 29, 37, 1, SCAN_OFFLOAD),
|
||||
|
|
@ -908,8 +934,16 @@ static void rtw89_fw_iterate_feature_cfg(struct rtw89_fw_info *fw,
|
|||
if (chip->chip_id != ent->chip_id)
|
||||
continue;
|
||||
|
||||
if (ent->cond(ver_code, ent->ver_code))
|
||||
if (!ent->cond(ver_code, ent->ver_code))
|
||||
continue;
|
||||
|
||||
if (!ent->disable) {
|
||||
RTW89_SET_FW_FEATURE(ent->feature, fw);
|
||||
continue;
|
||||
}
|
||||
|
||||
for (int n = 0; n < ent->size; n++)
|
||||
RTW89_CLR_FW_FEATURE(ent->feature + n, fw);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user