Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
0002 /* Copyright(c) 2019-2020  Realtek Corporation
0003  */
0004 
0005 #ifndef __RTW89_CAM_H__
0006 #define __RTW89_CAM_H__
0007 
0008 #include "core.h"
0009 
0010 #define RTW89_SEC_CAM_LEN   20
0011 
0012 #define RTW89_BSSID_MATCH_ALL GENMASK(5, 0)
0013 #define RTW89_BSSID_MATCH_5_BYTES GENMASK(4, 0)
0014 
0015 static inline void FWCMD_SET_ADDR_IDX(void *cmd, u32 value)
0016 {
0017     le32p_replace_bits((__le32 *)(cmd) + 1, value, GENMASK(7, 0));
0018 }
0019 
0020 static inline void FWCMD_SET_ADDR_OFFSET(void *cmd, u32 value)
0021 {
0022     le32p_replace_bits((__le32 *)(cmd) + 1, value, GENMASK(15, 8));
0023 }
0024 
0025 static inline void FWCMD_SET_ADDR_LEN(void *cmd, u32 value)
0026 {
0027     le32p_replace_bits((__le32 *)(cmd) + 1, value, GENMASK(23, 16));
0028 }
0029 
0030 static inline void FWCMD_SET_ADDR_VALID(void *cmd, u32 value)
0031 {
0032     le32p_replace_bits((__le32 *)(cmd) + 2, value, BIT(0));
0033 }
0034 
0035 static inline void FWCMD_SET_ADDR_NET_TYPE(void *cmd, u32 value)
0036 {
0037     le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(2, 1));
0038 }
0039 
0040 static inline void FWCMD_SET_ADDR_BCN_HIT_COND(void *cmd, u32 value)
0041 {
0042     le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(4, 3));
0043 }
0044 
0045 static inline void FWCMD_SET_ADDR_HIT_RULE(void *cmd, u32 value)
0046 {
0047     le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(6, 5));
0048 }
0049 
0050 static inline void FWCMD_SET_ADDR_BB_SEL(void *cmd, u32 value)
0051 {
0052     le32p_replace_bits((__le32 *)(cmd) + 2, value, BIT(7));
0053 }
0054 
0055 static inline void FWCMD_SET_ADDR_ADDR_MASK(void *cmd, u32 value)
0056 {
0057     le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(13, 8));
0058 }
0059 
0060 static inline void FWCMD_SET_ADDR_MASK_SEL(void *cmd, u32 value)
0061 {
0062     le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(15, 14));
0063 }
0064 
0065 static inline void FWCMD_SET_ADDR_SMA_HASH(void *cmd, u32 value)
0066 {
0067     le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(23, 16));
0068 }
0069 
0070 static inline void FWCMD_SET_ADDR_TMA_HASH(void *cmd, u32 value)
0071 {
0072     le32p_replace_bits((__le32 *)(cmd) + 2, value, GENMASK(31, 24));
0073 }
0074 
0075 static inline void FWCMD_SET_ADDR_BSSID_CAM_IDX(void *cmd, u32 value)
0076 {
0077     le32p_replace_bits((__le32 *)(cmd) + 3, value, GENMASK(5, 0));
0078 }
0079 
0080 static inline void FWCMD_SET_ADDR_SMA0(void *cmd, u32 value)
0081 {
0082     le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(7, 0));
0083 }
0084 
0085 static inline void FWCMD_SET_ADDR_SMA1(void *cmd, u32 value)
0086 {
0087     le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(15, 8));
0088 }
0089 
0090 static inline void FWCMD_SET_ADDR_SMA2(void *cmd, u32 value)
0091 {
0092     le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(23, 16));
0093 }
0094 
0095 static inline void FWCMD_SET_ADDR_SMA3(void *cmd, u32 value)
0096 {
0097     le32p_replace_bits((__le32 *)(cmd) + 4, value, GENMASK(31, 24));
0098 }
0099 
0100 static inline void FWCMD_SET_ADDR_SMA4(void *cmd, u32 value)
0101 {
0102     le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(7, 0));
0103 }
0104 
0105 static inline void FWCMD_SET_ADDR_SMA5(void *cmd, u32 value)
0106 {
0107     le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(15, 8));
0108 }
0109 
0110 static inline void FWCMD_SET_ADDR_TMA0(void *cmd, u32 value)
0111 {
0112     le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(23, 16));
0113 }
0114 
0115 static inline void FWCMD_SET_ADDR_TMA1(void *cmd, u32 value)
0116 {
0117     le32p_replace_bits((__le32 *)(cmd) + 5, value, GENMASK(31, 24));
0118 }
0119 
0120 static inline void FWCMD_SET_ADDR_TMA2(void *cmd, u32 value)
0121 {
0122     le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(7, 0));
0123 }
0124 
0125 static inline void FWCMD_SET_ADDR_TMA3(void *cmd, u32 value)
0126 {
0127     le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(15, 8));
0128 }
0129 
0130 static inline void FWCMD_SET_ADDR_TMA4(void *cmd, u32 value)
0131 {
0132     le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(23, 16));
0133 }
0134 
0135 static inline void FWCMD_SET_ADDR_TMA5(void *cmd, u32 value)
0136 {
0137     le32p_replace_bits((__le32 *)(cmd) + 6, value, GENMASK(31, 24));
0138 }
0139 
0140 static inline void FWCMD_SET_ADDR_MACID(void *cmd, u32 value)
0141 {
0142     le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(7, 0));
0143 }
0144 
0145 static inline void FWCMD_SET_ADDR_PORT_INT(void *cmd, u32 value)
0146 {
0147     le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(10, 8));
0148 }
0149 
0150 static inline void FWCMD_SET_ADDR_TSF_SYNC(void *cmd, u32 value)
0151 {
0152     le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(13, 11));
0153 }
0154 
0155 static inline void FWCMD_SET_ADDR_TF_TRS(void *cmd, u32 value)
0156 {
0157     le32p_replace_bits((__le32 *)(cmd) + 8, value, BIT(14));
0158 }
0159 
0160 static inline void FWCMD_SET_ADDR_LSIG_TXOP(void *cmd, u32 value)
0161 {
0162     le32p_replace_bits((__le32 *)(cmd) + 8, value, BIT(15));
0163 }
0164 
0165 static inline void FWCMD_SET_ADDR_TGT_IND(void *cmd, u32 value)
0166 {
0167     le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(26, 24));
0168 }
0169 
0170 static inline void FWCMD_SET_ADDR_FRM_TGT_IND(void *cmd, u32 value)
0171 {
0172     le32p_replace_bits((__le32 *)(cmd) + 8, value, GENMASK(29, 27));
0173 }
0174 
0175 static inline void FWCMD_SET_ADDR_AID12(void *cmd, u32 value)
0176 {
0177     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(11, 0));
0178 }
0179 
0180 static inline void FWCMD_SET_ADDR_AID12_0(void *cmd, u32 value)
0181 {
0182     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(7, 0));
0183 }
0184 
0185 static inline void FWCMD_SET_ADDR_AID12_1(void *cmd, u32 value)
0186 {
0187     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(11, 8));
0188 }
0189 
0190 static inline void FWCMD_SET_ADDR_WOL_PATTERN(void *cmd, u32 value)
0191 {
0192     le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(12));
0193 }
0194 
0195 static inline void FWCMD_SET_ADDR_WOL_UC(void *cmd, u32 value)
0196 {
0197     le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(13));
0198 }
0199 
0200 static inline void FWCMD_SET_ADDR_WOL_MAGIC(void *cmd, u32 value)
0201 {
0202     le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(14));
0203 }
0204 
0205 static inline void FWCMD_SET_ADDR_WAPI(void *cmd, u32 value)
0206 {
0207     le32p_replace_bits((__le32 *)(cmd) + 9, value, BIT(15));
0208 }
0209 
0210 static inline void FWCMD_SET_ADDR_SEC_ENT_MODE(void *cmd, u32 value)
0211 {
0212     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(17, 16));
0213 }
0214 
0215 static inline void FWCMD_SET_ADDR_SEC_ENT0_KEYID(void *cmd, u32 value)
0216 {
0217     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(19, 18));
0218 }
0219 
0220 static inline void FWCMD_SET_ADDR_SEC_ENT1_KEYID(void *cmd, u32 value)
0221 {
0222     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(21, 20));
0223 }
0224 
0225 static inline void FWCMD_SET_ADDR_SEC_ENT2_KEYID(void *cmd, u32 value)
0226 {
0227     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(23, 22));
0228 }
0229 
0230 static inline void FWCMD_SET_ADDR_SEC_ENT3_KEYID(void *cmd, u32 value)
0231 {
0232     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(25, 24));
0233 }
0234 
0235 static inline void FWCMD_SET_ADDR_SEC_ENT4_KEYID(void *cmd, u32 value)
0236 {
0237     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(27, 26));
0238 }
0239 
0240 static inline void FWCMD_SET_ADDR_SEC_ENT5_KEYID(void *cmd, u32 value)
0241 {
0242     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(29, 28));
0243 }
0244 
0245 static inline void FWCMD_SET_ADDR_SEC_ENT6_KEYID(void *cmd, u32 value)
0246 {
0247     le32p_replace_bits((__le32 *)(cmd) + 9, value, GENMASK(31, 30));
0248 }
0249 
0250 static inline void FWCMD_SET_ADDR_SEC_ENT_VALID(void *cmd, u32 value)
0251 {
0252     le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(7, 0));
0253 }
0254 
0255 static inline void FWCMD_SET_ADDR_SEC_ENT0(void *cmd, u32 value)
0256 {
0257     le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(15, 8));
0258 }
0259 
0260 static inline void FWCMD_SET_ADDR_SEC_ENT1(void *cmd, u32 value)
0261 {
0262     le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(23, 16));
0263 }
0264 
0265 static inline void FWCMD_SET_ADDR_SEC_ENT2(void *cmd, u32 value)
0266 {
0267     le32p_replace_bits((__le32 *)(cmd) + 10, value, GENMASK(31, 24));
0268 }
0269 
0270 static inline void FWCMD_SET_ADDR_SEC_ENT3(void *cmd, u32 value)
0271 {
0272     le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(7, 0));
0273 }
0274 
0275 static inline void FWCMD_SET_ADDR_SEC_ENT4(void *cmd, u32 value)
0276 {
0277     le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(15, 8));
0278 }
0279 
0280 static inline void FWCMD_SET_ADDR_SEC_ENT5(void *cmd, u32 value)
0281 {
0282     le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(23, 16));
0283 }
0284 
0285 static inline void FWCMD_SET_ADDR_SEC_ENT6(void *cmd, u32 value)
0286 {
0287     le32p_replace_bits((__le32 *)(cmd) + 11, value, GENMASK(31, 24));
0288 }
0289 
0290 static inline void FWCMD_SET_ADDR_BSSID_IDX(void *cmd, u32 value)
0291 {
0292     le32p_replace_bits((__le32 *)(cmd) + 12, value, GENMASK(7, 0));
0293 }
0294 
0295 static inline void FWCMD_SET_ADDR_BSSID_OFFSET(void *cmd, u32 value)
0296 {
0297     le32p_replace_bits((__le32 *)(cmd) + 12, value, GENMASK(15, 8));
0298 }
0299 
0300 static inline void FWCMD_SET_ADDR_BSSID_LEN(void *cmd, u32 value)
0301 {
0302     le32p_replace_bits((__le32 *)(cmd) + 12, value, GENMASK(23, 16));
0303 }
0304 
0305 static inline void FWCMD_SET_ADDR_BSSID_VALID(void *cmd, u32 value)
0306 {
0307     le32p_replace_bits((__le32 *)(cmd) + 13, value, BIT(0));
0308 }
0309 
0310 static inline void FWCMD_SET_ADDR_BSSID_BB_SEL(void *cmd, u32 value)
0311 {
0312     le32p_replace_bits((__le32 *)(cmd) + 13, value, BIT(1));
0313 }
0314 
0315 static inline void FWCMD_SET_ADDR_BSSID_MASK(void *cmd, u32 value)
0316 {
0317     le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(7, 2));
0318 }
0319 
0320 static inline void FWCMD_SET_ADDR_BSSID_BSS_COLOR(void *cmd, u32 value)
0321 {
0322     le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(13, 8));
0323 }
0324 
0325 static inline void FWCMD_SET_ADDR_BSSID_BSSID0(void *cmd, u32 value)
0326 {
0327     le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(23, 16));
0328 }
0329 
0330 static inline void FWCMD_SET_ADDR_BSSID_BSSID1(void *cmd, u32 value)
0331 {
0332     le32p_replace_bits((__le32 *)(cmd) + 13, value, GENMASK(31, 24));
0333 }
0334 
0335 static inline void FWCMD_SET_ADDR_BSSID_BSSID2(void *cmd, u32 value)
0336 {
0337     le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(7, 0));
0338 }
0339 
0340 static inline void FWCMD_SET_ADDR_BSSID_BSSID3(void *cmd, u32 value)
0341 {
0342     le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(15, 8));
0343 }
0344 
0345 static inline void FWCMD_SET_ADDR_BSSID_BSSID4(void *cmd, u32 value)
0346 {
0347     le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(23, 16));
0348 }
0349 
0350 static inline void FWCMD_SET_ADDR_BSSID_BSSID5(void *cmd, u32 value)
0351 {
0352     le32p_replace_bits((__le32 *)(cmd) + 14, value, GENMASK(31, 24));
0353 }
0354 
0355 int rtw89_cam_init(struct rtw89_dev *rtwdev, struct rtw89_vif *vif);
0356 void rtw89_cam_deinit(struct rtw89_dev *rtwdev, struct rtw89_vif *vif);
0357 int rtw89_cam_init_addr_cam(struct rtw89_dev *rtwdev,
0358                 struct rtw89_addr_cam_entry *addr_cam,
0359                 const struct rtw89_bssid_cam_entry *bssid_cam);
0360 void rtw89_cam_deinit_addr_cam(struct rtw89_dev *rtwdev,
0361                    struct rtw89_addr_cam_entry *addr_cam);
0362 int rtw89_cam_init_bssid_cam(struct rtw89_dev *rtwdev,
0363                  struct rtw89_vif *rtwvif,
0364                  struct rtw89_bssid_cam_entry *bssid_cam,
0365                  const u8 *bssid);
0366 void rtw89_cam_deinit_bssid_cam(struct rtw89_dev *rtwdev,
0367                 struct rtw89_bssid_cam_entry *bssid_cam);
0368 void rtw89_cam_fill_addr_cam_info(struct rtw89_dev *rtwdev,
0369                   struct rtw89_vif *vif,
0370                   struct rtw89_sta *rtwsta,
0371                   const u8 *scan_mac_addr, u8 *cmd);
0372 void rtw89_cam_fill_dctl_sec_cam_info_v1(struct rtw89_dev *rtwdev,
0373                      struct rtw89_vif *rtwvif,
0374                      struct rtw89_sta *rtwsta,
0375                      u8 *cmd);
0376 int rtw89_cam_fill_bssid_cam_info(struct rtw89_dev *rtwdev,
0377                   struct rtw89_vif *rtwvif,
0378                   struct rtw89_sta *rtwsta, u8 *cmd);
0379 int rtw89_cam_sec_key_add(struct rtw89_dev *rtwdev,
0380               struct ieee80211_vif *vif,
0381               struct ieee80211_sta *sta,
0382               struct ieee80211_key_conf *key);
0383 int rtw89_cam_sec_key_del(struct rtw89_dev *rtwdev,
0384               struct ieee80211_vif *vif,
0385               struct ieee80211_sta *sta,
0386               struct ieee80211_key_conf *key,
0387               bool inform_fw);
0388 void rtw89_cam_bssid_changed(struct rtw89_dev *rtwdev,
0389                  struct rtw89_vif *rtwvif);
0390 void rtw89_cam_reset_keys(struct rtw89_dev *rtwdev);
0391 #endif