xref: /freebsd-src/sys/contrib/dev/rtw89/cam.h (revision 6d67aabd63555ab62a2f2b7f52a75ef100a2fe75)
18e93258fSBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
28e93258fSBjoern A. Zeeb /* Copyright(c) 2019-2020  Realtek Corporation
38e93258fSBjoern A. Zeeb  */
48e93258fSBjoern A. Zeeb 
58e93258fSBjoern A. Zeeb #ifndef __RTW89_CAM_H__
68e93258fSBjoern A. Zeeb #define __RTW89_CAM_H__
78e93258fSBjoern A. Zeeb 
88e93258fSBjoern A. Zeeb #include "core.h"
98e93258fSBjoern A. Zeeb 
108e93258fSBjoern A. Zeeb #define RTW89_SEC_CAM_LEN	20
118e93258fSBjoern A. Zeeb 
128e93258fSBjoern A. Zeeb #define RTW89_BSSID_MATCH_ALL GENMASK(5, 0)
138e93258fSBjoern A. Zeeb #define RTW89_BSSID_MATCH_5_BYTES GENMASK(4, 0)
148e93258fSBjoern A. Zeeb 
158e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_IDX(void *cmd, u32 value)
168e93258fSBjoern A. Zeeb {
178e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 1, value, GENMASK(7, 0));
188e93258fSBjoern A. Zeeb }
198e93258fSBjoern A. Zeeb 
208e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_OFFSET(void *cmd, u32 value)
218e93258fSBjoern A. Zeeb {
228e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 1, value, GENMASK(15, 8));
238e93258fSBjoern A. Zeeb }
248e93258fSBjoern A. Zeeb 
258e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_LEN(void *cmd, u32 value)
268e93258fSBjoern A. Zeeb {
278e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 1, value, GENMASK(23, 16));
288e93258fSBjoern A. Zeeb }
298e93258fSBjoern A. Zeeb 
308e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_VALID(void *cmd, u32 value)
318e93258fSBjoern A. Zeeb {
328e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, BIT(0));
338e93258fSBjoern A. Zeeb }
348e93258fSBjoern A. Zeeb 
358e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_NET_TYPE(void *cmd, u32 value)
368e93258fSBjoern A. Zeeb {
378e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(2, 1));
388e93258fSBjoern A. Zeeb }
398e93258fSBjoern A. Zeeb 
408e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BCN_HIT_COND(void *cmd, u32 value)
418e93258fSBjoern A. Zeeb {
428e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(4, 3));
438e93258fSBjoern A. Zeeb }
448e93258fSBjoern A. Zeeb 
458e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_HIT_RULE(void *cmd, u32 value)
468e93258fSBjoern A. Zeeb {
478e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(6, 5));
488e93258fSBjoern A. Zeeb }
498e93258fSBjoern A. Zeeb 
508e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BB_SEL(void *cmd, u32 value)
518e93258fSBjoern A. Zeeb {
528e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, BIT(7));
538e93258fSBjoern A. Zeeb }
548e93258fSBjoern A. Zeeb 
558e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_ADDR_MASK(void *cmd, u32 value)
568e93258fSBjoern A. Zeeb {
578e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(13, 8));
588e93258fSBjoern A. Zeeb }
598e93258fSBjoern A. Zeeb 
608e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_MASK_SEL(void *cmd, u32 value)
618e93258fSBjoern A. Zeeb {
628e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(15, 14));
638e93258fSBjoern A. Zeeb }
648e93258fSBjoern A. Zeeb 
658e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SMA_HASH(void *cmd, u32 value)
668e93258fSBjoern A. Zeeb {
678e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(23, 16));
688e93258fSBjoern A. Zeeb }
698e93258fSBjoern A. Zeeb 
708e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TMA_HASH(void *cmd, u32 value)
718e93258fSBjoern A. Zeeb {
728e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(31, 24));
738e93258fSBjoern A. Zeeb }
748e93258fSBjoern A. Zeeb 
758e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_CAM_IDX(void *cmd, u32 value)
768e93258fSBjoern A. Zeeb {
778e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 3, value, GENMASK(5, 0));
788e93258fSBjoern A. Zeeb }
798e93258fSBjoern A. Zeeb 
808e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SMA0(void *cmd, u32 value)
818e93258fSBjoern A. Zeeb {
828e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(7, 0));
838e93258fSBjoern A. Zeeb }
848e93258fSBjoern A. Zeeb 
858e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SMA1(void *cmd, u32 value)
868e93258fSBjoern A. Zeeb {
878e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(15, 8));
888e93258fSBjoern A. Zeeb }
898e93258fSBjoern A. Zeeb 
908e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SMA2(void *cmd, u32 value)
918e93258fSBjoern A. Zeeb {
928e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(23, 16));
938e93258fSBjoern A. Zeeb }
948e93258fSBjoern A. Zeeb 
958e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SMA3(void *cmd, u32 value)
968e93258fSBjoern A. Zeeb {
978e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(31, 24));
988e93258fSBjoern A. Zeeb }
998e93258fSBjoern A. Zeeb 
1008e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SMA4(void *cmd, u32 value)
1018e93258fSBjoern A. Zeeb {
1028e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(7, 0));
1038e93258fSBjoern A. Zeeb }
1048e93258fSBjoern A. Zeeb 
1058e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SMA5(void *cmd, u32 value)
1068e93258fSBjoern A. Zeeb {
1078e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(15, 8));
1088e93258fSBjoern A. Zeeb }
1098e93258fSBjoern A. Zeeb 
1108e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TMA0(void *cmd, u32 value)
1118e93258fSBjoern A. Zeeb {
1128e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(23, 16));
1138e93258fSBjoern A. Zeeb }
1148e93258fSBjoern A. Zeeb 
1158e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TMA1(void *cmd, u32 value)
1168e93258fSBjoern A. Zeeb {
1178e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(31, 24));
1188e93258fSBjoern A. Zeeb }
1198e93258fSBjoern A. Zeeb 
1208e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TMA2(void *cmd, u32 value)
1218e93258fSBjoern A. Zeeb {
1228e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(7, 0));
1238e93258fSBjoern A. Zeeb }
1248e93258fSBjoern A. Zeeb 
1258e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TMA3(void *cmd, u32 value)
1268e93258fSBjoern A. Zeeb {
1278e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(15, 8));
1288e93258fSBjoern A. Zeeb }
1298e93258fSBjoern A. Zeeb 
1308e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TMA4(void *cmd, u32 value)
1318e93258fSBjoern A. Zeeb {
1328e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(23, 16));
1338e93258fSBjoern A. Zeeb }
1348e93258fSBjoern A. Zeeb 
1358e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TMA5(void *cmd, u32 value)
1368e93258fSBjoern A. Zeeb {
1378e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(31, 24));
1388e93258fSBjoern A. Zeeb }
1398e93258fSBjoern A. Zeeb 
1408e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_MACID(void *cmd, u32 value)
1418e93258fSBjoern A. Zeeb {
1428e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(7, 0));
1438e93258fSBjoern A. Zeeb }
1448e93258fSBjoern A. Zeeb 
1458e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_PORT_INT(void *cmd, u32 value)
1468e93258fSBjoern A. Zeeb {
1478e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(10, 8));
1488e93258fSBjoern A. Zeeb }
1498e93258fSBjoern A. Zeeb 
1508e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TSF_SYNC(void *cmd, u32 value)
1518e93258fSBjoern A. Zeeb {
1528e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(13, 11));
1538e93258fSBjoern A. Zeeb }
1548e93258fSBjoern A. Zeeb 
1558e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TF_TRS(void *cmd, u32 value)
1568e93258fSBjoern A. Zeeb {
1578e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 8, value, BIT(14));
1588e93258fSBjoern A. Zeeb }
1598e93258fSBjoern A. Zeeb 
1608e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_LSIG_TXOP(void *cmd, u32 value)
1618e93258fSBjoern A. Zeeb {
1628e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 8, value, BIT(15));
1638e93258fSBjoern A. Zeeb }
1648e93258fSBjoern A. Zeeb 
1658e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_TGT_IND(void *cmd, u32 value)
1668e93258fSBjoern A. Zeeb {
1678e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(26, 24));
1688e93258fSBjoern A. Zeeb }
1698e93258fSBjoern A. Zeeb 
1708e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_FRM_TGT_IND(void *cmd, u32 value)
1718e93258fSBjoern A. Zeeb {
1728e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(29, 27));
1738e93258fSBjoern A. Zeeb }
1748e93258fSBjoern A. Zeeb 
1758e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_AID12(void *cmd, u32 value)
1768e93258fSBjoern A. Zeeb {
1778e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(11, 0));
1788e93258fSBjoern A. Zeeb }
1798e93258fSBjoern A. Zeeb 
1808e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_AID12_0(void *cmd, u32 value)
1818e93258fSBjoern A. Zeeb {
1828e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(7, 0));
1838e93258fSBjoern A. Zeeb }
1848e93258fSBjoern A. Zeeb 
1858e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_AID12_1(void *cmd, u32 value)
1868e93258fSBjoern A. Zeeb {
1878e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(11, 8));
1888e93258fSBjoern A. Zeeb }
1898e93258fSBjoern A. Zeeb 
1908e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_WOL_PATTERN(void *cmd, u32 value)
1918e93258fSBjoern A. Zeeb {
1928e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(12));
1938e93258fSBjoern A. Zeeb }
1948e93258fSBjoern A. Zeeb 
1958e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_WOL_UC(void *cmd, u32 value)
1968e93258fSBjoern A. Zeeb {
1978e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(13));
1988e93258fSBjoern A. Zeeb }
1998e93258fSBjoern A. Zeeb 
2008e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_WOL_MAGIC(void *cmd, u32 value)
2018e93258fSBjoern A. Zeeb {
2028e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(14));
2038e93258fSBjoern A. Zeeb }
2048e93258fSBjoern A. Zeeb 
2058e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_WAPI(void *cmd, u32 value)
2068e93258fSBjoern A. Zeeb {
2078e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(15));
2088e93258fSBjoern A. Zeeb }
2098e93258fSBjoern A. Zeeb 
2108e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT_MODE(void *cmd, u32 value)
2118e93258fSBjoern A. Zeeb {
2128e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(17, 16));
2138e93258fSBjoern A. Zeeb }
2148e93258fSBjoern A. Zeeb 
2158e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT0_KEYID(void *cmd, u32 value)
2168e93258fSBjoern A. Zeeb {
2178e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(19, 18));
2188e93258fSBjoern A. Zeeb }
2198e93258fSBjoern A. Zeeb 
2208e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT1_KEYID(void *cmd, u32 value)
2218e93258fSBjoern A. Zeeb {
2228e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(21, 20));
2238e93258fSBjoern A. Zeeb }
2248e93258fSBjoern A. Zeeb 
2258e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT2_KEYID(void *cmd, u32 value)
2268e93258fSBjoern A. Zeeb {
2278e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(23, 22));
2288e93258fSBjoern A. Zeeb }
2298e93258fSBjoern A. Zeeb 
2308e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT3_KEYID(void *cmd, u32 value)
2318e93258fSBjoern A. Zeeb {
2328e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(25, 24));
2338e93258fSBjoern A. Zeeb }
2348e93258fSBjoern A. Zeeb 
2358e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT4_KEYID(void *cmd, u32 value)
2368e93258fSBjoern A. Zeeb {
2378e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(27, 26));
2388e93258fSBjoern A. Zeeb }
2398e93258fSBjoern A. Zeeb 
2408e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT5_KEYID(void *cmd, u32 value)
2418e93258fSBjoern A. Zeeb {
2428e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(29, 28));
2438e93258fSBjoern A. Zeeb }
2448e93258fSBjoern A. Zeeb 
2458e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT6_KEYID(void *cmd, u32 value)
2468e93258fSBjoern A. Zeeb {
2478e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(31, 30));
2488e93258fSBjoern A. Zeeb }
2498e93258fSBjoern A. Zeeb 
2508e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT_VALID(void *cmd, u32 value)
2518e93258fSBjoern A. Zeeb {
2528e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(7, 0));
2538e93258fSBjoern A. Zeeb }
2548e93258fSBjoern A. Zeeb 
2558e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT0(void *cmd, u32 value)
2568e93258fSBjoern A. Zeeb {
2578e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(15, 8));
2588e93258fSBjoern A. Zeeb }
2598e93258fSBjoern A. Zeeb 
2608e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT1(void *cmd, u32 value)
2618e93258fSBjoern A. Zeeb {
2628e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(23, 16));
2638e93258fSBjoern A. Zeeb }
2648e93258fSBjoern A. Zeeb 
2658e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT2(void *cmd, u32 value)
2668e93258fSBjoern A. Zeeb {
2678e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(31, 24));
2688e93258fSBjoern A. Zeeb }
2698e93258fSBjoern A. Zeeb 
2708e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT3(void *cmd, u32 value)
2718e93258fSBjoern A. Zeeb {
2728e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(7, 0));
2738e93258fSBjoern A. Zeeb }
2748e93258fSBjoern A. Zeeb 
2758e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT4(void *cmd, u32 value)
2768e93258fSBjoern A. Zeeb {
2778e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(15, 8));
2788e93258fSBjoern A. Zeeb }
2798e93258fSBjoern A. Zeeb 
2808e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT5(void *cmd, u32 value)
2818e93258fSBjoern A. Zeeb {
2828e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(23, 16));
2838e93258fSBjoern A. Zeeb }
2848e93258fSBjoern A. Zeeb 
2858e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_SEC_ENT6(void *cmd, u32 value)
2868e93258fSBjoern A. Zeeb {
2878e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(31, 24));
2888e93258fSBjoern A. Zeeb }
2898e93258fSBjoern A. Zeeb 
2908e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_IDX(void *cmd, u32 value)
2918e93258fSBjoern A. Zeeb {
2928e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 12, value, GENMASK(7, 0));
2938e93258fSBjoern A. Zeeb }
2948e93258fSBjoern A. Zeeb 
2958e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_OFFSET(void *cmd, u32 value)
2968e93258fSBjoern A. Zeeb {
2978e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 12, value, GENMASK(15, 8));
2988e93258fSBjoern A. Zeeb }
2998e93258fSBjoern A. Zeeb 
3008e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_LEN(void *cmd, u32 value)
3018e93258fSBjoern A. Zeeb {
3028e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 12, value, GENMASK(23, 16));
3038e93258fSBjoern A. Zeeb }
3048e93258fSBjoern A. Zeeb 
3058e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_VALID(void *cmd, u32 value)
3068e93258fSBjoern A. Zeeb {
3078e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 13, value, BIT(0));
3088e93258fSBjoern A. Zeeb }
3098e93258fSBjoern A. Zeeb 
3108e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BB_SEL(void *cmd, u32 value)
3118e93258fSBjoern A. Zeeb {
3128e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 13, value, BIT(1));
3138e93258fSBjoern A. Zeeb }
3148e93258fSBjoern A. Zeeb 
3158e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_MASK(void *cmd, u32 value)
3168e93258fSBjoern A. Zeeb {
3178e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(7, 2));
3188e93258fSBjoern A. Zeeb }
3198e93258fSBjoern A. Zeeb 
3208e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BSS_COLOR(void *cmd, u32 value)
3218e93258fSBjoern A. Zeeb {
3228e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(13, 8));
3238e93258fSBjoern A. Zeeb }
3248e93258fSBjoern A. Zeeb 
3258e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BSSID0(void *cmd, u32 value)
3268e93258fSBjoern A. Zeeb {
3278e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(23, 16));
3288e93258fSBjoern A. Zeeb }
3298e93258fSBjoern A. Zeeb 
3308e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BSSID1(void *cmd, u32 value)
3318e93258fSBjoern A. Zeeb {
3328e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(31, 24));
3338e93258fSBjoern A. Zeeb }
3348e93258fSBjoern A. Zeeb 
3358e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BSSID2(void *cmd, u32 value)
3368e93258fSBjoern A. Zeeb {
3378e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(7, 0));
3388e93258fSBjoern A. Zeeb }
3398e93258fSBjoern A. Zeeb 
3408e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BSSID3(void *cmd, u32 value)
3418e93258fSBjoern A. Zeeb {
3428e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(15, 8));
3438e93258fSBjoern A. Zeeb }
3448e93258fSBjoern A. Zeeb 
3458e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BSSID4(void *cmd, u32 value)
3468e93258fSBjoern A. Zeeb {
3478e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(23, 16));
3488e93258fSBjoern A. Zeeb }
3498e93258fSBjoern A. Zeeb 
3508e93258fSBjoern A. Zeeb static inline void FWCMD_SET_ADDR_BSSID_BSSID5(void *cmd, u32 value)
3518e93258fSBjoern A. Zeeb {
3528e93258fSBjoern A. Zeeb 	le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(31, 24));
3538e93258fSBjoern A. Zeeb }
3548e93258fSBjoern A. Zeeb 
355*6d67aabdSBjoern A. Zeeb struct rtw89_h2c_dctlinfo_ud_v1 {
356*6d67aabdSBjoern A. Zeeb 	__le32 c0;
357*6d67aabdSBjoern A. Zeeb 	__le32 w0;
358*6d67aabdSBjoern A. Zeeb 	__le32 w1;
359*6d67aabdSBjoern A. Zeeb 	__le32 w2;
360*6d67aabdSBjoern A. Zeeb 	__le32 w3;
361*6d67aabdSBjoern A. Zeeb 	__le32 w4;
362*6d67aabdSBjoern A. Zeeb 	__le32 w5;
363*6d67aabdSBjoern A. Zeeb 	__le32 w6;
364*6d67aabdSBjoern A. Zeeb 	__le32 w7;
365*6d67aabdSBjoern A. Zeeb 	__le32 m0;
366*6d67aabdSBjoern A. Zeeb 	__le32 m1;
367*6d67aabdSBjoern A. Zeeb 	__le32 m2;
368*6d67aabdSBjoern A. Zeeb 	__le32 m3;
369*6d67aabdSBjoern A. Zeeb 	__le32 m4;
370*6d67aabdSBjoern A. Zeeb 	__le32 m5;
371*6d67aabdSBjoern A. Zeeb 	__le32 m6;
372*6d67aabdSBjoern A. Zeeb 	__le32 m7;
373*6d67aabdSBjoern A. Zeeb } __packed;
374*6d67aabdSBjoern A. Zeeb 
375*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_C0_MACID GENMASK(6, 0)
376*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_C0_OP BIT(7)
377*6d67aabdSBjoern A. Zeeb 
378*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W0_QOS_FIELD_H GENMASK(7, 0)
379*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W0_HW_EXSEQ_MACID GENMASK(14, 8)
380*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W0_QOS_DATA BIT(15)
381*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W0_AES_IV_L GENMASK(31, 16)
382*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W0_ALL GENMASK(31, 0)
383*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W1_AES_IV_H GENMASK(31, 0)
384*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W1_ALL GENMASK(31, 0)
385*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W2_SEQ0 GENMASK(11, 0)
386*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W2_SEQ1 GENMASK(23, 12)
387*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W2_AMSDU_MAX_LEN GENMASK(26, 24)
388*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W2_STA_AMSDU_EN BIT(27)
389*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W2_CHKSUM_OFLD_EN BIT(28)
390*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W2_WITH_LLC BIT(29)
391*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W2_ALL GENMASK(29, 0)
392*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W3_SEQ2 GENMASK(11, 0)
393*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W3_SEQ3 GENMASK(23, 12)
394*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W3_TGT_IND GENMASK(27, 24)
395*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W3_TGT_IND_EN BIT(28)
396*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W3_HTC_LB GENMASK(31, 29)
397*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W3_ALL GENMASK(31, 0)
398*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_MHDR_LEN GENMASK(4, 0)
399*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_VLAN_TAG_VALID BIT(5)
400*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_VLAN_TAG_SEL GENMASK(7, 6)
401*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_HTC_ORDER BIT(8)
402*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_KEY_ID GENMASK(10, 9)
403*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_WAPI BIT(15)
404*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT_MODE GENMASK(17, 16)
405*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT0_KEYID GENMASK(19, 18)
406*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT1_KEYID GENMASK(21, 20)
407*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT2_KEYID GENMASK(23, 22)
408*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT3_KEYID GENMASK(25, 24)
409*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT4_KEYID GENMASK(27, 26)
410*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT5_KEYID GENMASK(29, 28)
411*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_SEC_ENT6_KEYID GENMASK(31, 30)
412*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W4_ALL (GENMASK(31, 15) | GENMASK(10, 0))
413*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W5_SEC_ENT_VALID GENMASK(7, 0)
414*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W5_SEC_ENT0 GENMASK(15, 8)
415*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W5_SEC_ENT1 GENMASK(23, 16)
416*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W5_SEC_ENT2 GENMASK(31, 24)
417*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W5_ALL GENMASK(31, 0)
418*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W6_SEC_ENT3 GENMASK(7, 0)
419*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W6_SEC_ENT4 GENMASK(15, 8)
420*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W6_SEC_ENT5 GENMASK(23, 16)
421*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W6_SEC_ENT6 GENMASK(31, 24)
422*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V1_W6_ALL GENMASK(31, 0)
423*6d67aabdSBjoern A. Zeeb 
424*6d67aabdSBjoern A. Zeeb struct rtw89_h2c_dctlinfo_ud_v2 {
425*6d67aabdSBjoern A. Zeeb 	__le32 c0;
426*6d67aabdSBjoern A. Zeeb 	__le32 w0;
427*6d67aabdSBjoern A. Zeeb 	__le32 w1;
428*6d67aabdSBjoern A. Zeeb 	__le32 w2;
429*6d67aabdSBjoern A. Zeeb 	__le32 w3;
430*6d67aabdSBjoern A. Zeeb 	__le32 w4;
431*6d67aabdSBjoern A. Zeeb 	__le32 w5;
432*6d67aabdSBjoern A. Zeeb 	__le32 w6;
433*6d67aabdSBjoern A. Zeeb 	__le32 w7;
434*6d67aabdSBjoern A. Zeeb 	__le32 w8;
435*6d67aabdSBjoern A. Zeeb 	__le32 w9;
436*6d67aabdSBjoern A. Zeeb 	__le32 w10;
437*6d67aabdSBjoern A. Zeeb 	__le32 w11;
438*6d67aabdSBjoern A. Zeeb 	__le32 w12;
439*6d67aabdSBjoern A. Zeeb 	__le32 w13;
440*6d67aabdSBjoern A. Zeeb 	__le32 w14;
441*6d67aabdSBjoern A. Zeeb 	__le32 w15;
442*6d67aabdSBjoern A. Zeeb 	__le32 m0;
443*6d67aabdSBjoern A. Zeeb 	__le32 m1;
444*6d67aabdSBjoern A. Zeeb 	__le32 m2;
445*6d67aabdSBjoern A. Zeeb 	__le32 m3;
446*6d67aabdSBjoern A. Zeeb 	__le32 m4;
447*6d67aabdSBjoern A. Zeeb 	__le32 m5;
448*6d67aabdSBjoern A. Zeeb 	__le32 m6;
449*6d67aabdSBjoern A. Zeeb 	__le32 m7;
450*6d67aabdSBjoern A. Zeeb 	__le32 m8;
451*6d67aabdSBjoern A. Zeeb 	__le32 m9;
452*6d67aabdSBjoern A. Zeeb 	__le32 m10;
453*6d67aabdSBjoern A. Zeeb 	__le32 m11;
454*6d67aabdSBjoern A. Zeeb 	__le32 m12;
455*6d67aabdSBjoern A. Zeeb 	__le32 m13;
456*6d67aabdSBjoern A. Zeeb 	__le32 m14;
457*6d67aabdSBjoern A. Zeeb 	__le32 m15;
458*6d67aabdSBjoern A. Zeeb } __packed;
459*6d67aabdSBjoern A. Zeeb 
460*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_C0_MACID GENMASK(6, 0)
461*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_C0_OP BIT(7)
462*6d67aabdSBjoern A. Zeeb 
463*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W0_QOS_FIELD_H GENMASK(7, 0)
464*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W0_HW_EXSEQ_MACID GENMASK(14, 8)
465*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W0_QOS_DATA BIT(15)
466*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W0_AES_IV_L GENMASK(31, 16)
467*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W0_ALL GENMASK(31, 0)
468*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W1_AES_IV_H GENMASK(31, 0)
469*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W1_ALL GENMASK(31, 0)
470*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_SEQ0 GENMASK(11, 0)
471*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_SEQ1 GENMASK(23, 12)
472*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_AMSDU_MAX_LEN GENMASK(26, 24)
473*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_STA_AMSDU_EN BIT(27)
474*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_CHKSUM_OFLD_EN BIT(28)
475*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_WITH_LLC BIT(29)
476*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_NAT25_EN BIT(30)
477*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_IS_MLD BIT(31)
478*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W2_ALL GENMASK(31, 0)
479*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W3_SEQ2 GENMASK(11, 0)
480*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W3_SEQ3 GENMASK(23, 12)
481*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W3_TGT_IND GENMASK(27, 24)
482*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W3_TGT_IND_EN BIT(28)
483*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W3_HTC_LB GENMASK(31, 29)
484*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W3_ALL GENMASK(31, 0)
485*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_VLAN_TAG_SEL GENMASK(7, 5)
486*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_HTC_ORDER BIT(8)
487*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_KEY_ID GENMASK(10, 9)
488*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_VLAN_RX_DYNAMIC_PCP_EN BIT(11)
489*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_VLAN_RX_PKT_DROP BIT(12)
490*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_VLAN_RX_VALID BIT(13)
491*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_VLAN_TX_VALID BIT(14)
492*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_WAPI BIT(15)
493*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT_MODE GENMASK(17, 16)
494*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT0_KEYID GENMASK(19, 18)
495*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT1_KEYID GENMASK(21, 20)
496*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT2_KEYID GENMASK(23, 22)
497*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT3_KEYID GENMASK(25, 24)
498*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT4_KEYID GENMASK(27, 26)
499*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT5_KEYID GENMASK(29, 28)
500*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_SEC_ENT6_KEYID GENMASK(31, 30)
501*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W4_ALL GENMASK(31, 5)
502*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W5_SEC_ENT7_KEYID GENMASK(1, 0)
503*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W5_SEC_ENT8_KEYID GENMASK(3, 2)
504*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W5_SEC_ENT_VALID_V1 GENMASK(23, 8)
505*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W5_SEC_ENT0_V1 GENMASK(31, 24)
506*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W5_ALL (GENMASK(31, 8) | GENMASK(3, 0))
507*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W6_SEC_ENT1_V1 GENMASK(7, 0)
508*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W6_SEC_ENT2_V1 GENMASK(15, 8)
509*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W6_SEC_ENT3_V1 GENMASK(23, 16)
510*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W6_SEC_ENT4_V1 GENMASK(31, 24)
511*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W6_ALL GENMASK(31, 0)
512*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W7_SEC_ENT5_V1 GENMASK(7, 0)
513*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W7_SEC_ENT6_V1 GENMASK(15, 8)
514*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W7_SEC_ENT7 GENMASK(23, 16)
515*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W7_SEC_ENT8 GENMASK(31, 24)
516*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W7_ALL GENMASK(31, 0)
517*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W8_MLD_SMA_L_V1 GENMASK(31, 0)
518*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W8_ALL GENMASK(31, 0)
519*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W9_MLD_SMA_H_V1 GENMASK(15, 0)
520*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W9_MLD_TMA_L_V1 GENMASK(31, 16)
521*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W9_ALL GENMASK(31, 0)
522*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W10_MLD_TMA_H_V1 GENMASK(31, 0)
523*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W10_ALL GENMASK(31, 0)
524*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W11_MLD_TA_BSSID_L_V1 GENMASK(31, 0)
525*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W11_ALL GENMASK(31, 0)
526*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W12_MLD_TA_BSSID_H_V1 GENMASK(15, 0)
527*6d67aabdSBjoern A. Zeeb #define DCTLINFO_V2_W12_ALL GENMASK(15, 0)
528*6d67aabdSBjoern A. Zeeb 
5298e93258fSBjoern A. Zeeb int rtw89_cam_init(struct rtw89_dev *rtwdev, struct rtw89_vif *vif);
5308e93258fSBjoern A. Zeeb void rtw89_cam_deinit(struct rtw89_dev *rtwdev, struct rtw89_vif *vif);
5318e93258fSBjoern A. Zeeb int rtw89_cam_init_addr_cam(struct rtw89_dev *rtwdev,
5328e93258fSBjoern A. Zeeb 			    struct rtw89_addr_cam_entry *addr_cam,
5338e93258fSBjoern A. Zeeb 			    const struct rtw89_bssid_cam_entry *bssid_cam);
5348e93258fSBjoern A. Zeeb void rtw89_cam_deinit_addr_cam(struct rtw89_dev *rtwdev,
5358e93258fSBjoern A. Zeeb 			       struct rtw89_addr_cam_entry *addr_cam);
5368e93258fSBjoern A. Zeeb int rtw89_cam_init_bssid_cam(struct rtw89_dev *rtwdev,
5378e93258fSBjoern A. Zeeb 			     struct rtw89_vif *rtwvif,
5388e93258fSBjoern A. Zeeb 			     struct rtw89_bssid_cam_entry *bssid_cam,
5398e93258fSBjoern A. Zeeb 			     const u8 *bssid);
5408e93258fSBjoern A. Zeeb void rtw89_cam_deinit_bssid_cam(struct rtw89_dev *rtwdev,
5418e93258fSBjoern A. Zeeb 				struct rtw89_bssid_cam_entry *bssid_cam);
5428e93258fSBjoern A. Zeeb void rtw89_cam_fill_addr_cam_info(struct rtw89_dev *rtwdev,
5438e93258fSBjoern A. Zeeb 				  struct rtw89_vif *vif,
5448e93258fSBjoern A. Zeeb 				  struct rtw89_sta *rtwsta,
5458e93258fSBjoern A. Zeeb 				  const u8 *scan_mac_addr, u8 *cmd);
5468e93258fSBjoern A. Zeeb void rtw89_cam_fill_dctl_sec_cam_info_v1(struct rtw89_dev *rtwdev,
5478e93258fSBjoern A. Zeeb 					 struct rtw89_vif *rtwvif,
5488e93258fSBjoern A. Zeeb 					 struct rtw89_sta *rtwsta,
549*6d67aabdSBjoern A. Zeeb 					 struct rtw89_h2c_dctlinfo_ud_v1 *h2c);
550*6d67aabdSBjoern A. Zeeb void rtw89_cam_fill_dctl_sec_cam_info_v2(struct rtw89_dev *rtwdev,
551*6d67aabdSBjoern A. Zeeb 					 struct rtw89_vif *rtwvif,
552*6d67aabdSBjoern A. Zeeb 					 struct rtw89_sta *rtwsta,
553*6d67aabdSBjoern A. Zeeb 					 struct rtw89_h2c_dctlinfo_ud_v2 *h2c);
5548e93258fSBjoern A. Zeeb int rtw89_cam_fill_bssid_cam_info(struct rtw89_dev *rtwdev,
5558e93258fSBjoern A. Zeeb 				  struct rtw89_vif *rtwvif,
5568e93258fSBjoern A. Zeeb 				  struct rtw89_sta *rtwsta, u8 *cmd);
5578e93258fSBjoern A. Zeeb int rtw89_cam_sec_key_add(struct rtw89_dev *rtwdev,
5588e93258fSBjoern A. Zeeb 			  struct ieee80211_vif *vif,
5598e93258fSBjoern A. Zeeb 			  struct ieee80211_sta *sta,
5608e93258fSBjoern A. Zeeb 			  struct ieee80211_key_conf *key);
5618e93258fSBjoern A. Zeeb int rtw89_cam_sec_key_del(struct rtw89_dev *rtwdev,
5628e93258fSBjoern A. Zeeb 			  struct ieee80211_vif *vif,
5638e93258fSBjoern A. Zeeb 			  struct ieee80211_sta *sta,
5648e93258fSBjoern A. Zeeb 			  struct ieee80211_key_conf *key,
5658e93258fSBjoern A. Zeeb 			  bool inform_fw);
5668e93258fSBjoern A. Zeeb void rtw89_cam_bssid_changed(struct rtw89_dev *rtwdev,
5678e93258fSBjoern A. Zeeb 			     struct rtw89_vif *rtwvif);
5688e93258fSBjoern A. Zeeb void rtw89_cam_reset_keys(struct rtw89_dev *rtwdev);
5698e93258fSBjoern A. Zeeb #endif
570