struct rtw89_btc_btf_set_mon_reg {
u8 fver;
u8 reg_num;
- u8 buf[];
+ struct rtw89_btc_fbtc_mreg regs[] __counted_by(reg_num);
} __packed;
enum btc_btf_set_cx_policy {
const struct rtw89_chip_info *chip = rtwdev->chip;
const struct rtw89_btc_ver *ver = rtwdev->btc.ver;
struct rtw89_btc_btf_set_mon_reg *monreg = NULL;
- u8 n, *ptr = NULL, ulen, cxmreg_max;
+ u8 n, ulen, cxmreg_max;
u16 sz = 0;
n = chip->mon_reg_num;
return;
}
- ulen = sizeof(struct rtw89_btc_fbtc_mreg);
- sz = (ulen * n) + sizeof(*monreg);
+ ulen = sizeof(monreg->regs[0]);
+ sz = struct_size(monreg, regs, n);
monreg = kmalloc(sz, GFP_KERNEL);
if (!monreg)
return;
monreg->fver = ver->fcxmreg;
monreg->reg_num = n;
- ptr = &monreg->buf[0];
- memcpy(ptr, chip->mon_reg, n * ulen);
+ memcpy(monreg->regs, chip->mon_reg, flex_array_size(monreg, regs, n));
rtw89_debug(rtwdev, RTW89_DBG_BTC,
"[BTC], %s(): sz=%d ulen=%d n=%d\n",
__func__, sz, ulen, n);