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