#ifndef __RTW89_CAM_H__
#define __RTW89_CAM_H__
#include "core.h"
#define RTW89_SEC_CAM_LEN …
#define RTW89_BSSID_MATCH_ALL …
#define RTW89_BSSID_MATCH_5_BYTES …
static inline void FWCMD_SET_ADDR_IDX(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_OFFSET(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_LEN(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_VALID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_NET_TYPE(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BCN_HIT_COND(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_HIT_RULE(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BB_SEL(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_ADDR_MASK(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_MASK_SEL(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SMA_HASH(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TMA_HASH(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_CAM_IDX(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SMA0(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SMA1(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SMA2(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SMA3(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SMA4(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SMA5(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TMA0(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TMA1(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TMA2(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TMA3(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TMA4(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TMA5(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_MACID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_PORT_INT(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TSF_SYNC(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TF_TRS(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_LSIG_TXOP(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_TGT_IND(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_FRM_TGT_IND(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_AID12(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_AID12_0(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_AID12_1(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_WOL_PATTERN(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_WOL_UC(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_WOL_MAGIC(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_WAPI(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT_MODE(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT0_KEYID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT1_KEYID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT2_KEYID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT3_KEYID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT4_KEYID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT5_KEYID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT6_KEYID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT_VALID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT0(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT1(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT2(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT3(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT4(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT5(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_SEC_ENT6(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_IDX(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_OFFSET(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_LEN(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_VALID(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BB_SEL(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_MASK(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BSS_COLOR(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BSSID0(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BSSID1(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BSSID2(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BSSID3(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BSSID4(void *cmd, u32 value)
{ … }
static inline void FWCMD_SET_ADDR_BSSID_BSSID5(void *cmd, u32 value)
{ … }
struct rtw89_h2c_dctlinfo_ud_v1 { … } __packed;
#define DCTLINFO_V1_C0_MACID …
#define DCTLINFO_V1_C0_OP …
#define DCTLINFO_V1_W0_QOS_FIELD_H …
#define DCTLINFO_V1_W0_HW_EXSEQ_MACID …
#define DCTLINFO_V1_W0_QOS_DATA …
#define DCTLINFO_V1_W0_AES_IV_L …
#define DCTLINFO_V1_W0_ALL …
#define DCTLINFO_V1_W1_AES_IV_H …
#define DCTLINFO_V1_W1_ALL …
#define DCTLINFO_V1_W2_SEQ0 …
#define DCTLINFO_V1_W2_SEQ1 …
#define DCTLINFO_V1_W2_AMSDU_MAX_LEN …
#define DCTLINFO_V1_W2_STA_AMSDU_EN …
#define DCTLINFO_V1_W2_CHKSUM_OFLD_EN …
#define DCTLINFO_V1_W2_WITH_LLC …
#define DCTLINFO_V1_W2_ALL …
#define DCTLINFO_V1_W3_SEQ2 …
#define DCTLINFO_V1_W3_SEQ3 …
#define DCTLINFO_V1_W3_TGT_IND …
#define DCTLINFO_V1_W3_TGT_IND_EN …
#define DCTLINFO_V1_W3_HTC_LB …
#define DCTLINFO_V1_W3_ALL …
#define DCTLINFO_V1_W4_MHDR_LEN …
#define DCTLINFO_V1_W4_VLAN_TAG_VALID …
#define DCTLINFO_V1_W4_VLAN_TAG_SEL …
#define DCTLINFO_V1_W4_HTC_ORDER …
#define DCTLINFO_V1_W4_SEC_KEY_ID …
#define DCTLINFO_V1_W4_WAPI …
#define DCTLINFO_V1_W4_SEC_ENT_MODE …
#define DCTLINFO_V1_W4_SEC_ENT0_KEYID …
#define DCTLINFO_V1_W4_SEC_ENT1_KEYID …
#define DCTLINFO_V1_W4_SEC_ENT2_KEYID …
#define DCTLINFO_V1_W4_SEC_ENT3_KEYID …
#define DCTLINFO_V1_W4_SEC_ENT4_KEYID …
#define DCTLINFO_V1_W4_SEC_ENT5_KEYID …
#define DCTLINFO_V1_W4_SEC_ENT6_KEYID …
#define DCTLINFO_V1_W4_ALL …
#define DCTLINFO_V1_W5_SEC_ENT_VALID …
#define DCTLINFO_V1_W5_SEC_ENT0 …
#define DCTLINFO_V1_W5_SEC_ENT1 …
#define DCTLINFO_V1_W5_SEC_ENT2 …
#define DCTLINFO_V1_W5_ALL …
#define DCTLINFO_V1_W6_SEC_ENT3 …
#define DCTLINFO_V1_W6_SEC_ENT4 …
#define DCTLINFO_V1_W6_SEC_ENT5 …
#define DCTLINFO_V1_W6_SEC_ENT6 …
#define DCTLINFO_V1_W6_ALL …
struct rtw89_h2c_dctlinfo_ud_v2 { … } __packed;
#define DCTLINFO_V2_C0_MACID …
#define DCTLINFO_V2_C0_OP …
#define DCTLINFO_V2_W0_QOS_FIELD_H …
#define DCTLINFO_V2_W0_HW_EXSEQ_MACID …
#define DCTLINFO_V2_W0_QOS_DATA …
#define DCTLINFO_V2_W0_AES_IV_L …
#define DCTLINFO_V2_W0_ALL …
#define DCTLINFO_V2_W1_AES_IV_H …
#define DCTLINFO_V2_W1_ALL …
#define DCTLINFO_V2_W2_SEQ0 …
#define DCTLINFO_V2_W2_SEQ1 …
#define DCTLINFO_V2_W2_AMSDU_MAX_LEN …
#define DCTLINFO_V2_W2_STA_AMSDU_EN …
#define DCTLINFO_V2_W2_CHKSUM_OFLD_EN …
#define DCTLINFO_V2_W2_WITH_LLC …
#define DCTLINFO_V2_W2_NAT25_EN …
#define DCTLINFO_V2_W2_IS_MLD …
#define DCTLINFO_V2_W2_ALL …
#define DCTLINFO_V2_W3_SEQ2 …
#define DCTLINFO_V2_W3_SEQ3 …
#define DCTLINFO_V2_W3_TGT_IND …
#define DCTLINFO_V2_W3_TGT_IND_EN …
#define DCTLINFO_V2_W3_HTC_LB …
#define DCTLINFO_V2_W3_ALL …
#define DCTLINFO_V2_W4_VLAN_TAG_SEL …
#define DCTLINFO_V2_W4_HTC_ORDER …
#define DCTLINFO_V2_W4_SEC_KEY_ID …
#define DCTLINFO_V2_W4_VLAN_RX_DYNAMIC_PCP_EN …
#define DCTLINFO_V2_W4_VLAN_RX_PKT_DROP …
#define DCTLINFO_V2_W4_VLAN_RX_VALID …
#define DCTLINFO_V2_W4_VLAN_TX_VALID …
#define DCTLINFO_V2_W4_WAPI …
#define DCTLINFO_V2_W4_SEC_ENT_MODE …
#define DCTLINFO_V2_W4_SEC_ENT0_KEYID …
#define DCTLINFO_V2_W4_SEC_ENT1_KEYID …
#define DCTLINFO_V2_W4_SEC_ENT2_KEYID …
#define DCTLINFO_V2_W4_SEC_ENT3_KEYID …
#define DCTLINFO_V2_W4_SEC_ENT4_KEYID …
#define DCTLINFO_V2_W4_SEC_ENT5_KEYID …
#define DCTLINFO_V2_W4_SEC_ENT6_KEYID …
#define DCTLINFO_V2_W4_ALL …
#define DCTLINFO_V2_W5_SEC_ENT7_KEYID …
#define DCTLINFO_V2_W5_SEC_ENT8_KEYID …
#define DCTLINFO_V2_W5_SEC_ENT_VALID_V1 …
#define DCTLINFO_V2_W5_SEC_ENT0_V1 …
#define DCTLINFO_V2_W5_ALL …
#define DCTLINFO_V2_W6_SEC_ENT1_V1 …
#define DCTLINFO_V2_W6_SEC_ENT2_V1 …
#define DCTLINFO_V2_W6_SEC_ENT3_V1 …
#define DCTLINFO_V2_W6_SEC_ENT4_V1 …
#define DCTLINFO_V2_W6_ALL …
#define DCTLINFO_V2_W7_SEC_ENT5_V1 …
#define DCTLINFO_V2_W7_SEC_ENT6_V1 …
#define DCTLINFO_V2_W7_SEC_ENT7 …
#define DCTLINFO_V2_W7_SEC_ENT8 …
#define DCTLINFO_V2_W7_ALL …
#define DCTLINFO_V2_W8_MLD_SMA_L_V1 …
#define DCTLINFO_V2_W8_ALL …
#define DCTLINFO_V2_W9_MLD_SMA_H_V1 …
#define DCTLINFO_V2_W9_MLD_TMA_L_V1 …
#define DCTLINFO_V2_W9_ALL …
#define DCTLINFO_V2_W10_MLD_TMA_H_V1 …
#define DCTLINFO_V2_W10_ALL …
#define DCTLINFO_V2_W11_MLD_TA_BSSID_L_V1 …
#define DCTLINFO_V2_W11_ALL …
#define DCTLINFO_V2_W12_MLD_TA_BSSID_H_V1 …
#define DCTLINFO_V2_W12_ALL …
int rtw89_cam_init(struct rtw89_dev *rtwdev, struct rtw89_vif *vif);
void rtw89_cam_deinit(struct rtw89_dev *rtwdev, struct rtw89_vif *vif);
int rtw89_cam_init_addr_cam(struct rtw89_dev *rtwdev,
struct rtw89_addr_cam_entry *addr_cam,
const struct rtw89_bssid_cam_entry *bssid_cam);
void rtw89_cam_deinit_addr_cam(struct rtw89_dev *rtwdev,
struct rtw89_addr_cam_entry *addr_cam);
int rtw89_cam_init_bssid_cam(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif,
struct rtw89_bssid_cam_entry *bssid_cam,
const u8 *bssid);
void rtw89_cam_deinit_bssid_cam(struct rtw89_dev *rtwdev,
struct rtw89_bssid_cam_entry *bssid_cam);
void rtw89_cam_fill_addr_cam_info(struct rtw89_dev *rtwdev,
struct rtw89_vif *vif,
struct rtw89_sta *rtwsta,
const u8 *scan_mac_addr, u8 *cmd);
void rtw89_cam_fill_dctl_sec_cam_info_v1(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif,
struct rtw89_sta *rtwsta,
struct rtw89_h2c_dctlinfo_ud_v1 *h2c);
void rtw89_cam_fill_dctl_sec_cam_info_v2(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif,
struct rtw89_sta *rtwsta,
struct rtw89_h2c_dctlinfo_ud_v2 *h2c);
int rtw89_cam_fill_bssid_cam_info(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif,
struct rtw89_sta *rtwsta, u8 *cmd);
int rtw89_cam_sec_key_add(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct ieee80211_key_conf *key);
int rtw89_cam_sec_key_del(struct rtw89_dev *rtwdev,
struct ieee80211_vif *vif,
struct ieee80211_sta *sta,
struct ieee80211_key_conf *key,
bool inform_fw);
void rtw89_cam_bssid_changed(struct rtw89_dev *rtwdev,
struct rtw89_vif *rtwvif);
void rtw89_cam_reset_keys(struct rtw89_dev *rtwdev);
#endif