mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
mt76_connac2_reverse_frag0_hdr_trans routine is shared between mt7921 and mt7915e drivers. Signed-off-by: Lorenzo Bianconi <[email protected]> Signed-off-by: Felix Fietkau <[email protected]>
154 lines
3.5 KiB
C
154 lines
3.5 KiB
C
/* SPDX-License-Identifier: ISC */
|
|
/* Copyright (C) 2020 MediaTek Inc. */
|
|
|
|
#ifndef __MT7915_MAC_H
|
|
#define __MT7915_MAC_H
|
|
|
|
#include "../mt76_connac2_mac.h"
|
|
|
|
#define MT_CT_PARSE_LEN 72
|
|
#define MT_CT_DMA_BUF_NUM 2
|
|
|
|
#define MT_RXD0_LENGTH GENMASK(15, 0)
|
|
#define MT_RXD0_PKT_TYPE GENMASK(31, 27)
|
|
|
|
#define MT_RXD0_NORMAL_ETH_TYPE_OFS GENMASK(22, 16)
|
|
#define MT_RXD0_NORMAL_IP_SUM BIT(23)
|
|
#define MT_RXD0_NORMAL_UDP_TCP_SUM BIT(24)
|
|
|
|
enum rx_pkt_type {
|
|
PKT_TYPE_TXS,
|
|
PKT_TYPE_TXRXV,
|
|
PKT_TYPE_NORMAL,
|
|
PKT_TYPE_RX_DUP_RFB,
|
|
PKT_TYPE_RX_TMR,
|
|
PKT_TYPE_RETRIEVE,
|
|
PKT_TYPE_TXRX_NOTIFY,
|
|
PKT_TYPE_RX_EVENT,
|
|
PKT_TYPE_RX_FW_MONITOR = 0x0c,
|
|
PKT_TYPE_TXRX_NOTIFY_V0 = 0x18,
|
|
};
|
|
|
|
enum tx_port_idx {
|
|
MT_TX_PORT_IDX_LMAC,
|
|
MT_TX_PORT_IDX_MCU
|
|
};
|
|
|
|
enum tx_mcu_port_q_idx {
|
|
MT_TX_MCU_PORT_RX_Q0 = 0x20,
|
|
MT_TX_MCU_PORT_RX_Q1,
|
|
MT_TX_MCU_PORT_RX_Q2,
|
|
MT_TX_MCU_PORT_RX_Q3,
|
|
MT_TX_MCU_PORT_RX_FWDL = 0x3e
|
|
};
|
|
|
|
#define MT_CT_INFO_APPLY_TXD BIT(0)
|
|
#define MT_CT_INFO_COPY_HOST_TXD_ALL BIT(1)
|
|
#define MT_CT_INFO_MGMT_FRAME BIT(2)
|
|
#define MT_CT_INFO_NONE_CIPHER_FRAME BIT(3)
|
|
#define MT_CT_INFO_HSR2_TX BIT(4)
|
|
#define MT_CT_INFO_FROM_HOST BIT(7)
|
|
|
|
#define MT_TXP_MAX_BUF_NUM 6
|
|
|
|
struct mt7915_txp {
|
|
__le16 flags;
|
|
__le16 token;
|
|
u8 bss_idx;
|
|
__le16 rept_wds_wcid;
|
|
u8 nbuf;
|
|
__le32 buf[MT_TXP_MAX_BUF_NUM];
|
|
__le16 len[MT_TXP_MAX_BUF_NUM];
|
|
} __packed __aligned(4);
|
|
|
|
struct mt7915_tx_free {
|
|
__le16 rx_byte_cnt;
|
|
__le16 ctrl;
|
|
__le32 txd;
|
|
__le32 info[];
|
|
} __packed __aligned(4);
|
|
|
|
#define MT_TX_FREE_VER GENMASK(18, 16)
|
|
#define MT_TX_FREE_MSDU_CNT GENMASK(9, 0)
|
|
#define MT_TX_FREE_MSDU_CNT_V0 GENMASK(6, 0)
|
|
#define MT_TX_FREE_WLAN_ID GENMASK(23, 14)
|
|
#define MT_TX_FREE_LATENCY GENMASK(12, 0)
|
|
/* 0: success, others: dropped */
|
|
#define MT_TX_FREE_MSDU_ID GENMASK(30, 16)
|
|
#define MT_TX_FREE_PAIR BIT(31)
|
|
#define MT_TX_FREE_MPDU_HEADER BIT(30)
|
|
#define MT_TX_FREE_MSDU_ID_V3 GENMASK(14, 0)
|
|
|
|
/* will support this field in further revision */
|
|
#define MT_TX_FREE_RATE GENMASK(13, 0)
|
|
|
|
#define MT_TXS5_F0_FINAL_MPDU BIT(31)
|
|
#define MT_TXS5_F0_QOS BIT(30)
|
|
#define MT_TXS5_F0_TX_COUNT GENMASK(29, 25)
|
|
#define MT_TXS5_F0_FRONT_TIME GENMASK(24, 0)
|
|
#define MT_TXS5_F1_MPDU_TX_COUNT GENMASK(31, 24)
|
|
#define MT_TXS5_F1_MPDU_TX_BYTES GENMASK(23, 0)
|
|
|
|
#define MT_TXS6_F0_NOISE_3 GENMASK(31, 24)
|
|
#define MT_TXS6_F0_NOISE_2 GENMASK(23, 16)
|
|
#define MT_TXS6_F0_NOISE_1 GENMASK(15, 8)
|
|
#define MT_TXS6_F0_NOISE_0 GENMASK(7, 0)
|
|
#define MT_TXS6_F1_MPDU_FAIL_COUNT GENMASK(31, 24)
|
|
#define MT_TXS6_F1_MPDU_FAIL_BYTES GENMASK(23, 0)
|
|
|
|
#define MT_TXS7_F0_RCPI_3 GENMASK(31, 24)
|
|
#define MT_TXS7_F0_RCPI_2 GENMASK(23, 16)
|
|
#define MT_TXS7_F0_RCPI_1 GENMASK(15, 8)
|
|
#define MT_TXS7_F0_RCPI_0 GENMASK(7, 0)
|
|
#define MT_TXS7_F1_MPDU_RETRY_COUNT GENMASK(31, 24)
|
|
#define MT_TXS7_F1_MPDU_RETRY_BYTES GENMASK(23, 0)
|
|
|
|
struct mt7915_dfs_pulse {
|
|
u32 max_width; /* us */
|
|
int max_pwr; /* dbm */
|
|
int min_pwr; /* dbm */
|
|
u32 min_stgr_pri; /* us */
|
|
u32 max_stgr_pri; /* us */
|
|
u32 min_cr_pri; /* us */
|
|
u32 max_cr_pri; /* us */
|
|
};
|
|
|
|
struct mt7915_dfs_pattern {
|
|
u8 enb;
|
|
u8 stgr;
|
|
u8 min_crpn;
|
|
u8 max_crpn;
|
|
u8 min_crpr;
|
|
u8 min_pw;
|
|
u32 min_pri;
|
|
u32 max_pri;
|
|
u8 max_pw;
|
|
u8 min_crbn;
|
|
u8 max_crbn;
|
|
u8 min_stgpn;
|
|
u8 max_stgpn;
|
|
u8 min_stgpr;
|
|
u8 rsv[2];
|
|
u32 min_stgpr_diff;
|
|
} __packed;
|
|
|
|
struct mt7915_dfs_radar_spec {
|
|
struct mt7915_dfs_pulse pulse_th;
|
|
struct mt7915_dfs_pattern radar_pattern[16];
|
|
};
|
|
|
|
static inline struct mt7915_txp *
|
|
mt7915_txwi_to_txp(struct mt76_dev *dev, struct mt76_txwi_cache *t)
|
|
{
|
|
u8 *txwi;
|
|
|
|
if (!t)
|
|
return NULL;
|
|
|
|
txwi = mt76_get_txwi_ptr(dev, t);
|
|
|
|
return (struct mt7915_txp *)(txwi + MT_TXD_SIZE);
|
|
}
|
|
|
|
#endif
|