Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf495496 authored by Golan Ben Ami's avatar Golan Ben Ami Committed by Luca Coelho
Browse files

iwlwifi: introduce new rx structures used by 22560 RFH



22560 devices RFH uses different structures, which act similar
to the legacy rxq management lists - free and used list.

The iwl_rx_transfer_desc struct is part of the free list,
and consists of pointers to the empty rb's the driver wants to
pass to the fw.

The iwl_rx_completion_desc struct is part of the used list,
and consists of pointers to the buffer the fw filled up
with new rx, both commands and data, for the host.

Signed-off-by: default avatarGolan Ben Ami <golan.ben.ami@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent a0ec0169
Loading
Loading
Loading
Loading
+100 −0
Original line number Diff line number Diff line
@@ -99,6 +99,106 @@ struct isr_statistics {
	u32 unhandled;
};

#define IWL_CD_STTS_OPTIMIZED_POS	0
#define IWL_CD_STTS_OPTIMIZED_MSK	0x01
#define IWL_CD_STTS_TRANSFER_STATUS_POS	1
#define IWL_CD_STTS_TRANSFER_STATUS_MSK	0x0E
#define IWL_CD_STTS_WIFI_STATUS_POS	4
#define IWL_CD_STTS_WIFI_STATUS_MSK	0xF0

/**
 * enum iwl_completion_desc_transfer_status -  transfer status (bits 1-3)
 * @IWL_CD_STTS_END_TRANSFER: successful transfer complete.
 *	In sniffer mode, when split is used, set in last CD completion. (RX)
 * @IWL_CD_STTS_OVERFLOW: In sniffer mode, when using split - used for
 *	all CD completion. (RX)
 * @IWL_CD_STTS_ABORTED: CR abort / close flow. (RX)
 */
enum iwl_completion_desc_transfer_status {
	IWL_CD_STTS_UNUSED,
	IWL_CD_STTS_UNUSED_2,
	IWL_CD_STTS_END_TRANSFER,
	IWL_CD_STTS_OVERFLOW,
	IWL_CD_STTS_ABORTED,
	IWL_CD_STTS_ERROR,
};

/**
 * enum iwl_completion_desc_wifi_status - wifi status (bits 4-7)
 * @IWL_CD_STTS_VALID: the packet is valid (RX)
 * @IWL_CD_STTS_FCS_ERR: frame check sequence error (RX)
 * @IWL_CD_STTS_SEC_KEY_ERR: error handling the security key of rx (RX)
 * @IWL_CD_STTS_DECRYPTION_ERR: error decrypting the frame (RX)
 * @IWL_CD_STTS_DUP: duplicate packet (RX)
 * @IWL_CD_STTS_ICV_MIC_ERR: MIC error (RX)
 * @IWL_CD_STTS_INTERNAL_SNAP_ERR: problems removing the snap (RX)
 * @IWL_CD_STTS_SEC_PORT_FAIL: security port fail (RX)
 * @IWL_CD_STTS_BA_OLD_SN: block ack received old SN (RX)
 * @IWL_CD_STTS_QOS_NULL: QoS null packet (RX)
 * @IWL_CD_STTS_MAC_HDR_ERR: MAC header conversion error (RX)
 * @IWL_CD_STTS_MAX_RETRANS: reached max number of retransmissions (TX)
 * @IWL_CD_STTS_EX_LIFETIME: exceeded lifetime (TX)
 * @IWL_CD_STTS_NOT_USED: completed but not used (RX)
 * @IWL_CD_STTS_REPLAY_ERR: pn check failed, replay error (RX)
 */
enum iwl_completion_desc_wifi_status {
	IWL_CD_STTS_VALID,
	IWL_CD_STTS_FCS_ERR,
	IWL_CD_STTS_SEC_KEY_ERR,
	IWL_CD_STTS_DECRYPTION_ERR,
	IWL_CD_STTS_DUP,
	IWL_CD_STTS_ICV_MIC_ERR,
	IWL_CD_STTS_INTERNAL_SNAP_ERR,
	IWL_CD_STTS_SEC_PORT_FAIL,
	IWL_CD_STTS_BA_OLD_SN,
	IWL_CD_STTS_QOS_NULL,
	IWL_CD_STTS_MAC_HDR_ERR,
	IWL_CD_STTS_MAX_RETRANS,
	IWL_CD_STTS_EX_LIFETIME,
	IWL_CD_STTS_NOT_USED,
	IWL_CD_STTS_REPLAY_ERR,
};

#define IWL_RX_TD_TYPE		0xff000000
#define IWL_RX_TD_SIZE		0x00ffffff

/**
 * struct iwl_rx_transfer_desc - transfer descriptor
 * @type_n_size: buffer type (bit 0: external buff valid,
 *	bit 1: optional footer valid, bit 2-7: reserved)
 *	and buffer size
 * @addr: ptr to free buffer start address
 * @rbid: unique tag of the buffer
 * @reserved: reserved
 */
struct iwl_rx_transfer_desc {
	__le32 type_n_size;
	__le64 addr;
	__le16 rbid;
	__le16 reserved;
} __packed;

#define IWL_RX_CD_SIZE		0xffffff00

/**
 * struct iwl_rx_completion_desc - completion descriptor
 * @type: buffer type (bit 0: external buff valid,
 *	bit 1: optional footer valid, bit 2-7: reserved)
 * @status: status of the completion
 * @reserved1: reserved
 * @rbid: unique tag of the received buffer
 * @size: buffer size, masked by IWL_RX_CD_SIZE
 * @reserved2: reserved
 */
struct iwl_rx_completion_desc {
	u8 type;
	u8 status;
	__le16 reserved1;
	__le16 rbid;
	__le32 size;
	u8 reserved2[22];
} __packed;

/**
 * struct iwl_rxq - Rx queue
 * @id: queue index